Electromagnetic Template Library (EMTL)
|
Classes for dispersive media fix applied using auxiliary differential equations (ADE) method, see Taflove book. More...
#include <array>
#include <vector>
#include "seqpack.h"
#include "packer.h"
#include "alignedallocator.h"
#include "emdefs.h"
#include "dump.h"
#include "fix.h"
#include "medium.h"
Classes | |
class | emDispersionSolver |
Fix class for dispersive media described by Drude / Lorentz terms. More... | |
class | emDispersionSolver::iterator |
Iterator on recorded points (see general description in fix.h) More... | |
class | emDispersionFraqSolver |
Fix class for the linear combination of dispersive media emMedium described by Drude and Lorentz terms. More... | |
struct | med_refs |
This class is used to find if given combination of media was already used at the recording stage of emFixDispersion. More... | |
class | emDispersionSolverV |
vectorized version More... | |
class | emFixDispersion |
Correction set for Drude-Lorentz items. More... | |
struct | emDispersionVecAccessHelper |
Compares vectorized and standard solvers. More... | |
Classes for dispersive media fix applied using auxiliary differential equations (ADE) method, see Taflove book.
Auxiliary differential equations (ADE) method is used to model media with dielectric function represented as a sum of Debye, Drude, Lorentz or extended Lorentz terms (see fdtd.kintechlab.com/en/fitting).
We implemented this method for Lorentz and extended Lorentz terms. Drude terms are modeled using the same scheme as for Lorentz terms (coefficient before \(\omega^2\) in denomenator is assumed to be zero).
ADE scheme is given by following update equation for E field (3-point time discretization scheme for the second order differential equation is used): \(\vec{E}_{n+1} = CE\cdot\vec{E}_n + CEp\cdot E_{n-1} + Crot\cdot[{\rm rot}\vec{H} - \sum(CJ\cdot\vec{J}_n + CJp\cdot\vec{J}_{n-1})],\)
where summation is performed over Lorentz terms. Each Lorentz term is described by current which is updated according to: J_{n+1} = cJ*J_n + cJp*J_{n-1} + cE*(E_{n+1}-E_{n-1}). In equations above, bottom index corresponds to the time step, C are coeeficients in E update equation, c are coefficients in J update equation.
As it is already written in fix.h, we separate special algorithms from basic FDTD dielectric cycle (E = E + rot H). All special algoritms are implemented in corresponding fix classes. Here we describe algorithm for dispersive algorithm. We store arrays for E_{n-1}, J and J_{n-1} (variables Ep, J, Jp) in the fix class, while array for E is stored outside fix class.
Algorithm for dispersive media is performed in 2 stages.
J = cJ*J + cJp*Jp - cE*E_{n-1} for Lorentz term, or J = cJ*J + cJp*Jp + cE*E_n - cEp*E_{n-1} for extended Lorentz term.
In evations above suffix 'p' is related to the previous time iteration.
J = J + cE*E for Lorentz term, or J = J + cEn*E for extended Lorentz term
Fix class for dispersive media is implemented as emFixDispersion and emFixDispersionOffDiagItem. These classes contain objects of emDispersionSolver and emDispersionFraqSolver, which implement directly ADE algorithm and store arrays for Ep, J, Jp.
General description of fix classes is given at fix.h. Here we just give some details related to described fix classes for dispersive media.