PLaSK library
|
Base class for Admittance and Reflection transfers. More...
#include <solvers/optical/modal/transfer.hpp>
Public Types | |
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 Member Functions | |
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. | |
virtual cvector | getReflectionVector (const cvector &incident, IncidentDirection side)=0 |
Get vector of reflection coefficients. | |
virtual cvector | getTransmissionVector (const cvector &incident, IncidentDirection side)=0 |
Get vector of transmission coefficients. | |
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. | |
Public Attributes | |
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 Member Functions | |
virtual void | getFinalMatrix ()=0 |
Get the discontinuity matrix for the whole structure. | |
virtual void | determineFields ()=0 |
Determine coefficients in each layer necessary for fields calculations. | |
virtual void | determineReflectedFields (const cvector &incident, IncidentDirection side)=0 |
Determine coefficients in each layer necessary for fields calculations. | |
virtual cvector | getFieldVectorE (double z, std::size_t n, PropagationDirection part=PROPAGATION_TOTAL)=0 |
Compute electric field coefficients for given z. | |
virtual cvector | getFieldVectorH (double z, std::size_t n, PropagationDirection part=PROPAGATION_TOTAL)=0 |
Compute magnetic field coefficients for given z. | |
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. | |
virtual double | integrateField (WhichField field, size_t n, double z1, double z2)=0 |
Compute ½ E·conj(E) or ½ H·conj(H) integral between z1 and z2. | |
Protected Attributes | |
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 Admittance and Reflection transfers.
Definition at line 45 of file transfer.hpp.
Method of computing determinant in zero search.
Enumerator | |
---|---|
DETERMINANT_EIGENVALUE | |
DETERMINANT_FULL |
Definition at line 69 of file transfer.hpp.
Indicates what has been determined.
Enumerator | |
---|---|
DETERMINED_NOTHING | Nothing has been determined. |
DETERMINED_RESONANT | Resonant field has been determined. |
DETERMINED_REFLECTED | Reflected field has been determined. |
Definition at line 53 of file transfer.hpp.
Direction specification for reflection calculations.
Enumerator | |
---|---|
INCIDENCE_TOP | Incident light propagating from top (downwards) |
INCIDENCE_BOTTOM | Incident light propagating from bottom (upwards) |
Definition at line 47 of file transfer.hpp.
Available transfer types.
Definition at line 60 of file transfer.hpp.
Create transfer object and initialize memory.
solver | solver counting this transfer |
expansion | expansion for diagonalizer |
Definition at line 22 of file transfer.cpp.
|
virtual |
Definition at line 43 of file transfer.cpp.
|
protected |
Compute electric field at the given mesh.
power | mode power |
dst_mesh | target mesh |
method | interpolation method |
part | part of the field (forward-, backward-propagating, or total) that is wanted |
reflected | is this method called from reflected calculations? |
Definition at line 157 of file transfer.cpp.
|
protected |
Compute magnetic field at the given mesh.
power | mode power |
dst_mesh | target mesh |
method | interpolation method |
reflected | is this method called from reflected calculations? |
part | part of the field (forward-, backward-propagating, or total) that is wanted |
Definition at line 188 of file transfer.cpp.
|
inlineprotected |
Compute light magnitude.
power | mode power |
dst_mesh | destination mesh |
method | interpolation method |
reflected | is the field emitting? |
Definition at line 204 of file transfer.hpp.
dcomplex plask::optical::modal::Transfer::determinant | ( | ) |
Compute discontinuity matrix determinant for the current parameters.
Definition at line 59 of file transfer.cpp.
Determine coefficients in each layer necessary for fields calculations.
Implemented in plask::optical::modal::AdmittanceTransfer, plask::optical::modal::ImpedanceTransfer, and plask::optical::modal::ReflectionTransfer.
|
protectedpure virtual |
Determine coefficients in each layer necessary for fields calculations.
This method is called for reflected fields.
incident | incident field vector |
side | incidence side |
Implemented in plask::optical::modal::AdmittanceTransfer, plask::optical::modal::ImpedanceTransfer, and plask::optical::modal::ReflectionTransfer.
|
inline |
Get electric field at the given mesh for resonant mode.
power | mode power |
dst_mesh | target mesh |
method | interpolation method |
part | part of the field (forward-, backward-propagating, or total) that is wanted |
Definition at line 234 of file transfer.hpp.
|
inline |
Get magnetic field at the given mesh for resonant mode.
power | mode power |
dst_mesh | target mesh |
method | interpolation method |
part | part of the field (forward-, backward-propagating, or total) that is wanted |
Definition at line 249 of file transfer.hpp.
double plask::optical::modal::Transfer::getFieldIntegral | ( | WhichField | field, |
double | z1, | ||
double | z2, | ||
double | power | ||
) |
Get ½ E·conj(E) or ½ H·conj(H) integral between z1 and z2.
field | field to integrate |
z1 | lower integration bound |
z2 | upper integration bound |
power | mode emitted power |
Definition at line 244 of file transfer.cpp.
|
inline |
Get light magnitude for resonant mode.
power | mode power |
dst_mesh | destination mesh |
method | interpolation method |
Definition at line 263 of file transfer.hpp.
cvector plask::optical::modal::Transfer::getFieldVectorE | ( | double | z, |
PropagationDirection | part = PROPAGATION_TOTAL |
||
) |
Compute electric field coefficients for given z.
z | position within the layer |
part | part of the field (forward-, backward-propagating, or total) that is wanted |
Definition at line 219 of file transfer.cpp.
|
protectedpure virtual |
Compute electric field coefficients for given z.
z | position within the layer |
n | layer number |
part | part of the field (forward-, backward-propagating, or total) that is wanted |
Implemented in plask::optical::modal::ReflectionTransfer, and plask::optical::modal::XanceTransfer.
cvector plask::optical::modal::Transfer::getFieldVectorH | ( | double | z, |
PropagationDirection | part = PROPAGATION_TOTAL |
||
) |
Compute magnetic field coefficients for given z.
z | position within the layer |
part | part of the field (forward-, backward-propagating, or total) that is wanted |
Definition at line 225 of file transfer.cpp.
|
protectedpure virtual |
Compute magnetic field coefficients for given z.
z | position within the layer |
n | layer number |
part | part of the field (forward-, backward-propagating, or total) that is wanted |
Implemented in plask::optical::modal::ReflectionTransfer, and plask::optical::modal::XanceTransfer.
Get the discontinuity matrix for the whole structure.
Implemented in plask::optical::modal::AdmittanceTransfer, plask::optical::modal::ImpedanceTransfer, and plask::optical::modal::ReflectionTransfer.
|
protected |
Get current expansion coefficients at the matching interface.
Definition at line 110 of file transfer.cpp.
|
pure virtual |
Get vector of reflection coefficients.
incident | incident field profile |
side | incident light side |
Implemented in plask::optical::modal::ReflectionTransfer, plask::optical::modal::AdmittanceTransfer, and plask::optical::modal::ImpedanceTransfer.
|
inline |
Get electric field at the given mesh for reflected light.
incident | incident field vector |
side | incidence side |
dst_mesh | target mesh |
method | interpolation method |
part | part of the field (forward-, backward-propagating, or total) that is wanted |
Definition at line 278 of file transfer.hpp.
|
inline |
Get magnetic field at the given mesh for reflected light.
incident | incident field vector |
side | incidence side |
dst_mesh | target mesh |
method | interpolation method |
part | part of the field (forward-, backward-propagating, or total) that is wanted |
Definition at line 295 of file transfer.hpp.
double plask::optical::modal::Transfer::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.
field | field to integrate |
incident | incident field vector |
side | incidence side |
z1 | lower integration bound |
z2 | upper integration bound |
Definition at line 260 of file transfer.cpp.
|
inline |
Get light magnitude for reflected light.
incident | incident field vector |
side | incidence side |
dst_mesh | destination mesh |
method | interpolation method |
Definition at line 311 of file transfer.hpp.
cvector plask::optical::modal::Transfer::getScatteredFieldVectorE | ( | const cvector & | incident, |
IncidentDirection | side, | ||
double | z, | ||
PropagationDirection | part = PROPAGATION_TOTAL |
||
) |
Compute electric field coefficients for given z.
incident | incident field vector |
side | incidence side |
z | position within the layer |
part | part of the field (forward-, backward-propagating, or total) that is wanted |
Definition at line 234 of file transfer.cpp.
cvector plask::optical::modal::Transfer::getScatteredFieldVectorH | ( | const cvector & | incident, |
IncidentDirection | side, | ||
double | z, | ||
PropagationDirection | part = PROPAGATION_TOTAL |
||
) |
Compute magnetic field coefficients for given z.
incident | incident field vector |
side | incidence side |
z | position within the layer |
part | part of the field (forward-, backward-propagating, or total) that is wanted |
Definition at line 239 of file transfer.cpp.
|
pure virtual |
Get vector of transmission coefficients.
incident | incident field profile |
side | incident light side |
Implemented in plask::optical::modal::ReflectionTransfer, and plask::optical::modal::XanceTransfer.
void plask::optical::modal::Transfer::initDiagonalization | ( | ) |
Init diagonalization.
Definition at line 53 of file transfer.cpp.
|
protectedpure virtual |
Compute ½ E·conj(E) or ½ H·conj(H) integral between z1 and z2.
field | field to integrate |
n | layer number |
z1 | lower integration bound in local layer coordinates |
z2 | upper integration bound in local layer coordinates |
Implemented in plask::optical::modal::ReflectionTransfer, and plask::optical::modal::XanceTransfer.
std::unique_ptr<Diagonalizer> plask::optical::modal::Transfer::diagonalizer |
Diagonalizer used to compute matrix of eigenvalues and eigenvectors.
Definition at line 97 of file transfer.hpp.
|
protected |
Found eigenvalues of matrix M.
Definition at line 82 of file transfer.hpp.
Determined plask::optical::modal::Transfer::fields_determined |
Are the diagonalized fields determined for all layers?
Definition at line 100 of file transfer.hpp.
|
protected |
Incidence side for determined reflected fields.
Definition at line 88 of file transfer.hpp.
|
protected |
Incident vector, for which the fields are determined.
Definition at line 87 of file transfer.hpp.
|
protected |
Pointer to the interface field data.
Definition at line 76 of file transfer.hpp.
|
protected |
Determined field at the interface.
Definition at line 75 of file transfer.hpp.
|
protected |
Temporary space.
Definition at line 84 of file transfer.hpp.
|
protected |
The final matrix which must fulfill M * E = 0.
Definition at line 78 of file transfer.hpp.
|
protected |
Temporary space.
Definition at line 83 of file transfer.hpp.
|
protected |
Solver containing this transfer.
Definition at line 90 of file transfer.hpp.
|
protected |
Temporary matrix.
Definition at line 80 of file transfer.hpp.
|
protected |
Temporary space.
Definition at line 85 of file transfer.hpp.