Electromagnetic Template Library (EMTL)
Loading...
Searching...
No Matches
dispersion.h File Reference

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"
Include dependency graph for dispersion.h:
This graph shows which files directly or indirectly include this file:

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...
 

Detailed Description

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.

  1. First, function step_before (implemented the fix class): E = CE*E + CEp*Ep - Crot*summa(CJ*J + CJp*Jp)),

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.

  1. FDTD basic cycle (outside fix class): E = 1*E + Crot*rotH
  2. Funtion step_after (implemented in the fix class):

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.