PLaSK library
|
Base class for all solvers using reflection matrix method. More...
#include <solvers/optical/modal/impedance.hpp>
Public Member Functions | |
cvector | getReflectionVector (const cvector &incident, IncidentDirection side) override |
Get vector of reflection coefficients. | |
ImpedanceTransfer (ModalBase *solver, Expansion &expansion) | |
Public Member Functions inherited from plask::optical::modal::XanceTransfer | |
cvector | getTransmissionVector (const cvector &incident, IncidentDirection side) override |
Get vector of transmission coefficients. | |
XanceTransfer (ModalBase *solver, Expansion &expansion) | |
Public Member Functions inherited from plask::optical::modal::Transfer | |
void | initDiagonalization () |
Init diagonalization. | |
Transfer (ModalBase *solver, Expansion &expansion) | |
Create transfer object and initialize memory. | |
virtual | ~Transfer () |
dcomplex | determinant () |
Compute discontinuity matrix determinant for the current parameters. | |
LazyData< Vec< 3, dcomplex > > | getFieldE (double power, const shared_ptr< const Mesh > &dst_mesh, InterpolationMethod method, PropagationDirection part=PROPAGATION_TOTAL) |
Get electric field at the given mesh for resonant mode. | |
LazyData< Vec< 3, dcomplex > > | getFieldH (double power, const shared_ptr< const Mesh > &dst_mesh, InterpolationMethod method, PropagationDirection part=PROPAGATION_TOTAL) |
Get magnetic field at the given mesh for resonant mode. | |
LazyData< double > | getFieldMagnitude (double power, const shared_ptr< const Mesh > &dst_mesh, InterpolationMethod method) |
Get light magnitude for resonant mode. | |
LazyData< Vec< 3, dcomplex > > | getScatteredFieldE (const cvector &incident, IncidentDirection side, const shared_ptr< const Mesh > &dst_mesh, InterpolationMethod method, PropagationDirection part=PROPAGATION_TOTAL) |
Get electric field at the given mesh for reflected light. | |
LazyData< Vec< 3, dcomplex > > | getScatteredFieldH (const cvector &incident, IncidentDirection side, const shared_ptr< const Mesh > &dst_mesh, InterpolationMethod method, PropagationDirection part=PROPAGATION_TOTAL) |
Get magnetic field at the given mesh for reflected light. | |
LazyData< double > | getScatteredFieldMagnitude (const cvector &incident, IncidentDirection side, const shared_ptr< const Mesh > &dst_mesh, InterpolationMethod method) |
Get light magnitude for reflected light. | |
cvector | getFieldVectorE (double z, PropagationDirection part=PROPAGATION_TOTAL) |
Compute electric field coefficients for given z. | |
cvector | getFieldVectorH (double z, PropagationDirection part=PROPAGATION_TOTAL) |
Compute magnetic field coefficients for given z. | |
cvector | getScatteredFieldVectorE (const cvector &incident, IncidentDirection side, double z, PropagationDirection part=PROPAGATION_TOTAL) |
Compute electric field coefficients for given z. | |
cvector | getScatteredFieldVectorH (const cvector &incident, IncidentDirection side, double z, PropagationDirection part=PROPAGATION_TOTAL) |
Compute magnetic field coefficients for given z. | |
double | getFieldIntegral (WhichField field, double z1, double z2, double power) |
Get ½ E·conj(E) or ½ H·conj(H) integral between z1 and z2. | |
double | getScatteredFieldIntegral (WhichField field, const cvector &incident, IncidentDirection side, double z1, double z2) |
Get ½ E·conj(E) or ½ H·conj(H) integral between z1 and z2 for reflected light. | |
Protected Member Functions | |
void | getFinalMatrix () override |
Get the discontinuity matrix for the whole structure. | |
void | determineFields () override |
Determine coefficients in each layer necessary for fields calculations. | |
void | determineReflectedFields (const cvector &incident, IncidentDirection side) override |
Determine coefficients in each layer necessary for fields calculations. | |
void | findImpedance (std::ptrdiff_t start, std::ptrdiff_t end) |
Find impedance matrix for the part of the structure. | |
Protected Member Functions inherited from plask::optical::modal::XanceTransfer | |
double | get_d (size_t n, double &z, PropagationDirection &part) |
Get layer thickness and adjust z. | |
double | get_d (size_t n, double &z1, double &z2) |
Get layer thickness and adjust z1 and z2. | |
cvector | getFieldVectorE (double z, std::size_t n, PropagationDirection part=PROPAGATION_TOTAL) override |
Compute electric field coefficients for given z. | |
cvector | getFieldVectorH (double z, std::size_t n, PropagationDirection part=PROPAGATION_TOTAL) override |
Compute magnetic field coefficients for given z. | |
void | storeY (size_t n) |
Store the Y matrix for the layer prepared before. | |
const cmatrix & | getY (std::size_t n) |
Get the Y matrix for n-th layer. | |
void | get_y1 (const cdiagonal &gamma, double d, cdiagonal &y1) const |
Determine the y1 efficiently. | |
void | get_y2 (const cdiagonal &gamma, double d, cdiagonal &y2) const |
Determine the y2 efficiently. | |
double | integrateField (WhichField field, size_t n, double z1, double z2) override |
Compute ½ E·conj(E) or ½ H·conj(H) integral between z1 and z2. | |
Protected Member Functions inherited from plask::optical::modal::Transfer | |
const_cvector | getInterfaceVector () |
Get current expansion coefficients at the matching interface. | |
LazyData< Vec< 3, dcomplex > > | computeFieldE (double power, const shared_ptr< const Mesh > &dst_mesh, InterpolationMethod method, bool reflected, PropagationDirection part=PROPAGATION_TOTAL) |
Compute electric field at the given mesh. | |
LazyData< Vec< 3, dcomplex > > | computeFieldH (double power, const shared_ptr< const Mesh > &dst_mesh, InterpolationMethod method, bool reflected, PropagationDirection part=PROPAGATION_TOTAL) |
Compute magnetic field at the given mesh. | |
LazyData< double > | computeFieldMagnitude (double power, const shared_ptr< const Mesh > &dst_mesh, InterpolationMethod method, bool reflected) |
Compute light magnitude. | |
Additional Inherited Members | |
Public Types inherited from plask::optical::modal::Transfer | |
enum | IncidentDirection { INCIDENCE_TOP , INCIDENCE_BOTTOM } |
Direction specification for reflection calculations. More... | |
enum | Determined { DETERMINED_NOTHING = 0 , DETERMINED_RESONANT , DETERMINED_REFLECTED } |
Indicates what has been determined. More... | |
enum | Method { METHOD_AUTO , METHOD_REFLECTION_ADMITTANCE , METHOD_REFLECTION_IMPEDANCE , METHOD_ADMITTANCE , METHOD_IMPEDANCE } |
Available transfer types. More... | |
enum | Determinant { DETERMINANT_EIGENVALUE , DETERMINANT_FULL } |
Method of computing determinant in zero search. More... | |
Public Attributes inherited from plask::optical::modal::Transfer | |
std::unique_ptr< Diagonalizer > | diagonalizer |
Diagonalizer used to compute matrix of eigenvalues and eigenvectors. | |
Determined | fields_determined |
Are the diagonalized fields determined for all layers? | |
Protected Attributes inherited from plask::optical::modal::XanceTransfer | |
cmatrix | Y |
Admittance / impedance matrix. | |
bool | needAllY |
Do we need to keep all Y matrices? | |
std::vector< FieldsDiagonalized > | fields |
Vector of fields computed for each layer. | |
std::vector< cmatrix > | memY |
admittance matrices for each layer | |
Protected Attributes inherited from plask::optical::modal::Transfer | |
cmatrix | interface_field_matrix |
Determined field at the interface. | |
dcomplex * | interface_field |
Pointer to the interface field data. | |
cmatrix | M |
The final matrix which must fulfill M * E = 0. | |
cmatrix | temp |
Temporary matrix. | |
dcomplex * | evals |
Found eigenvalues of matrix M. | |
double * | rwrk |
Temporary space. | |
std::size_t | lwrk |
Temporary space. | |
dcomplex * | wrk |
Temporary space. | |
cvector | incident_vector |
Incident vector, for which the fields are determined. | |
IncidentDirection | incident_side |
Incidence side for determined reflected fields. | |
ModalBase * | solver |
Solver containing this transfer. | |
Base class for all solvers using reflection matrix method.
Definition at line 27 of file impedance.hpp.
plask::optical::modal::ImpedanceTransfer::ImpedanceTransfer | ( | ModalBase * | solver, |
Expansion & | expansion | ||
) |
Definition at line 27 of file impedance.cpp.
|
overrideprotectedvirtual |
Determine coefficients in each layer necessary for fields calculations.
Implements plask::optical::modal::Transfer.
Definition at line 144 of file impedance.cpp.
|
overrideprotectedvirtual |
Determine coefficients in each layer necessary for fields calculations.
This method is called for reflected fields.
incident | incident field vector |
side | incidence side |
Implements plask::optical::modal::Transfer.
Definition at line 289 of file impedance.cpp.
|
protected |
Find impedance matrix for the part of the structure.
start | starting layer |
end | last layer (reflection matrix is computed for this layer) |
Definition at line 52 of file impedance.cpp.
|
overrideprotectedvirtual |
Get the discontinuity matrix for the whole structure.
Implements plask::optical::modal::Transfer.
Definition at line 33 of file impedance.cpp.
|
overridevirtual |
Get vector of reflection coefficients.
incident | incident field profile |
side | incident light side |
Implements plask::optical::modal::Transfer.
Definition at line 284 of file impedance.cpp.