From a93a1585b0bd4b3525423c91ed88064d4d54c2da Mon Sep 17 00:00:00 2001 From: Ardavan Oskooi Date: Thu, 1 Sep 2022 12:28:09 -0700 Subject: [PATCH] tutorial for LDOS and extraction efficiency of an LED (#2215) * tutorial for LDOS and extraction efficiency * tweaks and fixes * Update Local_Density_of_States.md Co-authored-by: Steven G. Johnson --- .../Local_Density_of_States.md | 258 +++++++++++++++++- doc/docs/Python_User_Interface.md | 30 +- doc/docs/images/dipole_extraction_eff_3D.png | Bin 0 -> 14930 bytes doc/docs/images/dipole_extraction_eff_cyl.png | Bin 0 -> 14651 bytes .../extraction_eff_vs_dipole_height.png | Bin 0 -> 54724 bytes python/examples/extraction_eff_ldos.py | 206 ++++++++++++++ python/simulation.py | 3 +- 7 files changed, 479 insertions(+), 18 deletions(-) create mode 100644 doc/docs/images/dipole_extraction_eff_3D.png create mode 100644 doc/docs/images/dipole_extraction_eff_cyl.png create mode 100644 doc/docs/images/extraction_eff_vs_dipole_height.png create mode 100644 python/examples/extraction_eff_ldos.py diff --git a/doc/docs/Python_Tutorials/Local_Density_of_States.md b/doc/docs/Python_Tutorials/Local_Density_of_States.md index d5a50bb60..9518e4cec 100644 --- a/doc/docs/Python_Tutorials/Local_Density_of_States.md +++ b/doc/docs/Python_Tutorials/Local_Density_of_States.md @@ -4,7 +4,7 @@ In this example, we will demonstrate the local [density of states](https://en.wikipedia.org/wiki/Density_of_states) (LDOS) feature by investigating the Purcell enhancement phenomena in two different metallic cavities. The LDOS, in general, has many important uses for understanding classical dipole sources, but also in many physical phenomena that can be understood semiclassically in terms of dipole currents — for example, the [spontaneous emission](https://en.wikipedia.org/wiki/Spontaneous_emission) rate of atoms (key to fluorescence and lasing phenomena) is proportional to the LDOS. -The LDOS is equivalent to the power radiated by a unit dipole, $P=\frac{1}{2}\operatorname{Re}[\mathbf{E}^*\cdot\mathbf{J}]$, which, alternatively, is really just a measure of how much the harmonic modes of a system overlap with the source point. Also, the LDOS is proportional to the [radiation resistance](https://en.wikipedia.org/wiki/Radiation_resistance) of a dipole antenna. It is a useful quantity in electromagnetism due to the fact that the *same* current radiates a *different* amount of power depending on the surrounding geometry. Analytically, the per-polarization LDOS is exactly proportional to the power radiated by an $\ell$-oriented point-dipole current, $p(t)$, at a given position in space. For a more mathematical treatment of the theory behind the LDOS, see Section 4.4 ("Currents and Fields: The Local Density of States") in [Chapter 4](http://arxiv.org/abs/arXiv:1301.5366) ("Electromagnetic Wave Source Conditions") of the book [Advances in FDTD Computational Electrodynamics: Photonics and Nanotechnology](https://www.amazon.com/Advances-FDTD-Computational-Electrodynamics-Nanotechnology/dp/1608071707), but for now we simply give the result: +The LDOS is equivalent to the power radiated by a unit dipole, $P=\frac{1}{2}\operatorname{Re}[\mathbf{E}^*\cdot\mathbf{J}]$, which, alternatively, is really just a measure of how much the harmonic modes of a system overlap with the source point. Also, the LDOS is proportional to the [radiation resistance](https://en.wikipedia.org/wiki/Radiation_resistance) of a dipole antenna. It is a useful quantity in electromagnetism due to the fact that the *same* current radiates a *different* amount of power depending on the surrounding environment. Analytically, the per-polarization LDOS is exactly proportional to the power radiated by an $\ell$-oriented point-dipole current, $p(t)$, at a given position in space. For a more mathematical treatment of the theory behind the LDOS, see Section 4.4 ("Currents and Fields: The Local Density of States") in [Chapter 4](http://arxiv.org/abs/arXiv:1301.5366) ("Electromagnetic Wave Source Conditions") of the book [Advances in FDTD Computational Electrodynamics: Photonics and Nanotechnology](https://www.amazon.com/Advances-FDTD-Computational-Electrodynamics-Nanotechnology/dp/1608071707), but for now we simply give the result: $$\operatorname{LDOS}_{\ell}(\vec{x}_0,\omega)=-\frac{2}{\pi}\varepsilon(\vec{x}_0)\frac{\operatorname{Re}[\hat{E}_{\ell}(\vec{x}_0,\omega)\hat{p}(\omega)^*]}{|\hat{p}(\omega)|^2}$$ @@ -23,7 +23,7 @@ Two types of simulations are necessary for computing the Purcell enhancement fac In 3D, each simulation uses three [mirror symmetries](../Exploiting_Symmetry.md#rotations-and-reflections) 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 the cell is therefore terminated using PMLs in $x$ and $y$. 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. -In cylindrical coordinates, the dipole is polarized in the $r$ direction. Setting up a linearly polarized source in cylindrical coordiantes is demonstrated in [Tutorial/Cylindrical Coordinates/Scattering Cross Section of a Finite Dielectric Cylinder](Cylindrical_Coordinates.md#scattering-cross-section-of-a-finite-dielectric-cylinder). However, all that is necessary in this example which involves a single point dipole rather than a planewave is one simulation involving an $E_r$ source at $r=0$ with $m=-1$. This is actually a circularly polarized source but this is sufficient because the $m=+1$ simulation produces an identical result to the $m=-1$ simulation. It is therefore not necessary to perform two separate simulations for $m=\pm 1$ in order to average the results from the left- and right-circularly polarized sources. +In cylindrical coordinates, the dipole is polarized in the $r$ direction. Setting up a linearly polarized source in cylindrical coordinates is demonstrated in [Tutorial/Cylindrical Coordinates/Scattering Cross Section of a Finite Dielectric Cylinder](Cylindrical_Coordinates.md#scattering-cross-section-of-a-finite-dielectric-cylinder). However, all that is necessary in this example which involves a single point dipole rather than a planewave is one simulation involving an $E_r$ source at $r=0$ with $m=-1$. This is actually a circularly polarized source but this is sufficient because the $m=+1$ simulation produces an identical result to the $m=-1$ simulation. It is therefore not necessary to perform two separate simulations for $m=\pm 1$ in order to average the results from the left- and right-circularly polarized sources. One important parameter when setting up this calculation is the grid resolution. @@ -35,7 +35,6 @@ As shown in the plot below, the results from Meep for both coordinate systems ag ![](../images/planar_cavity_purcell_enhancement.png#center) - The simulation script is [examples/planar_cavity_ldos.py](https://github.com/NanoComp/meep/blob/master/python/examples/planar_cavity_ldos.py). ```py @@ -315,3 +314,256 @@ plt.show() ``` ![](../images/Metalcavity_ldos.png#center) + + +Extraction Efficiency of a Light-Emitting Diode (LED) +----------------------------------------------------- + +Another application of the LDOS feature involves computing the extraction efficiency of a dipole emitter. The extraction efficiency is used to determine the external [quantum efficiency](https://en.wikipedia.org/wiki/Quantum_efficiency) (EQE) of light-emitting diodes (LEDs). The spontaneous-emission rate, computed in the previous examples, is proportional to the internal quantum efficiency (IQE). The EQE is the product of the IQE and the extraction efficiency. + +The extraction efficiency is defined as the ratio of the power extracted from the device to the total power generated by the dipole emitter. Computing the extracted power is straightforward: use a set of DFT monitors to capture all the outgoing flux. By Poynting's theorem, as long as all the outgoing flux is measured, the size and orientation of the DFT monitors is arbitrary. To compute the total power emitted by the dipole, one approach would be to enclose the point dipole with a six-sided box (in 3D) of DFT field monitors. The challenge, however, with this approach is that whenever the dipole is adjacent to an object (e.g., a surface or scatterer) then the DFT box must be made small enough to enclose *only* the dipole embedded within the homogeneous source medium. Because of this requirement, for cases in which the dipole is just a few nanometers from a nearby object (particularly if it is a lossy metal involving surface plasmon polaritons), the grid resolution may need to be significantly increased to obtain accurate results. Unfortunately, this can make 3D computations quite expensive. + +A more efficient approach to computing the total emitted power from the dipole is to use the LDOS. In particular, the terms in the numerator from the LDOS expression above are exactly equivalent to the emitted power: $$-\operatorname{Re}[\hat{E}_{\ell}(\vec{x}_0,\omega)\hat{p}(\omega)^*].$$ The Fourier-transformed electric field $\hat{E}_{\ell}(\vec{x}_0,\omega)$ and current source $\hat{p}(\omega)$ can be obtained using the `ldos_Fdata` and `ldos_Jdata` members of the `Simulation` class object, respectively. The LDOS approach has the advantage that it involves just a single point monitor (colocated with the dipole source) and thus does not require the expense of collecting DFT fields for the flux through an enclosing box (and in some circumstances resolving the Poynting flux may also require higher resolution). + +To demonstrate this feature of the LDOS, we will compute the extraction efficiency of an LED-like structure consisting of a point dipole embedded within a dielectric layer ($n$=2.4 and thickness 0.7 $\lambda/n$) surrounded by vacuum and positioned above an infinite ground plane of a lossless metal. We will compute the extraction efficiency (at a wavelength $\lambda$ = 1.0 μm for a dipole with polarization parallel to the ground plane) as a function of the height of the dipole source above the ground plane using two different coordinate systems — 3D Cartesian and cylindrical — and demonstrate that the results are equivalent (apart from discretization error). The simulation setup is shown in the figures below for 3D Cartesian (cross section in $xz$) and cylindrical coordinates. (Note that this single-dipole calculation differs from the somewhat related flux calculation in [Tutorials/Custom Source/Stochastic Dipole Emission in Light Emitting Diodes](Custom_Source.md#stochastic-dipole-emission-in-light-emitting-diodes) which involved modeling a *collection* of dipoles.) + +![](../images/dipole_extraction_eff_3D.png#center) + +![](../images/dipole_extraction_eff_cyl.png#center) + +Simulation using cylindrical (2D) coordinates is significantly faster and more memory efficient than 3D. However, care must be taken to ensure that the pulsed source in cylindrical coordinates is (1) narrow bandwidth *and* (2) turns on/off smoothly. These two properties are necessary to avoid abruptly turning the source on and off which can generate high-frequency spectral components at the Nyquist frequency of the grid. These components have zero group velocity and we have observed that they decay particularly slowly near the origin in cylindrical coordinates. The net result is that these residual fields will fail to decay away and thus preclude the convergence of the DFT monitors (and hence the LDOS itself). Because of the inverse relationship between frequency and time domain, a narrowband and long-cutoff source involves a longer time duration. In this example, the `cutoff` property of the `GaussianSource` is doubled to 10 from its default value of 5. The spectral bandwidth (`fwidth`) is 5% of the center frequency of 1.0. + +Finally, the total emitted power obtained using the formula above must be multiplied by $\Delta V$, the volume of the voxel. In cylindrical coordinates, $\Delta V$ for a source at the origin turns out to be $\pi/(resolution)^3$ and in 3D it is $1/(resolution)^3$. + +As shown in the figure below, the results from the two coordinate systems have good agreement. + +The simulation script is [examples/extraction_eff_ldos.py](https://github.com/NanoComp/meep/blob/master/python/examples/extraction_eff_ldos.py). + +```py +import numpy as np +import meep as mp +import matplotlib +matplotlib.use('agg') +import matplotlib.pyplot as plt + + +resolution = 80 # pixels/μm +dpml = 0.5 # thickness of PML +dair = 1.0 # thickness of air padding +L = 6.0 # length of non-PML region +n = 2.4 # refractive index of surrounding medium +wvl = 1.0 # wavelength (in vacuum) + +fcen = 1 / wvl # center frequency of source/monitor + +# source properties (cylindrical) +df = 0.05 * fcen +cutoff = 10.0 +src = mp.GaussianSource(fcen, fwidth=df, cutoff=cutoff) + +# termination criteria +tol = 1e-8 + + +def extraction_eff_cyl(dmat: float, h: float) -> float: + """Computes the extraction efficiency of a point dipole embedded + within a dielectric layer above a lossless ground plane in + cylindrical coordinates. + + Args: + dmat: thickness of dielectric layer. + h: height of dipole above ground plane as fraction of dmat. + """ + sr = L + dpml + sz = dmat + dair + dpml + cell_size = mp.Vector3(sr, 0, sz) + + boundary_layers = [ + mp.PML(dpml, direction=mp.R), + mp.PML(dpml, direction=mp.Z, side=mp.High), + ] + + src_cmpt = mp.Er + src_pt = mp.Vector3(0, 0, -0.5 * sz + h * dmat) + sources = [mp.Source(src=src, component=src_cmpt, center=src_pt)] + + geometry = [ + mp.Block( + material=mp.Medium(index=n), + center=mp.Vector3(0, 0, -0.5 * sz + 0.5 * dmat), + size=mp.Vector3(mp.inf, mp.inf, dmat), + ) + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + dimensions=mp.CYLINDRICAL, + m=-1, + boundary_layers=boundary_layers, + sources=sources, + geometry=geometry, + ) + + flux_air = sim.add_flux( + fcen, + 0, + 1, + mp.FluxRegion( + center=mp.Vector3(0.5 * L, 0, 0.5 * sz - dpml), + size=mp.Vector3(L, 0, 0), + ), + mp.FluxRegion( + center=mp.Vector3(L, 0, 0.5 * sz - dpml - 0.5 * dair), + size=mp.Vector3(0, 0, dair), + ), + ) + + sim.run( + mp.dft_ldos(fcen, 0, 1), + until_after_sources=mp.stop_when_fields_decayed( + 20, src_cmpt, src_pt, tol + ), + ) + + out_flux = mp.get_fluxes(flux_air)[0] + dV = np.pi / (resolution**3) + total_flux = -np.real(sim.ldos_Fdata[0] * np.conj(sim.ldos_Jdata[0])) * dV + ext_eff = out_flux / total_flux + print(f"extraction efficiency (cyl):, " + f"{dmat:.4f}, {h:.4f}, {ext_eff:.6f}") + + return ext_eff + + +def extraction_eff_3D(dmat: float, h: float) -> float: + """Computes the extraction efficiency of a point dipole embedded + within a dielectric layer above a lossless ground plane in + 3D Cartesian coordinates. + + Args: + dmat: thickness of dielectric layer. + h: height of dipole above ground plane as fraction of dmat. + """ + sxy = L + 2 * dpml + sz = dmat + dair + dpml + cell_size = mp.Vector3(sxy, sxy, sz) + + symmetries = [ + mp.Mirror(direction=mp.X, phase=-1), + mp.Mirror(direction=mp.Y) + ] + + boundary_layers = [ + mp.PML(dpml, direction=mp.X), + mp.PML(dpml, direction=mp.Y), + mp.PML(dpml, direction=mp.Z, side=mp.High), + ] + + src_cmpt = mp.Ex + src_pt = mp.Vector3(0, 0, -0.5 * sz + h * dmat) + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=0.1 * fcen), + component=src_cmpt, + center=src_pt, + ) + ] + + geometry = [ + mp.Block( + material=mp.Medium(index=n), + center=mp.Vector3(0, 0, -0.5 * sz + 0.5 * dmat), + size=mp.Vector3(mp.inf, mp.inf, dmat), + ) + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=boundary_layers, + sources=sources, + geometry=geometry, + symmetries=symmetries, + ) + + flux_air = sim.add_flux( + fcen, + 0, + 1, + mp.FluxRegion( + center=mp.Vector3(0, 0, 0.5 * sz - dpml), + size=mp.Vector3(L, L, 0), + ), + mp.FluxRegion( + center=mp.Vector3( + 0.5 * L, 0, 0.5 * sz - dpml - 0.5 * dair + ), + size=mp.Vector3(0, L, dair), + ), + mp.FluxRegion( + center=mp.Vector3( + -0.5 * L, 0, 0.5 * sz - dpml - 0.5 * dair + ), + size=mp.Vector3(0, L, dair), + weight=-1.0, + ), + mp.FluxRegion( + center=mp.Vector3( + 0, 0.5 * L, 0.5 * sz - dpml - 0.5 * dair + ), + size=mp.Vector3(L, 0, dair), + ), + mp.FluxRegion( + center=mp.Vector3( + 0, -0.5 * L, 0.5 * sz - dpml - 0.5 * dair + ), + size=mp.Vector3(L, 0, dair), + weight=-1.0, + ), + ) + + sim.run( + mp.dft_ldos(fcen, 0, 1), + until_after_sources=mp.stop_when_fields_decayed( + 20, src_cmpt, src_pt, tol + ), + ) + + out_flux = mp.get_fluxes(flux_air)[0] + dV = 1 / (resolution**3) + total_flux = -np.real(sim.ldos_Fdata[0] * np.conj(sim.ldos_Jdata[0])) * dV + ext_eff = out_flux / total_flux + print(f"extraction efficiency (3D):, " + f"{dmat:.4f}, {h:.4f}, {ext_eff:.6f}") + + return ext_eff + + +if __name__ == "__main__": + layer_thickness = 0.7 * wvl / n + dipole_height = np.linspace(0.1,0.9,21) + + exteff_cyl = np.zeros(len(dipole_height)) + exteff_3D = np.zeros(len(dipole_height)) + for j in range(len(dipole_height)): + exteff_cyl[j] = extraction_eff_cyl(layer_thickness, dipole_height[j]) + exteff_3D[j] = extraction_eff_3D(layer_thickness, dipole_height[j]) + + plt.plot(dipole_height,exteff_cyl,'bo-',label='cylindrical') + plt.plot(dipole_height,exteff_3D,'ro-',label='3D Cartesian') + plt.xlabel(f"height of dipole above ground plane " + f"(fraction of layer thickness)") + plt.ylabel("extraction efficiency") + plt.legend() + + if mp.am_master(): + plt.savefig( + 'extraction_eff_vs_dipole_height.png', + dpi=150, + bbox_inches='tight' + ) +``` + + +![](../images/extraction_eff_vs_dipole_height.png#center) diff --git a/doc/docs/Python_User_Interface.md b/doc/docs/Python_User_Interface.md index 327168cc3..2d3bf370f 100644 --- a/doc/docs/Python_User_Interface.md +++ b/doc/docs/Python_User_Interface.md @@ -88,20 +88,20 @@ control various parameters of the Meep computation. def __init__(self, cell_size: Union[meep.geom.Vector3, Tuple[float, ...], NoneType] = None, resolution: float = None, - geometry: Union[List[meep.geom.GeometricObject], NoneType] = None, - sources: Union[List[meep.source.Source], NoneType] = None, + geometry: Optional[List[meep.geom.GeometricObject]] = None, + sources: Optional[List[meep.source.Source]] = None, eps_averaging: bool = True, dimensions: int = 3, - boundary_layers: Union[List[meep.simulation.PML], NoneType] = None, - symmetries: Union[List[meep.simulation.Symmetry], NoneType] = None, + boundary_layers: Optional[List[meep.simulation.PML]] = None, + symmetries: Optional[List[meep.simulation.Symmetry]] = None, force_complex_fields: bool = False, default_material: meep.geom.Medium = Medium(), m: float = 0, k_point: Union[meep.geom.Vector3, Tuple[float, ...], bool] = False, kz_2d: str = 'complex', - extra_materials: Union[List[meep.geom.Medium], NoneType] = None, - material_function: Union[Callable[[Union[meep.geom.Vector3, Tuple[float, ...]]], meep.geom.Medium], NoneType] = None, - epsilon_func: Union[Callable[[Union[meep.geom.Vector3, Tuple[float, ...]]], float], NoneType] = None, + extra_materials: Optional[List[meep.geom.Medium]] = None, + material_function: Optional[Callable[[Union[meep.geom.Vector3, Tuple[float, ...]]], meep.geom.Medium]] = None, + epsilon_func: Optional[Callable[[Union[meep.geom.Vector3, Tuple[float, ...]]], float]] = None, epsilon_input_file: str = '', progress_interval: float = 4, subpixel_tol: float = 0.0001, @@ -112,8 +112,8 @@ def __init__(self, num_chunks: int = 0, Courant: float = 0.5, accurate_fields_near_cylorigin: bool = False, - filename_prefix: Union[str, NoneType] = None, - output_volume: Union[meep.simulation.Volume, NoneType] = None, + filename_prefix: Optional[str] = None, + output_volume: Optional[meep.simulation.Volume] = None, output_single_precision: bool = False, geometry_center: Union[meep.geom.Vector3, Tuple[float, ...]] = Vector3<0.0, 0.0, 0.0>, force_all_components: bool = False, @@ -2085,7 +2085,8 @@ arbitrarily spaced frequencies. One can also pass in an `Ldos` object as The resulting spectrum is outputted as comma-delimited text, prefixed by `ldos:,`, and is also stored in the `ldos_data` variable of the `Simulation` object after the `run` -is complete. +is complete. The Fourier-transformed electric field and current source are stored in +the `ldos_Fdata` and `ldos_Jdata` of the `Simulation` object, respectively. @@ -6240,7 +6241,7 @@ def __init__(self, side: int = -1, R_asymptotic: float = 1e-15, mean_stretch: float = 1.0, - pml_profile: Callable[[float], float] = at 0x7f3ad518a310>): + pml_profile: Callable[[float], float] = at 0x7f3a89740ca0>): ```
@@ -6979,7 +6980,7 @@ def __init__(self, size: Union[meep.geom.Vector3, Tuple[float, ...]] = Vector3<0.0, 0.0, 0.0>, direction: int = -1, weight: float = 1.0, - volume: Union[meep.simulation.Volume, NoneType] = None): + volume: Optional[meep.simulation.Volume] = None): ```
@@ -7395,7 +7396,7 @@ def __init__(self, pt: Union[meep.geom.Vector3, Tuple[float, ...]] = None, fcen: float = None, df: float = None, - mxbands: Union[int, NoneType] = None): + mxbands: Optional[int] = None): ```
@@ -7859,7 +7860,8 @@ arbitrarily spaced frequencies. One can also pass in an `Ldos` object as The resulting spectrum is outputted as comma-delimited text, prefixed by `ldos:,`, and is also stored in the `ldos_data` variable of the `Simulation` object after the `run` -is complete. +is complete. The Fourier-transformed electric field and current source are stored in +the `ldos_Fdata` and `ldos_Jdata` of the `Simulation` object, respectively.
diff --git a/doc/docs/images/dipole_extraction_eff_3D.png b/doc/docs/images/dipole_extraction_eff_3D.png new file mode 100644 index 0000000000000000000000000000000000000000..0aa2102e6e8ee3aaa2ca783a39ee780384bea3fe GIT binary patch literal 14930 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 literal 0 HcmV?d00001 diff --git a/doc/docs/images/extraction_eff_vs_dipole_height.png b/doc/docs/images/extraction_eff_vs_dipole_height.png new file mode 100644 index 0000000000000000000000000000000000000000..b5052f98b44a0ae00cd04d4086e08b352c050317 GIT binary patch literal 54724 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¥Cq@uvwpV9`2 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 float: + """Computes the extraction efficiency of a point dipole embedded + within a dielectric layer above a lossless ground plane in + cylindrical coordinates. + + Args: + dmat: thickness of dielectric layer. + h: height of dipole above ground plane as fraction of dmat. + """ + sr = L + dpml + sz = dmat + dair + dpml + cell_size = mp.Vector3(sr, 0, sz) + + boundary_layers = [ + mp.PML(dpml, direction=mp.R), + mp.PML(dpml, direction=mp.Z, side=mp.High), + ] + + src_cmpt = mp.Er + src_pt = mp.Vector3(0, 0, -0.5 * sz + h * dmat) + sources = [mp.Source(src=src, component=src_cmpt, center=src_pt)] + + geometry = [ + mp.Block( + material=mp.Medium(index=n), + center=mp.Vector3(0, 0, -0.5 * sz + 0.5 * dmat), + size=mp.Vector3(mp.inf, mp.inf, dmat), + ) + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + dimensions=mp.CYLINDRICAL, + m=-1, + boundary_layers=boundary_layers, + sources=sources, + geometry=geometry, + ) + + flux_air = sim.add_flux( + fcen, + 0, + 1, + mp.FluxRegion( + center=mp.Vector3(0.5 * L, 0, 0.5 * sz - dpml), + size=mp.Vector3(L, 0, 0), + ), + mp.FluxRegion( + center=mp.Vector3(L, 0, 0.5 * sz - dpml - 0.5 * dair), + size=mp.Vector3(0, 0, dair), + ), + ) + + sim.run( + mp.dft_ldos(fcen, 0, 1), + until_after_sources=mp.stop_when_fields_decayed(20, src_cmpt, src_pt, tol), + ) + + out_flux = mp.get_fluxes(flux_air)[0] + dV = np.pi / (resolution**3) + total_flux = -np.real(sim.ldos_Fdata[0] * np.conj(sim.ldos_Jdata[0])) * dV + ext_eff = out_flux / total_flux + print(f"extraction efficiency (cyl):, " f"{dmat:.4f}, {h:.4f}, {ext_eff:.6f}") + + return ext_eff + + +def extraction_eff_3D(dmat: float, h: float) -> float: + """Computes the extraction efficiency of a point dipole embedded + within a dielectric layer above a lossless ground plane in + 3D Cartesian coordinates. + + Args: + dmat: thickness of dielectric layer. + h: height of dipole above ground plane as fraction of dmat. + """ + sxy = L + 2 * dpml + sz = dmat + dair + dpml + cell_size = mp.Vector3(sxy, sxy, sz) + + symmetries = [mp.Mirror(direction=mp.X, phase=-1), mp.Mirror(direction=mp.Y)] + + boundary_layers = [ + mp.PML(dpml, direction=mp.X), + mp.PML(dpml, direction=mp.Y), + mp.PML(dpml, direction=mp.Z, side=mp.High), + ] + + src_cmpt = mp.Ex + src_pt = mp.Vector3(0, 0, -0.5 * sz + h * dmat) + sources = [ + mp.Source( + src=mp.GaussianSource(fcen, fwidth=0.1 * fcen), + component=src_cmpt, + center=src_pt, + ) + ] + + geometry = [ + mp.Block( + material=mp.Medium(index=n), + center=mp.Vector3(0, 0, -0.5 * sz + 0.5 * dmat), + size=mp.Vector3(mp.inf, mp.inf, dmat), + ) + ] + + sim = mp.Simulation( + resolution=resolution, + cell_size=cell_size, + boundary_layers=boundary_layers, + sources=sources, + geometry=geometry, + symmetries=symmetries, + ) + + flux_air = sim.add_flux( + fcen, + 0, + 1, + mp.FluxRegion( + center=mp.Vector3(0, 0, 0.5 * sz - dpml), + size=mp.Vector3(L, L, 0), + ), + mp.FluxRegion( + center=mp.Vector3(0.5 * L, 0, 0.5 * sz - dpml - 0.5 * dair), + size=mp.Vector3(0, L, dair), + ), + mp.FluxRegion( + center=mp.Vector3(-0.5 * L, 0, 0.5 * sz - dpml - 0.5 * dair), + size=mp.Vector3(0, L, dair), + weight=-1.0, + ), + mp.FluxRegion( + center=mp.Vector3(0, 0.5 * L, 0.5 * sz - dpml - 0.5 * dair), + size=mp.Vector3(L, 0, dair), + ), + mp.FluxRegion( + center=mp.Vector3(0, -0.5 * L, 0.5 * sz - dpml - 0.5 * dair), + size=mp.Vector3(L, 0, dair), + weight=-1.0, + ), + ) + + sim.run( + mp.dft_ldos(fcen, 0, 1), + until_after_sources=mp.stop_when_fields_decayed(20, src_cmpt, src_pt, tol), + ) + + out_flux = mp.get_fluxes(flux_air)[0] + dV = 1 / (resolution**3) + total_flux = -np.real(sim.ldos_Fdata[0] * np.conj(sim.ldos_Jdata[0])) * dV + ext_eff = out_flux / total_flux + print(f"extraction efficiency (3D):, " f"{dmat:.4f}, {h:.4f}, {ext_eff:.6f}") + + return ext_eff + + +if __name__ == "__main__": + layer_thickness = 0.7 * wvl / n + dipole_height = np.linspace(0.1, 0.9, 21) + + exteff_cyl = np.zeros(len(dipole_height)) + exteff_3D = np.zeros(len(dipole_height)) + for j in range(len(dipole_height)): + exteff_cyl[j] = extraction_eff_cyl(layer_thickness, dipole_height[j]) + exteff_3D[j] = extraction_eff_3D(layer_thickness, dipole_height[j]) + + plt.plot(dipole_height, exteff_cyl, "bo-", label="cylindrical") + plt.plot(dipole_height, exteff_3D, "ro-", label="3D Cartesian") + plt.xlabel(f"height of dipole above ground plane " f"(fraction of layer thickness)") + plt.ylabel("extraction efficiency") + plt.legend() + + if mp.am_master(): + plt.savefig("extraction_eff_vs_dipole_height.png", dpi=150, bbox_inches="tight") diff --git a/python/simulation.py b/python/simulation.py index f895d609c..96cd63f9e 100644 --- a/python/simulation.py +++ b/python/simulation.py @@ -5825,7 +5825,8 @@ def dft_ldos(*args, **kwargs): The resulting spectrum is outputted as comma-delimited text, prefixed by `ldos:,`, and is also stored in the `ldos_data` variable of the `Simulation` object after the `run` - is complete. + is complete. The Fourier-transformed electric field and current source are stored in + the `ldos_Fdata` and `ldos_Jdata` of the `Simulation` object, respectively. """ ldos = kwargs.get("ldos", None) if ldos is None: