PLaSK library

Loading...
Searching...
No Matches
Public Member Functions | Protected Member Functions | List of all members
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< 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.

## 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 | ( |  | ) |
| override protected virtual

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
| ) |  |
| override protected virtual

Determine coefficients in each layer necessary for fields calculations.

This method is called for reflected fields.

Parameters

  incident | incident field vector
  side | incidence 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

  start | starting layer
  end | last layer (reflection matrix is computed for this layer)

Definition at line 52 of file impedance.cpp.

## ◆ getFinalMatrix()

void plask::optical::modal::ImpedanceTransfer::getFinalMatrix | ( |  | ) |
| override protected virtual

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
| ) |  |
| override virtual

Get vector of reflection coefficients.

Parameters

  incident | incident field profile
  side | incident 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:

- solvers/optical/modal/impedance.hpp
- solvers/optical/modal/impedance.cpp