From 891ad6d74c255634353035a51edb03966f66f29e Mon Sep 17 00:00:00 2001 From: Ardavan Oskooi Date: Wed, 25 May 2022 17:46:46 -0700 Subject: [PATCH 1/6] unit test and tutorial for LDOS in planar cavity using cylindrical coordinates --- .../Local_Density_of_States.md | 123 ++++++++++++--- .../planar_cavity_purcell_enhancement.png | Bin 31856 -> 90288 bytes python/examples/planar_cavity_ldos.py | 118 +++++++++++--- python/tests/test_ldos.py | 145 +++++++++++++++--- 4 files changed, 323 insertions(+), 63 deletions(-) diff --git a/doc/docs/Python_Tutorials/Local_Density_of_States.md b/doc/docs/Python_Tutorials/Local_Density_of_States.md index 088d6ea82..4770fa374 100644 --- a/doc/docs/Python_Tutorials/Local_Density_of_States.md +++ b/doc/docs/Python_Tutorials/Local_Density_of_States.md @@ -14,13 +14,15 @@ where the $|\hat{p}(\omega)|^2$ normalization is necessary for obtaining the pow Planar Cavity with Lossless Metallic Walls ------------------------------------------ -The spontaneous-emission rate of a point-dipole emitter in a planar cavity bounded by a lossless metallic mirror can be tuned using the thickness of the cavity. A schematic of the cavity is shown in the figure inset below. In this example, the 3D cavity consists of two mirrors separated in the *z* direction by a distance $L$. The cavity consists of a homogeneous dielectric with $n$=2.4. The dipole wavelength ($\lambda$) is 1.0 μm with horizontal polarization along the *x* axis. The Purcell enhancement factor, a dimensionless quantity defined relative to the bulk medium, can be computed analytically in terms of the cavity thickness in units of the medium wavelength ($nL/\lambda$) for this system using equation (7) of [IEEE J. Quantum Electronics, Vol. 34, pp. 71-76 (1998)](https://ieeexplore.ieee.org/abstract/document/655009). We will validate the simulated results using the analytic theory. +The spontaneous-emission rate of a point-dipole emitter in a planar cavity bounded by a lossless metallic mirror can be tuned using the thickness of the cavity. A schematic of the cavity is shown in the figure inset below. In this example, the 3D cavity consists of two mirrors separated in the $z$ direction by a distance $L$. The cavity consists of a homogeneous dielectric with $n$=2.4. The dipole wavelength ($\lambda$) is 1.0 μm with polarization *parallel* to the mirrors. The Purcell enhancement factor, a dimensionless quantity defined relative to the bulk medium, can be computed analytically in terms of the cavity thickness in units of the medium wavelength ($nL/\lambda$) for this system using equation (7) of [IEEE J. Quantum Electronics, Vol. 34, pp. 71-76 (1998)](https://ieeexplore.ieee.org/abstract/document/655009). We will validate the simulated results using the analytic theory. Since this system has cylindrical symmetry, we can perform an identical simulation in [cylindrical coordinates](Cylindrical_Coordinates.md) which is much faster because it is a 2D calculation. In this demonstration, the cavity thickness is swept over a range of 0.5 to 2.5. Below a thickness of 0.5 there are no guided modes and thus the Purcell enhancement factor is zero. -Two types of simulations are necessary for computing the Purcell enhancement factor: (1) bulk medium and (2) cavity. The `dft_ldos` featured is used to compute the LDOS in each case at a single wavelength. The Purcell enhancement factor is computed as the ratio of the LDOS measured in (2) to that from (1). Each simulation uses three mirror symmetries to reduce the size of the 3D computation by a factor of eight. The cavity is infinitely extended in the *xy* plane and thus the cell is terminated using PMLs in these two directions. Because Meep uses a default boundary condition of a perfect electric conductor, there is no need to explicitly define the boundaries in the *z* direction. The fields are timestepped until they have decayed away sufficiently due to absorption by the PMLs at the location of the pulsed source. +Two types of simulations are necessary for computing the Purcell enhancement factor: (1) bulk medium and (2) cavity. The `dft_ldos` featured is used to compute the LDOS in each case at a single wavelength. The Purcell enhancement factor is computed as the ratio of the LDOS measured in (2) to that from (1). -As shown in the plot below, the results from Meep agree well with the analytic theory. +In 3D, each simulation uses three mirror symmetries to reduce the size of the computation by a factor of eight. The dipole is polarized in the $x$ direction. The cavity is infinitely extended in the $xy$ plane and thus the cell is terminated using PMLs in these two directions. Because Meep uses a default boundary condition of a perfect electric conductor, there is no need to explicitly define the boundaries in the $z$ direction. In cylindrical coordinates, the dipole is polarized in the $r$ direction. A linearly polarized source in cylindrical coordiantes is described in [Tutorial/Cylindrical Coordinates/Scattering Cross Section of a Finite Dielectric Cylinder](Cylindrical_Coordinates.md#scattering-cross-section-of-a-finite-dielectric-cylinder). The fields are timestepped until they have decayed away sufficiently due to absorption by the PMLs at the location of the pulsed source. + +As shown in the plot below, the results from Meep for both coordinate systems agree well with the analytic theory.
![](../images/planar_cavity_purcell_enhancement.png) @@ -43,21 +45,85 @@ n = 2.4 # refractive index of surrounding medium wvl = 1.0 # wavelength (in vacuum) fcen = 1/wvl -sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), - component=mp.Ex, - center=mp.Vector3())] -symmetries = [mp.Mirror(direction=mp.X,phase=-1), - mp.Mirror(direction=mp.Y), - mp.Mirror(direction=mp.Z)] +def bulk_ldos_cyl(): + sr = L+dpml + sz = L+2*dpml + cell_size = mp.Vector3(sr,0,sz) + + pml_layers = [mp.PML(dpml)] + + sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), + component=mp.Er, + center=mp.Vector3()), + mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), + component=mp.Er, + center=mp.Vector3(), + amplitude=-1j)] + + sim = mp.Simulation(resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + sources=sources, + dimensions=mp.CYLINDRICAL, + m=-1, + default_material=mp.Medium(index=n)) + + sim.run(mp.dft_ldos(fcen,0,1), + until_after_sources=mp.stop_when_fields_decayed(20, + mp.Er, + mp.Vector3(), + 1e-6)) + + return sim.ldos_data[0] + + +def cavity_ldos_cyl(sz): + sr = L+dpml + cell_size = mp.Vector3(sr,0,sz) + + pml_layers = [mp.PML(dpml,direction=mp.R)] + + sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), + component=mp.Er, + center=mp.Vector3()), + mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), + component=mp.Er, + center=mp.Vector3(), + amplitude=-1j)] -def bulk_ldos(): + sim = mp.Simulation(resolution=resolution, + cell_size=cell_size, + boundary_layers=pml_layers, + sources=sources, + dimensions=mp.CYLINDRICAL, + m=-1, + default_material=mp.Medium(index=n)) + + sim.run(mp.dft_ldos(fcen,0,1), + until_after_sources=mp.stop_when_fields_decayed(20, + mp.Er, + mp.Vector3(), + 1e-6)) + + return sim.ldos_data[0] + + +def bulk_ldos_3D(): s = L+2*dpml cell_size = mp.Vector3(s,s,s) pml_layers = [mp.PML(dpml)] + sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), + component=mp.Ex, + center=mp.Vector3())] + + symmetries = [mp.Mirror(direction=mp.X,phase=-1), + mp.Mirror(direction=mp.Y), + mp.Mirror(direction=mp.Z)] + sim = mp.Simulation(resolution=resolution, cell_size=cell_size, boundary_layers=pml_layers, @@ -74,13 +140,21 @@ def bulk_ldos(): return sim.ldos_data[0] -def cavity_ldos(sz): +def cavity_ldos_3D(sz): sxy = L+2*dpml cell_size = mp.Vector3(sxy,sxy,sz) boundary_layers = [mp.PML(dpml,direction=mp.X), mp.PML(dpml,direction=mp.Y)] + sources = [mp.Source(src=mp.GaussianSource(fcen,fwidth=0.2*fcen), + component=mp.Ex, + center=mp.Vector3())] + + symmetries = [mp.Mirror(direction=mp.X,phase=-1), + mp.Mirror(direction=mp.Y), + mp.Mirror(direction=mp.Z)] + sim = mp.Simulation(resolution=resolution, cell_size=cell_size, boundary_layers=boundary_layers, @@ -98,21 +172,27 @@ def cavity_ldos(sz): if __name__ == '__main__': - ldos_bulk = bulk_ldos() - print("ldos_bulk:, {:.6f}".format(ldos_bulk)) + ldos_bulk_cyl = bulk_ldos_cyl() + ldos_bulk_3D = bulk_ldos_3D() # units of wavelength in medium cavity_thickness = np.arange(0.50,2.55,0.05) gap = cavity_thickness*wvl/n - ldos_cavity = np.zeros(len(cavity_thickness)) + ldos_cavity_cyl = np.zeros(len(cavity_thickness)) + ldos_cavity_3D = np.zeros(len(cavity_thickness)) for idx,g in enumerate(gap): - ldos_cavity[idx] = cavity_ldos(g) - print("ldos_cavity:, {:.3f}, {:.6f}".format(g,ldos_cavity[idx])) + ldos_cavity_cyl[idx] = cavity_ldos_cyl(g) + ldos_cavity_3D[idx] = cavity_ldos_3D(g) + print("purcell-enh:, {:.3f}, " + "{:.6f} (cyl.), {:.6f} (3D)".format(cavity_thickness[idx], + ldos_cavity_cyl[idx]/ldos_bulk_cyl, + ldos_cavity_3D[idx]/ldos_bulk_3D)) # Purcell enhancement factor (relative to bulk medium) - pe_meep = ldos_cavity/ldos_bulk + pe_meep_cyl = ldos_cavity_cyl / ldos_bulk_cyl + pe_meep_3D = ldos_cavity_3D / ldos_bulk_3D # equation 7 of reference pe_theory = (3*np.fix(cavity_thickness+0.5)/(4*cavity_thickness) + @@ -121,14 +201,17 @@ if __name__ == '__main__': (16*np.power(cavity_thickness,3))) if mp.am_master(): - plt.plot(cavity_thickness,pe_meep,'b-',label='Meep') - plt.plot(cavity_thickness,pe_theory,'r-',label='theory') + plt.plot(cavity_thickness,pe_meep_3D,'b-',label='Meep (3D)') + plt.plot(cavity_thickness,pe_meep_cyl,'r-',label='Meep (cylin.)') + plt.plot(cavity_thickness,pe_theory,'g-',label='theory') plt.plot(cavity_thickness,np.ones(len(cavity_thickness)),'k--') plt.xlabel('cavity thickness') plt.ylabel('Purcell enhancement factor (relative to bulk)') + plt.title("horizontal point dipole at λ=1.0 μm in a cavity with" + "\n n=2.4 and lossless metallic walls on two sides") plt.axis([0.5,2.5,0.4,3.1]) plt.legend() - plt.savefig('planar_cavity_purcell_factor_vs_thickness', + plt.savefig('cavity_purcell_factor_vs_thickness.png', bbox_inches='tight') ``` diff --git a/doc/docs/images/planar_cavity_purcell_enhancement.png b/doc/docs/images/planar_cavity_purcell_enhancement.png index 603be4410bfdd1e0932d05d7dda084fce148a5a6..fb1151b66ee20f0ecc22627bfba92f0f253b12bc 100644 GIT binary patch literal 90288 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