The material structure in Maxwell's equations is determined by the relative permittivity ε(r) and permeability μ(r).
However, ε is not only a function of position. In general, it also depends on frequency (material dispersion) and on the electric field E itself (nonlinearity). It may also depend on the orientation of the field (anisotropy). Material dispersion, in turn, is generally associated with absorption loss in the material, or possibly gain. All of these effects can be simulated in Meep, with certain restrictions. Similarly for the relative permeability μ(r), for which dispersion, nonlinearity, and anisotropy are all supported as well.
In this section, we describe the form of the equations and material properties that Meep can simulate. The actual user interface where these properties are specified in the simulation is described in Python User Interface.
[TOC]
Physically, material dispersion arises because the polarization of the material does not respond instantaneously to an applied field E, and this is essentially the way that it is implemented in FDTD. In particular,
where ε$_\infty$, which must be positive, is the instantaneous dielectric function (the infinite-frequency response) and P is the remaining frequency-dependent polarization density in the material. P, in turn, has its own time-evolution equation, and the exact form of this equation determines the frequency-dependence ε(ω).
Note: Meep's definition of ω uses a sign convention
Meep supports a Lorentzian susceptibility profile which consists of a sum of harmonic resonances plus a term for the frequency-independent electric conductivity:
where σ$_D$ is the electric conductivity, ω$_n$ and γ$_n$ are user-specified constants. Actually, the numbers that one specifies are f$_n$ = ω$_n$/2π and γ$_n$/2π. The σ$n(\mathbf{x})$ is a user-specified function of position giving the strength of the n-th resonance. The σ parameters can be anisotropic (real-symmetric) tensors, while the frequency-independent term ε$\infty$ can be an arbitrary real-symmetric tensor as well. This corresponds to evolving P via the equations:
That is, we must store and evolve a set of auxiliary fields
Note that the conductivity σ$D$ corresponds to an imaginary part of ε given by $i \varepsilon\infty \sigma_D / \omega$. This does not include the harmonic-resonance terms. When you specify frequency in Meep units, however, you are specifying f without the 2π, so the imaginary part of ε is
Meep also supports polarizations of the Drude form, typically used for metals:
which corresponds to a term of the following form in ε's
which is equivalent to the Lorentzian model except that the
For a wavelength-dependent, purely-real permittivity (i.e., with no loss) which can be represented via the Sellmeier equation:
where λ is the vacuum wavelength, each term containing two coefficients (Bn and Cn) can be directly transferred to a Lorentzian polarization field using a simple substitution of variables: ωn=1/$\sqrt{C_n}$, γn=0, and σn=Bn. Several examples of importing Sellmeier coefficients from published fitting data including germanium (Ge) and gallium nitride (GaN) are provided in the Materials Library.
In some cases, you may need to reduce the Courant
parameter
If a Lorentzian resonance at ω$_n$ is specified at too high a frequency relative to the time discretization
Roughly speaking, the
Finally, overlapping dispersive materials with perfectly-matched layer (PML) absorbing boundaries may produce instabilities. A workaround is to replace the PML with an absorber.
If γ above is nonzero, then the dielectric function ε(ω) becomes complex, where the imaginary part is associated with absorption loss in the material if it is positive, or gain if it is negative. Alternatively, a dissipation loss or gain may be added by a positive or negative conductivity, respectively — this is often convenient if you only care about the imaginary part of ε in a narrow bandwidth, and is described in detail below.
If you look at Maxwell's equations, then
absorption rate
Meep can keep track of this energy for the Lorentzian polarizability terms but not for the conductivity terms. For gain, this gives the amount of energy expended in amplifying the field.
Often, you only care about the absorption loss in a narrow bandwidth, where you just want to set the imaginary part of ε (or μ) to some known experimental value, in the same way that you often just care about setting a dispersionless real ε that is the correct value in your bandwidth of interest.
One approach to this problem would be allowing you to specify a constant, frequency-independent, imaginary part of ε, but this has the disadvantage of requiring the simulation to employ complex fields which double the memory and time requirements, and also tends to be numerically unstable. Instead, the approach in Meep is for you to set the conductivity
For example, suppose you want to simulate a medium with meep.Medium(epsilon=3.4, D_conductivity=2*math.pi*0.42*0.101/3.4)
in Python or (make medium (epsilon 3.4) (D-conductivity (* 2 pi 0.42 0.101 (/ 3.4))))
in Scheme; i.e.
Note: the "conductivity" in Meep is slightly different from the conductivity you might find in a textbook, because for computational convenience it appears as
In general, ε can be changed anisotropically by the E field itself, with:
where the ij is the index of the change in the 3$\times$3 ε tensor and the
Meep supports instantaneous, isotropic Pockels and Kerr nonlinearities, corresponding to a frequency-independent
Here, "diag(E)" indicates the diagonal 3$\times$3 matrix with the components of E along the diagonal.
Normally, for nonlinear systems you will want to use real fields E. This is the default. However, Meep uses complex fields if you have Bloch-periodic boundary conditions with a non-zero Bloch wavevector k, or in cylindrical coordinates with
For complex fields in nonlinear systems, the physical interpretation of the above equations is unclear because one cannot simply obtain the physical solution by taking the real part any more. In particular, Meep simply defines the meaning of the nonlinearity for complex fields as follows: the real and imaginary parts of the fields do not interact nonlinearly. That is, the above equation should be taken to hold for the real and imaginary parts (of E and D) separately: e.g., |E|2 is the squared magnitude of the real part of E for when computing the real part of D, and conversely for the imaginary part.
For a discussion of how to relate
All of the above features that are supported for the electric permittivity ε are also supported for the magnetic permeability μ. That is, Meep supports μ with dispersion from magnetic conductivity and Lorentzian resonances, as well as magnetic
For some problems, simply adding gain or loss using a conductivity term does not correctly model the desired system and will lead to unphysical results. For example, attempting to model a laser by adding gain through a conductivity term will yield a diverging electric field, as the conductivity-based gain cannot saturate, and will continue to amplify arbitrarily strong electric fields within the laser cavity. Instead, such systems must be modeled using a saturable gain medium, in which the available gain is reduced for stronger electric fields, which prohibits the electric field from diverging in this manner.
Meep supports saturable gain and absorbing media through the use of a set of auxiliary equations which model both the polarization and inversion of the saturable medium. Meep's implementation of these auxiliary equations is similar to that described in Optics Express, Vol. 19, pp. 1539-62, 2011, in which the polarization is treated using the oscillator model and the inversion is modeled as a set of rate equations for the population densities of the atomic levels of the saturable medium. The oscillator model for saturable media is a second-order differential equation for the polarization that is slightly different from the Drude-Lorentz susceptibility:
where
where
In Meep, one can specify an arbitrary number of atomic levels with any number of lasing transitions between them, enabling one to realize common two- and four-level saturable media, as well as entire manifolds of levels and transitions found in realistic models of saturable media. When assigning the necessary transition frequencies,
Although Meep is using an oscillator model equation for the atomic polarization and level populations, instead of the Bloch equations, Meep retains the two terms usually approximated to zero when deriving the oscillator model equations from the Bloch equations, and so these equations are exactly equivalent to the Bloch equations. For more details, see Section 6.4.1 of Nonlinear Optics (third edition) by R. W. Boyd. To verify this equivalence between the different equations for modeling the polarization, as well as confirm that saturable media have been properly implemented in Meep, we compare the results of Meep with an independent FDTD solver using the Bloch equations and the frequency domain steady-state ab initio laser theory (SALT), in a 1d, one-sided, Fabry-Perot cavity containing a two-level gain medium that exhibits steady-state, multi-mode lasing. The cavity has a length of
For the two-level atomic gain model used in this example,
Analogous relationships can be found for systems with more than two atomic levels in Optics Express, Vol. 20, pp. 474-88, 2012.
There is no standard convention in the literature on lasers and saturable gain media for defining the various constants in the equations above. The following are the relationships among these constants for the three methods:
The relationship among Meep and SALT units are:
For a two level gain medium,
(Experimental feature) Meep supports gyrotropic media, which break optical reciprocity and give rise to magneto-optical phenomena such as the Faraday effect. Such materials are used in devices like Faraday rotators.
In a gyrotropic medium, the polarization vector undergoes precession around a preferred direction. In the frequency domain, this corresponds to the presence of skew-symmetric off-diagonal components in the ε tensor (for a gyroelectric medium) or the μ tensor (for a gyromagnetic medium). Two different gyrotropy models are supported:
The first gyrotropy model is a Drude-Lorentz model with an additional precession, which is intended to describe gyroelectric materials. The polarization equation is
(Optionally, the polarization may be of Drude form, in which case the
Hence, the magnitude of the bias vector is the angular frequency of the gyrotropic precession induced by the external field.
The second gyrotropy model is a linearized Landau-Lifshitz-Gilbert equation, suitable for modeling gyromagnetic materials such as ferrites. Its polarization equation of motion is
Note: although the above equation is written in terms of electric susceptibilities, this model is typically used for magnetic susceptibilities. Meep places no restriction on the field type that either gyrotropy model can be applied to. As usual, electric and magnetic susceptibilities can be swapped by substituting ε with μ, E with H, etc.
The Landau-Lifshitz-Gilbert equation describes the precessional motion of a saturated point magnetic dipole in a magnetic field. In the above equation, the variable
In this model,
Suppose
$$\mathbf{P}n = \begin{bmatrix}\chi\perp & -i\eta & 0 \ i\eta & \chi_\perp & 0 \ 0 & 0 & \chi_\parallel \end{bmatrix} \mathbf{E}$$
For the gyrotropic Lorentzian model,
And for the gyrotropic saturated dipole (linearized Landau-Lifshitz-Gilbert) model,
A materials library is available for Python and Scheme containing crystalline silicon (c-Si), amorphous silicon (a-Si) including the hydrogenated form, silicon dioxide (SiO2), indium tin oxide (ITO), alumina (Al2O3), gallium arsenide (GaAs), aluminum arsenide (AlAs), aluminum nitride (AlN), borosilicate glass (BK7), fused quartz, silicon nitride (Si3N4), germanium (Ge), indium phosphide (InP), gallium nitride (GaN), cadmium telluride (CdTe), lithium niobate (LiNbO3), barium borate (BaB2O4), calcium tungstate (CaWO4), calcium carbonate (CaCO3), yttrium oxide (Y2O3), yttrium aluminum garnet (YAG), poly(methyl methacrylate) (PMMA), polycarbonate, polystyrene, cellulose, as well as 11 elemental metals: silver (Ag), gold (Au), copper (Cu), aluminum (Al), berylium (Be), chromium (Cr), nickel (Ni), palladium (Pd), platinum (Pt), titanium (Ti), and tungsten (W).
Experimental values of the complex refractive index are fit to a Drude-Lorentz susceptibility model over various wavelength ranges. For example, the fit for crystalline silicon is based on Progress in Photovoltaics, Vol. 3, pp. 189-92, 1995 for the wavelength range of 0.4-1.0 µm as described in J. Optical Society of America A, Vol. 28, pp. 770-77, 2011. The fit for the elemental metals is over the range of 0.2-12.4 μm and is described in Applied Optics, Vol. 37, pp. 5271-83, 1998.
Fitting parameters for all materials are defined for a unit distance of 1 µm. For simulations which use a different value for the unit distance, the predefined variable um_scale
(Python) or um-scale
(Scheme) must be scaled by multiplying by whatever the unit distance is, in units of µm. For example, if the unit distance is 100 nm, this would require adding the line um_scale = 0.1*um_scale
after the line where um_scale
is defined. This change must be made directly to the materials library file.
As an example, to import aluminum from the library into a Python script requires adding the following lines:
from meep.materials import Al
Then, the material can be simply used as geometry = [meep.Cylinder(material=Al, ...]
.
In Scheme, the materials library is already included when Meep is run, so you can use it without any initialization:
(set! geometry (list (make cylinder (material Al) ...)))
Note: for narrowband calculations, some of the Lorentzian susceptibility terms may be unnecessary and will contribute to consuming more computational resources than are required (due to the additional storage and time stepping of the polarization fields). Computational efficiency can be improved (without significantly affecting accuracy) by removing from the material definitions those Lorentzian susceptibility terms which are far outside the spectral region of interest.