Electromagnetic Template Library (EMTL)
|
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"
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. | |
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:
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:
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.