Electromagnetic Template Library (EMTL)
|
Medium is constructed by class emMedium
. Constructor arguments are dielectric permittivity \(\varepsilon\), conductivity \(\sigma\), magnetic permeability \( \mu \) and magnetic losses \( \sigma *\). Their default values are 1, 0, 1, 0
.
Unlike frequency domain methods, the dielectric permittivity \(\varepsilon(\omega)\) of dispersive materials in tabular form cannot be directly substituted into the FDTD
scheme. Instead, it can be approximated using multiple Drude or Lorentz terms in the form:
where \(\varepsilon_{\infty}\) is permitivitty at infinite frequency, and \(\omega_p\), \(\gamma_p\), \(\Delta \gamma_p'\), \(\Delta \varepsilon\) are fitting coefficients that do not necessary have a physical meaning. Zero \(\gamma'\) values corresponds to conventional Drude and Lorentz form. Sometimes nonzero \( \gamma'\) value helps to make better fitting for given \(\varepsilon(\omega)\) while conventional Drude and Lorentz form fails (see details here). Parts of dielectric function:
This is example for gold ( \(\gamma'\) is zero)
emMedium m(5.4); m.AddPolarizability(emDrude(.14*1e17,.103*1e+15/2,1)); m.AddPolarizability(emLorentz(.427*1e+16,.87*1e+15,2.54*.268)); m.AddPolarizability(emLorentz(.523*1e+16,1.32*1e+15,2.54*.732)); m.calibrate(1/(299792458*1e+6));
Parameters for Drude and Lorentz constructors are \( \omega_0\), \( \gamma\), \(\Delta \varepsilon \) and \( \gamma'\). Default value of \( \gamma'\) is zero.
In our example, we use the data from here. In this work, the parameters \( \omega_0\), \(\gamma\) are expressed in the units of \(\frac{radian}{second}\). In our code, we istead use the units of radians per FDTD
unit of time. In order to translate the considered parameters to desired units, the function calibrate can be used. This function multiplies \(\omega_0\), \(\gamma\), \(\gamma'\)(also \(\sigma \) and \( \sigma *\)) by its argument.
In our example, FDTD
unit of length equals to 1 micron. Since \(c=1\), FDTD
unit of time is time necessary for light to cover one micron. Therefore argument of function calibrate should be inverse light speed (second / micron).
There are ready approximations for some media (gold, silver, silicon, tungsten etc.) in EMTL. Corresponding functions are collected in photonic/opt_data.h
. For example
emMedium au=GetAu(); // au is gold. `FDTD` unit of length is 1 micron
returns approximation for gold used above for default FDTD
length unit 1 micron. If your unit of length is 0.1 micron, use
emMedium au=GetAu(0.1); // au is gold. `FDTD` unit of length is 0.1 micron
Useful documentation: