Electromagnetic Template Library (EMTL)
Loading...
Searching...
No Matches
Materials

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:

\( \varepsilon(\omega)=\varepsilon_{\infty} -\sum_{p=1}^{N_D}\frac{\Delta \varepsilon_p (\omega_p^2 - i\gamma_p'\omega)}{i\omega\gamma_p+\omega^2} +\sum_{p=1}^{N_L}\frac{\Delta \varepsilon (\omega_p^2 - i\gamma_p'\omega)}{\omega_p^2-2i\omega\gamma_p-\omega^2} \)

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:

  • emDebay: \(\frac{\Delta \varepsilon}{1-2i\omega\gamma_p}\)
  • emDrude: \(\frac{\Delta \varepsilon \omega_p^2}{-2i\omega\gamma_p-\omega^2}\)
  • emLorentz: \(\frac{\Delta \varepsilon \left(\omega_p^2 - i\omega\gamma'_p\right)}{\omega_p^2-2i\omega\gamma_p-\omega^2}\)s

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: