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