PLaSK library
Loading...
Searching...
No Matches
plask::optical::modal::ImpedanceTransfer Struct Reference

Base class for all solvers using reflection matrix method. More...

#include <solvers/optical/modal/impedance.hpp>

Inheritance diagram for plask::optical::modal::ImpedanceTransfer:
[legend]
Collaboration diagram for plask::optical::modal::ImpedanceTransfer:
[legend]

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< doublegetFieldMagnitude (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< doublegetScatteredFieldMagnitude (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 cmatrixgetY (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< doublecomputeFieldMagnitude (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< Diagonalizerdiagonalizer
 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< FieldsDiagonalizedfields
 Vector of fields computed for each layer.
 
std::vector< cmatrixmemY
 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.
 
doublerwrk
 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.
 
ModalBasesolver
 Solver containing this transfer.
 

Detailed Description

Base class for all solvers using reflection matrix method.

Definition at line 27 of file impedance.hpp.

Constructor & Destructor Documentation

◆ ImpedanceTransfer()

plask::optical::modal::ImpedanceTransfer::ImpedanceTransfer ( ModalBase solver,
Expansion expansion 
)

Definition at line 27 of file impedance.cpp.

Member Function Documentation

◆ determineFields()

void plask::optical::modal::ImpedanceTransfer::determineFields ( )
overrideprotectedvirtual

Determine coefficients in each layer necessary for fields calculations.

Implements plask::optical::modal::Transfer.

Definition at line 144 of file impedance.cpp.

◆ determineReflectedFields()

void plask::optical::modal::ImpedanceTransfer::determineReflectedFields ( const cvector incident,
IncidentDirection  side 
)
overrideprotectedvirtual

Determine coefficients in each layer necessary for fields calculations.

This method is called for reflected fields.

Parameters
incidentincident field vector
sideincidence side

Implements plask::optical::modal::Transfer.

Definition at line 289 of file impedance.cpp.

◆ findImpedance()

void plask::optical::modal::ImpedanceTransfer::findImpedance ( std::ptrdiff_t  start,
std::ptrdiff_t  end 
)
protected

Find impedance matrix for the part of the structure.

Parameters
startstarting layer
endlast layer (reflection matrix is computed for this layer)

Definition at line 52 of file impedance.cpp.

◆ getFinalMatrix()

void plask::optical::modal::ImpedanceTransfer::getFinalMatrix ( )
overrideprotectedvirtual

Get the discontinuity matrix for the whole structure.

Implements plask::optical::modal::Transfer.

Definition at line 33 of file impedance.cpp.

◆ getReflectionVector()

cvector plask::optical::modal::ImpedanceTransfer::getReflectionVector ( const cvector incident,
IncidentDirection  side 
)
overridevirtual

Get vector of reflection coefficients.

Parameters
incidentincident field profile
sideincident light side

Implements plask::optical::modal::Transfer.

Definition at line 284 of file impedance.cpp.


The documentation for this struct was generated from the following files: