| 
    PLaSK library
    
   | 
 
Base class for all solvers using reflection matrix method. More...
#include <solvers/optical/modal/admittance.hpp>
Public Member Functions | |
| cvector | getReflectionVector (const cvector &incident, IncidentDirection side) override | 
| Get vector of reflection coefficients.   | |
| AdmittanceTransfer (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 | findAdmittance (std::ptrdiff_t start, std::ptrdiff_t end) | 
| Find admittance 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 admittance.hpp.
| plask::optical::modal::AdmittanceTransfer::AdmittanceTransfer | ( | ModalBase * | solver, | 
| Expansion & | expansion | ||
| ) | 
Definition at line 27 of file admittance.cpp.
      
  | 
  overrideprotectedvirtual | 
Determine coefficients in each layer necessary for fields calculations.
Implements plask::optical::modal::Transfer.
Definition at line 144 of file admittance.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 333 of file admittance.cpp.
      
  | 
  protected | 
Find admittance 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 admittance.cpp.
      
  | 
  overrideprotectedvirtual | 
Get the discontinuity matrix for the whole structure.
Implements plask::optical::modal::Transfer.
Definition at line 33 of file admittance.cpp.
      
  | 
  overridevirtual | 
Get vector of reflection coefficients.
| incident | incident field profile | 
| side | incident light side | 
Implements plask::optical::modal::Transfer.
Definition at line 285 of file admittance.cpp.