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

Classes for UPML and CPML. More...

#include <vector>
#include <array>
#include "emdefs.h"
#include "medium.h"
#include "fix.h"
#include "mesh_ui.h"
#include "emcomponent.h"
#include "seqpack.h"
#include "transfer.h"
#include "packer.h"
#include "omp_pointers.h"
#include "pml_function.h"
Include dependency graph for pml.h:

Classes

class  emUPMLSolver
 Fix class for UPML. More...
 
class  emUPMLSolver::iterator
 iterator for sequence of recorded data More...
 
class  emFixUPML
 Fix class for UPML. More...
 
struct  emFixUPML::UPML_t
 Structure used to find if data for medium was already recorded. More...
 
class  emCPMLSolverV
 vectorized version More...
 
struct  emCPMLVecAccessHelper
 Compares vectorized and standard solvers. More...
 
struct  emPMLRegion
 PML region descriptor. More...
 
struct  emPMLBox
 box-shape PML More...
 
struct  emPMLPeriodic
 PML in two opposite sides of box-type calculated volume (used when periodical boundary conditions are applied at other sides) More...
 

Macros

#define INSTANTIATE_PML(container_t, meshblock_t)
 This macro provides all instantiations to assemble PML fixes with given container and meshblock types.
 

Detailed Description

Classes for UPML and CPML.

Absorbing boundary conditions in FDTD are used to eliminate reflection of electromagnetic wave from borders of calculated volume and simulate its withdraw to infinity. Successful implementation of absorbing boundary conditions can be implemented as a specific artificial medium which absorbs all incident waves without reflection. First implementation of such medium was proposed by J.-P. Berenger and is called Perfectly Matched Layer, PML. It is based on splitting E and H fields on two components.

There are two improved PML formulation:

  1. Uniaxial PML (UPML), which is a type of absorbing anisotropic medium. FDTD discretization scheme for UPML depends on adjacent medium. The simplest discretization scheme is for UPML in dielectric, while UPML in dispersive medium requires some modification.
  2. Convolutional PML (CPML) based on analytical extension of Maxwell equations to complex plane. Solution of Maxwell equation in CPML decays exponentially. Discretization for CPML does not depend on properties of adjacent medium.

PML descrition can be found in chapter 7 of Taflove textbook.

Currently UPML for dielectrics and CPML are implemented in EMTL. Discretization scheme UPML for dielectrics works faster then CPML. However, in the case of dispersive media one should use CPML.

This is description of UPML.

We store fields E and D in each mesh point inside UPML. Field D is updated according to the basic update procedure for E (see fix.h) D_{n+1} = Ca*D_n + Cb*rotH. Field E is updated as E_{n+1}=CE*E_n+CD*D_n+CDn*D_{n+1}. Here subscript corresponds to the time iteration, C are come coefficients.

As described in fix.h, special algorithms are separated from the basic update FDTD cycle (which is addition of rotH to the field E) in EMTL. Discretization scheme for UPML is special algorithm implemented in corresponding fix class. This class stores array for field D. Array for field E is stored in classes responsible for basic update cycle.

UPML update is done in 3 steps:

  1. Function step_before of the fix class: E=CE*E+CD*D After this update, fields E and D are interchanged.
  2. Update for D in the basic update cycle: D = Ca*D + Cb*rotH In this equation we use D, not E; since E is substituted with D at the previous step.
  3. Function step_after of the fix class: E+=CDn*D After this, E and D are interchanged back.

This is description of CPML. ....... will be documented soon.......

Fixes for UPML and CPML are implemented in classes emFixUPML and emFixCPML. These classes have vector of objects of the type emUPMLSolver and emCPMLSolver, which implement discretization schemes and manage auxilliary arrays.

General description of fix classes is given in fix.h.