PLaSK library

Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | Friends | List of all members
plask::optical::modal::FourierSolver3D Struct Reference

Reflection transformation solver in Cartesian 3D geometry. More...

`#include <solvers/optical/modal/fourier/solver3d.hpp>`

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

## Classes
struct | Mode

## Public Types
enum | What { WHAT_WAVELENGTH , WHAT_K0 , WHAT_KLONG , WHAT_KTRAN }
| Indication of parameter to search. More...
enum | ExpansionRule { RULE_OLD , RULE_DIRECT , RULE_INVERSE , RULE_COMBINED }
| Expansion rule. More...
typedef ModalSolver< SolverOver< Geometry3D > > | BaseType
Public Types inherited from plask::SolverOver< Geometry3D >
typedef Geometry3D | SpaceType
| of the space for this solver
Public Types inherited from plask::optical::modal::ModalBase
enum | Emission { EMISSION_UNSPECIFIED = 0 , EMISSION_TOP , EMISSION_BOTTOM , EMISSION_FRONT , EMISSION_BACK }
| Directions of the possible emission. More...

## Public Member Functions
std::string | getClassName () const override
| Get name of solver.
void | clearModes () override
| Clear computed modes.
bool | setExpansionDefaults (bool with_k0=true) override
| Set expansion parameters from default values.
| FourierSolver3D (const std::string &name="")
void | loadConfiguration (XMLReader &reader, Manager &manager) override
| Load configuration from given `source`.
size_t | findMode (What what, dcomplex start)
| Find the mode around the specified effective index.
size_t | getLongSize () const
| Get order of the orthogonal base in the longitudinal direction.
size_t | getTranSize () const
| Get order of the orthogonal base in the transverse direction.
void | setLongSize (size_t n)
| Set order of the orthogonal base in the longitudinal direction.
void | setTranSize (size_t n)
| Set order of the orthogonal base in the transverse direction.
void | setSizes (size_t nl, size_t nt)
| Set order of the orthogonal base.
Expansion::Component | getSymmetryLong () const
| Return current mode symmetry.
void | setSymmetryLong (Expansion::Component symmetry)
| Set new mode symmetry.
Expansion::Component | getSymmetryTran () const
| Return current mode symmetry.
void | setSymmetryTran (Expansion::Component symmetry)
| Set new mode symmetry.
bool | symmetricLong () const
| Get info if the expansion is symmetric.
bool | symmetricTran () const
| Get info if the expansion is symmetric.
dcomplex | getKlong () const
| Get longitudinal wavevector.
void | setKlong (dcomplex k)
| Set longitudinal wavevector.
dcomplex | getKtran () const
| Get transverse wavevector.
void | setKtran (dcomplex k)
| Set transverse wavevector.
double | getGradSmooth () const
| Get current normal smooth.
void | setGradSmooth (double value)
| Set current smooth.
int | getDCT () const
| Get type of the DCT.
void | setDCT (int n)
| Set type of the DCT.
bool | dct2 () const
| True if DCT == 2.
ExpansionRule | getRule () const
| Get expansion rule.
void | setRule (ExpansionRule rule)
| Set expansion rule.
Expansion & | getExpansion () override
| Get solver expansion.
size_t | minor () const
| Return minor field coefficients dimension.
cvector | incidentVector (Transfer::IncidentDirection side, Expansion::Component polarization, dcomplex lam=NAN)
| Get incident field vector for given polarization.
cvector | incidentGaussian (Transfer::IncidentDirection side, Expansion::Component polarization, double sigma_long, double sigma_tran, double center_long=0., double center_tran=0., dcomplex lam=NAN)
| Compute incident vector with Gaussian profile.
LazyData< Vec< 3, dcomplex > > | getScatteredFieldE (const cvector &incident, Transfer::IncidentDirection side, const shared_ptr< const MeshD< 3 > > &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, Transfer::IncidentDirection side, const shared_ptr< const MeshD< 3 > > &dst_mesh, InterpolationMethod method, PropagationDirection part=PROPAGATION_TOTAL)
| Get magnetic field at the given mesh for reflected light.
LazyData< double > | getScatteredFieldMagnitude (const cvector &incident, Transfer::IncidentDirection side, const shared_ptr< const MeshD< 3 > > &dst_mesh, InterpolationMethod method)
| Get light intensity for reflected light.
cvector | getFieldVectorE (size_t num, double z)
| Compute electric field coefficients for given z.
cvector | getFieldVectorH (size_t num, double z)
| Compute magnetic field coefficients for given z.
double | getIntegralEE (size_t num, double z1, double z2)
| Get ½ E·conj(E) integral between z1 and z2.
double | getIntegralHH (size_t num, double z1, double z2)
| Get ½ H·conj(H) integral between z1 and z2 for reflected light.
cvector | getScatteredFieldVectorE (const cvector &incident, Transfer::IncidentDirection side, double z)
| Compute electric field coefficients for given z for reflected light.
cvector | getScatteredFieldVectorH (const cvector &incident, Transfer::IncidentDirection side, double z)
| Compute magnetic field coefficients for given z for reflected light.
double | getScatteredIntegralEE (const cvector &incident, Transfer::IncidentDirection side, double z1, double z2)
| Get ½ E·conj(E) integral between z1 and z2 for reflected light.
double | getScatteredIntegralHH (const cvector &incident, Transfer::IncidentDirection side, double z1, double z2)
| Get ½ H·conj(H) integral between z1 and z2.
size_t | setMode ()
| Check if the current parameters correspond to some mode and insert it.
Public Member Functions inherited from plask::optical::modal::ModalSolver< SolverOver< Geometry3D > >
| ModalSolver (const std::string &name="")
| ~ModalSolver ()
double | getSmooth () const
| Get current smooth.
void | setSmooth (double value)
| Set current smooth.
Transfer::Method | getTransferMethod () const
| Get currently selected transfer method.
void | setTransferMethod (Transfer::Method method)
| Set new transfer method.
bool | getGroupLayers () const
| Getter for group_layers.
void | setGroupLayers (bool value)
| Setter for group_layers.
double | getMaxTempDiff () const
| Getter for max_temp_diff.
void | setMaxTempDiff (double value)
| Setter for max_temp_diff.
double | getTempDist () const
| Getter for temp_dist.
void | setTempDist (double value)
| Setter for temp_dist.
double | getTempLayer () const
| Getter for temp_dist.
void | setTempLayer (double value)
| Setter for temp_dist.
std::string | getId () const override
| Get solver id.
bool | initCalculation () override
| Init calculations.
size_t | getInterface ()
| Get the position of the matching interface.
void | setInterfaceAt (double pos)
| Set the position of the matching interface.
void | setInterfaceOn (const shared_ptr< const GeometryObject > &object, const PathHints *path=nullptr)
| Set the position of the matching interface at the bottom of the provided geometry object.
void | setInterfaceOn (const shared_ptr< const GeometryObject > &object, const PathHints &path)
| Set the position of the matching interface at the bottom of the provided geometry object.
dcomplex | getDeterminant ()
| Get discontinuity matrix determinant for the current parameters.
void | prepareExpansionIntegrals (Expansion *expansion, const shared_ptr< MeshD< BaseT::SpaceType::DIM > > &mesh, dcomplex lam, dcomplex glam)
cvector | incidentVector (Transfer::IncidentDirection side, size_t idx, dcomplex lam=NAN)
| Get incident field vector for given mode.
cvector | incidentVector (Transfer::IncidentDirection side, const cvector &incident, dcomplex lam=NAN)
| Get incident field vector for given polarization.
Public Member Functions inherited from plask::SolverOver< Geometry3D >
| SolverOver (const std::string &name="")
| ~SolverOver ()
void | loadConfiguration (XMLReader &source, Manager &manager) override
| Load configuration from given `source`.
void | parseStandardConfiguration (XMLReader &source, Manager &manager, const std::string &expected_msg="solver configuration element")
shared_ptr< Geometry3D > | getGeometry () const
| Get current solver geometry space.
void | setGeometry (const shared_ptr< Geometry3D > &geometry)
| Set new geometry for the solver.
Public Member Functions inherited from plask::Solver
bool | initCalculation ()
| This should be called on beginning of each calculation method to ensure that solver will be initialized.
| Solver (const std::string &name="")
| Construct uninitialized solver.
virtual | ~Solver ()
| Virtual destructor (for subclassing). Do nothing.
void | parseStandardConfiguration (XMLReader &source, Manager &manager, const std::string &expected_msg="solver configuration element")
| Load standard configuration (geometry, mesh) tags from `source`.
bool | isInitialized ()
| Check if solver is already initialized.
void | invalidate ()
| This method should be and is called if something important was changed: calculation space, mesh, etc.
std::string | getId () const
| Get solver id.
std::string | getName () const
virtual std::string | getClassDescription () const
| Get a description of this solver.
template<typename ArgT = double, typename ValT = double>
DataLog< ArgT, ValT > | dataLog (const std::string &chart_name, const std::string &axis_arg_name, const std::string &axis_val_name)
template<typename ArgT = double, typename ValT = double>
DataLog< ArgT, ValT > | dataLog (const std::string &axis_arg_name, const std::string &axis_val_name)
template<typename ... Args>
void | writelog (LogLevel level, std::string msg, Args &&... params) const
| Log a message for this solver.
Public Member Functions inherited from plask::optical::modal::ModalBase
void | initTransfer (Expansion &expansion, bool reflection)
| Initialize transfer class.
| ModalBase ()
virtual | ~ModalBase ()
double | getLam0 () const
| Get lam0.
void | setLam0 (double lam)
| Set lam0.
void | clearLam0 ()
| Clear lam0.
dcomplex | getK0 () const
| Get current k0.
void | setK0 (dcomplex k)
| Set current k0.
dcomplex | getLam () const
| Get current wavelength.
void | setLam (dcomplex lambda)
| Set current wavelength.
void | clearFields ()
| Reset determined fields.
size_t | getLayerFor (double &h) const
| Get layer number for vertical coordinate.
const std::vector< std::size_t > & | getStack () const
| Get stack.
void | ensureInterface ()
| Throw exception if the interface position is unsuitable for eigenmode computations.
dvector | getIncidentFluxes (const cvector &incident, Transfer::IncidentDirection side)
| Get amplitudes of incident diffraction orders.
dvector | getReflectedFluxes (const cvector &incident, Transfer::IncidentDirection side)
| Get amplitudes of reflected diffraction orders.
dvector | getTransmittedFluxes (const cvector &incident, Transfer::IncidentDirection side)
| Get amplitudes of transmitted diffraction orders.
cvector | getReflectedCoefficients (const cvector &incident, Transfer::IncidentDirection side)
| Get coefficients of reflected diffraction orders.
cvector | getTransmittedCoefficients (const cvector &incident, Transfer::IncidentDirection side)
| Get coefficients of transmitted diffraction orders.
double | getReflection (const cvector &incident, Transfer::IncidentDirection side)
| Get reflection coefficient.
double | getTransmission (const cvector &incident, Transfer::IncidentDirection side)
| Get reflection coefficient.
void | getMatrices (size_t layer, cmatrix &RE, cmatrix &RH)

## Public Attributes
size_t | size_long
| Maximum order of the orthogonal base in longitudinal direction.
size_t | size_tran
| Maximum order of the orthogonal base in transverse direction.
ExpansionPW3D | expansion
| Class responsible for computing expansion coefficients.
std::vector< Mode > | modes
| Computed modes.
size_t | refine_long
| Mesh multiplier for finer computation of the refractive indices in the longitudinal direction.
size_t | refine_tran
| Mesh multiplier for finer computation of the refractive indices in the transverse direction.
double | grad_smooth
| Smoothing of the normal-direction functions.
PML | pml_long
| Longitudinal PMLs.
PML | pml_tran
| Transverse PMLs.
ProviderFor< GradientFunctions, Geometry3D >::Delegate | outGradients
| Provider for gradient functions.
Public Attributes inherited from plask::optical::modal::ModalSolver< SolverOver< Geometry3D > >
ReceiverFor< Temperature, typename BaseT::SpaceType > | inTemperature
| Receiver for the temperature.
ReceiverFor< Gain, typename BaseT::SpaceType > | inGain
| Receiver for the gain.
ReceiverFor< Epsilon, typename BaseT::SpaceType > | inEpsilon
| Receiver for the dynamic epsilon.
ReceiverFor< CarriersConcentration, typename BaseT::SpaceType > | inCarriersConcentration
| Receiver for carriers concentration.
ProviderFor< Epsilon, typenameBaseT::SpaceType >::Delegate | outEpsilon
| Provider of the permittivity tensor.
ProviderFor< RefractiveIndex, typenameBaseT::SpaceType >::Delegate | outRefractiveIndex
| Provider of the refractive index.
ProviderFor< ModeWavelength >::Delegate | outWavelength
| Provider for computed resonant wavelength.
ProviderFor< ModeLightMagnitude, typenameBaseT::SpaceType >::Delegate | outLightMagnitude
| Provider of the optical field intensity.
ProviderFor< ModeLightE, typenameBaseT::SpaceType >::Delegate | outLightE
| Provider of the optical electric field.
ProviderFor< ModeLightH, typenameBaseT::SpaceType >::Delegate | outLightH
| Provider of the optical magnetic field.
ProviderFor< ModeLightE, typenameBaseT::SpaceType >::Delegate | outUpwardsLightE
| Provider of the optical electric field propagating upwards.
ProviderFor< ModeLightH, typenameBaseT::SpaceType >::Delegate | outUpwardsLightH
| Provider of the optical magnetic field propagating upwards.
ProviderFor< ModeLightE, typenameBaseT::SpaceType >::Delegate | outDownwardsLightE
| Provider of the optical electric field propagating downwards.
ProviderFor< ModeLightH, typenameBaseT::SpaceType >::Delegate | outDownwardsLightH
| Provider of the optical magnetic field propagating downwards.
Public Attributes inherited from plask::optical::modal::ModalBase
Emission | emission
| Direction of the light emission for fields normalization.
Transfer::Determinant | determinant_type
| Method of computing determinant in zero search.
std::unique_ptr< Transfer > | transfer
| Transfer method object (AdmittanceTransfer or ReflectionTransfer)
shared_ptr< OrderedAxis > | vbounds
| Layer boundaries.
shared_ptr< OrderedAxis > | verts
| Centers of layers.
size_t | lcount
| Number of distinct layers.
std::vector< bool > | lgained
| Information if the layer has gain.
std::vector< bool > | lcomputed
| Information if the layer has data from inEpsilon.
std::vector< std::size_t > | stack
| Organization of layers in the stack.
std::ptrdiff_t | interface
| Index of the matching interface.
double | interface_position
| Approximate position of the matching interface.
double | lam0
| Reference wavelength used for getting material parameters (nm)
dcomplex | k0
| Normalized frequency (1/µm)
PML | vpml
| Parameters for vertical PMLs (if used)
RootDigger::Params | root
| Parameters for main rootdigger.
bool | recompute_integrals
| Force re-computation of material coefficients/integrals.
bool | recompute_gain_integrals
| Force re-computation of material coefficients/integrals in layers with gain.
bool | always_recompute_gain
| Always compute material coefficients/integrals for gained layers for current wavelength.

## Protected Member Functions
void | onInitialize () override
| Initialize the solver.
void | onInvalidate () override
| This method is called by invalidate() to reset stored values.
void | computeIntegrals () override
| Recompute integrals used in RE and RH matrices.
size_t | initIncidence (Transfer::IncidentDirection side, Expansion::Component polarization, dcomplex lam)
size_t | insertMode ()
| Insert mode to the list or return the index of the exiting one.
size_t | nummodes () const override
| Return number of determined modes.
double | applyMode (size_t n) override
| Apply mode number n.
dcomplex | getEffectiveIndex (size_t n)
| Return mode effective index.
void | applyMode (const Mode &mode)
double | getWavelength (size_t n) override
| Return mode wavelength.
LazyData< double > | getGradients (GradientFunctions::EnumType what, const shared_ptr< const MeshD< 3 > > &dst_mesh, InterpolationMethod interp)
Protected Member Functions inherited from plask::optical::modal::ModalSolver< SolverOver< Geometry3D > >
void | onInitialize () override
void | onGeometryChange (const Geometry::Event &evt) override
void | parseCommonModalConfiguration (XMLReader &reader, Manager &manager)
| Parse common configuration from XML file.
void | setupLayers ()
| Compute layer boundaries and detect layer sets.
size_t | initIncidence (Transfer::IncidentDirection side, dcomplex lam=NAN)
void | scaleIncidentVector (cvector &incident, size_t layer)
| Scale the incident field vector with scale specific to the solver.
void | scaleIncidentVector (cvector &incident, size_t layer)
void | scaleIncidentVector (cvector &incident, size_t layer)
void | scaleIncidentVector (cvector &incident, size_t layer)
DataVector< const Tensor3< dcomplex > > | getEpsilonProfile (const shared_ptr< const MeshD< BaseT::SpaceType::DIM > > &dst_mesh, dcomplex lam, InterpolationMethod interp=INTERPOLATION_DEFAULT)
| Get permittivity tensor after expansion.
LazyData< dcomplex > | getRefractiveIndex (RefractiveIndex::EnumType component, const shared_ptr< const MeshD< BaseT::SpaceType::DIM > > &dst_mesh, dcomplex lam, InterpolationMethod interp=INTERPOLATION_DEFAULT)
| Get refractive index after expansion.
LazyData< Vec< 3, dcomplex > > | getLightE (size_t num, shared_ptr< const MeshD< BaseT::SpaceType::DIM > > dst_mesh, InterpolationMethod method)
| Compute electric field.
LazyData< Vec< 3, dcomplex > > | getLightH (size_t num, shared_ptr< const MeshD< BaseT::SpaceType::DIM > > dst_mesh, InterpolationMethod method)
| Compute magnetic field.
LazyData< double > | getLightMagnitude (size_t num, shared_ptr< const MeshD< BaseT::SpaceType::DIM > > dst_mesh, InterpolationMethod method)
| Compute normalized electric field intensity 1/2 E conj(E) / P.
Protected Member Functions inherited from plask::SolverOver< Geometry3D >
void | readBoundaryConditions (Manager &manager, XMLReader &reader, BoundaryConditions< Boundary, ConditionT > &dest)
| Read boundary conditions using information about the geometry of this solver.
Protected Member Functions inherited from plask::optical::modal::ModalBase
std::unique_ptr< RootDigger > | getRootDigger (const RootDigger::function_type &func, const char *name)
| Create and return rootdigger of a desired type.
void | readRootDiggerConfig (XMLReader &reader)
| Read root digger configuration.
void | scaleIncidentVector (cvector &incident, size_t layer, double size_factor)
| Scale the incident field vector.

## Protected Attributes
dcomplex | klong
| Longitudinal wavevector (1/µm)
dcomplex | ktran
| Transverse wavevector (1/µm)
Expansion::Component | symmetry_long
| Symmetry along longitudinal axis.
Expansion::Component | symmetry_tran
| Symmetry along transverse axis.
int | dct
| Type of discrete cosine transform. Can be only 1 or two.
ExpansionRule | expansion_rule
| Expansion rule.
Protected Attributes inherited from plask::optical::modal::ModalSolver< SolverOver< Geometry3D > >
double | smooth
| Smoothing coefficient.
Protected Attributes inherited from plask::SolverOver< Geometry3D >
shared_ptr< Geometry3D > | geometry
| Space in which the calculations are performed.
Protected Attributes inherited from plask::Solver
bool | initialized
| `true` only if solver is initialized
Protected Attributes inherited from plask::optical::modal::ModalBase
Transfer::Method | transfer_method
| Selected transfer method.
bool | group_layers
| Can layers be automatically grouped.
double | max_temp_diff
| Maximum temperature difference for grouped layers (NAN means ignore temperature)
double | temp_dist
| Approximate lateral distance between points for temperature investigation.
double | temp_layer
| Minimum layer thickness for the purpose of temperature-based layers division.

## Friends
struct | ExpansionPW3D

## Detailed Description

Reflection transformation solver in Cartesian 3D geometry.

Definition at line 32 of file solver3d.hpp.

## Member Typedef Documentation

## ◆ BaseType

typedef ModalSolver<SolverOver<Geometry3D> > plask::optical::modal::FourierSolver3D::BaseType

Definition at line 34 of file solver3d.hpp.

## Member Enumeration Documentation

## ◆ ExpansionRule

enum plask::optical::modal::FourierSolver3D::ExpansionRule

Expansion rule.

Enumerator
RULE_OLD |
RULE_DIRECT |
RULE_INVERSE |
RULE_COMBINED |

Definition at line 49 of file solver3d.hpp.

## ◆ What

enum plask::optical::modal::FourierSolver3D::What

Indication of parameter to search.

Enumerator
WHAT_WAVELENGTH | Search for wavelength.
WHAT_K0 | Search for normalized frequency.
WHAT_KLONG | Search for longitudinal wavevector.
WHAT_KTRAN | Search for transverse wavevector.

Definition at line 41 of file solver3d.hpp.

## Constructor & Destructor Documentation

## ◆ FourierSolver3D()

plask::optical::modal::FourierSolver3D::FourierSolver3D | ( | const std::string & | name = `""` | ) |

Definition at line 20 of file solver3d.cpp.

## Member Function Documentation

## ◆ applyMode() [1/2]

void plask::optical::modal::FourierSolver3D::applyMode | ( | const Mode & | mode | ) |
| inline protected

Definition at line 540 of file solver3d.hpp.

## ◆ applyMode() [2/2]

double plask::optical::modal::FourierSolver3D::applyMode | ( | size_t | n | ) |
| inline override protected virtual

Apply mode number n.

Returns
  Mode power

Implements plask::optical::modal::ModalSolver< SolverOver< Geometry3D > >.

Definition at line 525 of file solver3d.hpp.

## ◆ clearModes()

void plask::optical::modal::FourierSolver3D::clearModes | ( |  | ) |
| inline override virtual

Clear computed modes.

Implements plask::optical::modal::ModalBase.

Definition at line 141 of file solver3d.hpp.

## ◆ computeIntegrals()

void plask::optical::modal::FourierSolver3D::computeIntegrals | ( |  | ) |
| inline override protected virtual

Recompute integrals used in RE and RH matrices.

Implements plask::optical::modal::ModalBase.

Definition at line 121 of file solver3d.hpp.

## ◆ dct2()

bool plask::optical::modal::FourierSolver3D::dct2 | ( |  | ) | const
| inline

True if DCT == 2.

Definition at line 299 of file solver3d.hpp.

## ◆ findMode()

size_t plask::optical::modal::FourierSolver3D::findMode | ( | FourierSolver3D::What | what,
|  | dcomplex | start
| ) |  |

Find the mode around the specified effective index.

This method remembers the determined mode, for retrieval of the field profiles.

Parameters

  what | what to search for
  start | initial value of what to search the mode around

Returns
  determined effective index

Definition at line 176 of file solver3d.cpp.

## ◆ getClassName()

std::string plask::optical::modal::FourierSolver3D::getClassName | ( |  | ) | const
| inline override virtual

Get name of solver.

Returns
  name of this solver

Implements plask::Solver.

Definition at line 38 of file solver3d.hpp.

## ◆ getDCT()

int plask::optical::modal::FourierSolver3D::getDCT | ( |  | ) | const
| inline

Get type of the DCT.

Definition at line 288 of file solver3d.hpp.

## ◆ getEffectiveIndex()

dcomplex plask::optical::modal::FourierSolver3D::getEffectiveIndex | ( | size_t | n | ) |
| inline protected

Return mode effective index.

Parameters

  n | mode number

Definition at line 535 of file solver3d.hpp.

## ◆ getExpansion()

Expansion & plask::optical::modal::FourierSolver3D::getExpansion | ( |  | ) |
| inline override virtual

Get solver expansion.

Implements plask::optical::modal::ModalBase.

Definition at line 317 of file solver3d.hpp.

## ◆ getFieldVectorE()

cvector plask::optical::modal::FourierSolver3D::getFieldVectorE | ( | size_t | num,
|  | double | z
| ) |  |
| inline

Compute electric field coefficients for given z.

Parameters

  num | mode number
  z | position within the layer

Returns
  electric field coefficients

Definition at line 403 of file solver3d.hpp.

## ◆ getFieldVectorH()

cvector plask::optical::modal::FourierSolver3D::getFieldVectorH | ( | size_t | num,
|  | double | z
| ) |  |
| inline

Compute magnetic field coefficients for given z.

Parameters

  num | mode number
  z | position within the layer

Returns
  magnetic field coefficients

Definition at line 414 of file solver3d.hpp.

## ◆ getGradients()

LazyData< double > plask::optical::modal::FourierSolver3D::getGradients | ( | GradientFunctions::EnumType | what,
|  | const shared_ptr< const MeshD< 3 > > & | dst_mesh,
|  | InterpolationMethod | interp
| ) |  |
| protected

Definition at line 287 of file solver3d.cpp.

## ◆ getGradSmooth()

double plask::optical::modal::FourierSolver3D::getGradSmooth | ( |  | ) | const
| inline

Get current normal smooth.

Definition at line 278 of file solver3d.hpp.

## ◆ getIntegralEE()

double plask::optical::modal::FourierSolver3D::getIntegralEE | ( | size_t | num,
|  | double | z1,
|  | double | z2
| ) |  |
| inline

Get ½ E·conj(E) integral between z1 and z2.

Parameters

  num | mode number
  z1 | lower integration bound
  z2 | upper integration bound

Returns
  computed integral

Definition at line 426 of file solver3d.hpp.

## ◆ getIntegralHH()

double plask::optical::modal::FourierSolver3D::getIntegralHH | ( | size_t | num,
|  | double | z1,
|  | double | z2
| ) |  |
| inline

Get ½ H·conj(H) integral between z1 and z2 for reflected light.

Parameters

  num | mode number
  z1 | lower integration bound
  z2 | upper integration bound

Returns
  computed integral

Definition at line 438 of file solver3d.hpp.

## ◆ getKlong()

dcomplex plask::optical::modal::FourierSolver3D::getKlong | ( |  | ) | const
| inline

Get longitudinal wavevector.

Definition at line 252 of file solver3d.hpp.

## ◆ getKtran()

dcomplex plask::optical::modal::FourierSolver3D::getKtran | ( |  | ) | const
| inline

Get transverse wavevector.

Definition at line 265 of file solver3d.hpp.

## ◆ getLongSize()

size_t plask::optical::modal::FourierSolver3D::getLongSize | ( |  | ) | const
| inline

Get order of the orthogonal base in the longitudinal direction.

Definition at line 188 of file solver3d.hpp.

## ◆ getRule()

ExpansionRule plask::optical::modal::FourierSolver3D::getRule | ( |  | ) | const
| inline

Get expansion rule.

Definition at line 302 of file solver3d.hpp.

## ◆ getScatteredFieldE()

LazyData< Vec< 3, dcomplex > > plask::optical::modal::FourierSolver3D::getScatteredFieldE | ( | const cvector & | incident,
|  | Transfer::IncidentDirection | side,
|  | const shared_ptr< const MeshD< 3 > > & | dst_mesh,
|  | InterpolationMethod | method,
|  | PropagationDirection | part = `PROPAGATION_TOTAL`
| ) |  |
| inline

Get electric field at the given mesh for reflected light.

Parameters

  incident | incident field vector
  side | incidence direction
  dst_mesh | target mesh
  method | interpolation method
  part | part of the field (forward-, backward-propagating, or total) that is wanted

Definition at line 353 of file solver3d.hpp.

## ◆ getScatteredFieldH()

LazyData< Vec< 3, dcomplex > > plask::optical::modal::FourierSolver3D::getScatteredFieldH | ( | const cvector & | incident,
|  | Transfer::IncidentDirection | side,
|  | const shared_ptr< const MeshD< 3 > > & | dst_mesh,
|  | InterpolationMethod | method,
|  | PropagationDirection | part = `PROPAGATION_TOTAL`
| ) |  |
| inline

Get magnetic field at the given mesh for reflected light.

Parameters

  incident | incident field vector
  side | incidence direction
  dst_mesh | target mesh
  method | interpolation method
  part | part of the field (forward-, backward-propagating, or total) that is wanted

Definition at line 371 of file solver3d.hpp.

## ◆ getScatteredFieldMagnitude()

LazyData< double > plask::optical::modal::FourierSolver3D::getScatteredFieldMagnitude | ( | const cvector & | incident,
|  | Transfer::IncidentDirection | side,
|  | const shared_ptr< const MeshD< 3 > > & | dst_mesh,
|  | InterpolationMethod | method
| ) |  |
| inline

Get light intensity for reflected light.

Parameters

  incident | incident field vector
  side | incidence direction
  dst_mesh | destination mesh
  method | interpolation method

Definition at line 388 of file solver3d.hpp.

## ◆ getScatteredFieldVectorE()

cvector plask::optical::modal::FourierSolver3D::getScatteredFieldVectorE | ( | const cvector & | incident,
|  | Transfer::IncidentDirection | side,
|  | double | z
| ) |  |
| inline

Compute electric field coefficients for given z for reflected light.

Parameters

  incident | incident field vector
  side | incidence side
  z | position within the layer

Returns
  electric field coefficients

Definition at line 450 of file solver3d.hpp.

## ◆ getScatteredFieldVectorH()

cvector plask::optical::modal::FourierSolver3D::getScatteredFieldVectorH | ( | const cvector & | incident,
|  | Transfer::IncidentDirection | side,
|  | double | z
| ) |  |
| inline

Compute magnetic field coefficients for given z for reflected light.

Parameters

  incident | incident field vector
  side | incidence side
  z | position within the layer

Returns
  magnetic field coefficients

Definition at line 463 of file solver3d.hpp.

## ◆ getScatteredIntegralEE()

double plask::optical::modal::FourierSolver3D::getScatteredIntegralEE | ( | const cvector & | incident,
|  | Transfer::IncidentDirection | side,
|  | double | z1,
|  | double | z2
| ) |  |
| inline

Get ½ E·conj(E) integral between z1 and z2 for reflected light.

Parameters

  incident | incident field vector
  side | incidence side
  z1 | lower integration bound
  z2 | upper integration bound

Returns
  computed integral

Definition at line 477 of file solver3d.hpp.

## ◆ getScatteredIntegralHH()

double plask::optical::modal::FourierSolver3D::getScatteredIntegralHH | ( | const cvector & | incident,
|  | Transfer::IncidentDirection | side,
|  | double | z1,
|  | double | z2
| ) |  |
| inline

Get ½ H·conj(H) integral between z1 and z2.

Parameters

  incident | incident field vector
  side | incidence side
  z1 | lower integration bound
  z2 | upper integration bound

Returns
  computed integral

Definition at line 491 of file solver3d.hpp.

## ◆ getSymmetryLong()

Expansion::Component plask::optical::modal::FourierSolver3D::getSymmetryLong | ( |  | ) | const
| inline

Return current mode symmetry.

Definition at line 212 of file solver3d.hpp.

## ◆ getSymmetryTran()

Expansion::Component plask::optical::modal::FourierSolver3D::getSymmetryTran | ( |  | ) | const
| inline

Return current mode symmetry.

Definition at line 229 of file solver3d.hpp.

## ◆ getTranSize()

size_t plask::optical::modal::FourierSolver3D::getTranSize | ( |  | ) | const
| inline

Get order of the orthogonal base in the transverse direction.

Definition at line 191 of file solver3d.hpp.

## ◆ getWavelength()

double plask::optical::modal::FourierSolver3D::getWavelength | ( | size_t | n | ) |
| override protected virtual

Return mode wavelength.

Parameters

  n | mode number

Implements plask::optical::modal::ModalSolver< SolverOver< Geometry3D > >.

Definition at line 230 of file solver3d.cpp.

## ◆ incidentGaussian()

cvector plask::optical::modal::FourierSolver3D::incidentGaussian | ( | Transfer::IncidentDirection | side,
|  | Expansion::Component | polarization,
|  | double | sigma_long,
|  | double | sigma_tran,
|  | double | center_long = `0.`,
|  | double | center_tran = `0.`,
|  | dcomplex | lam = `NAN`
| ) |  |

Compute incident vector with Gaussian profile.

Parameters

  side | incidence side
  polarization | polarization of the perpendicularly incident light
  sigma_long,sigma_tran | standard deviations in longitudinal and transverse directions
  center_long,center_tran | position of the beam center in longitudinal and transverse directions
  lam | wavelength

Returns
  incident field vector

Definition at line 262 of file solver3d.cpp.

## ◆ incidentVector()

cvector plask::optical::modal::FourierSolver3D::incidentVector | ( | Transfer::IncidentDirection | side,
|  | Expansion::Component | polarization,
|  | dcomplex | lam = `NAN`
| ) |  |

Get incident field vector for given polarization.

Parameters

  side | incidence side
  polarization | polarization of the perpendicularly incident light
  lam | wavelength

Returns
  incident field vector

Definition at line 248 of file solver3d.cpp.

## ◆ initIncidence()

size_t plask::optical::modal::FourierSolver3D::initIncidence | ( | Transfer::IncidentDirection | side,
|  | Expansion::Component | polarization,
|  | dcomplex | lam
| ) |  |
| protected

Definition at line 236 of file solver3d.cpp.

## ◆ insertMode()

size_t plask::optical::modal::FourierSolver3D::insertMode | ( |  | ) |
| inline protected

Insert mode to the list or return the index of the exiting one.

Definition at line 507 of file solver3d.hpp.

## ◆ loadConfiguration()

void plask::optical::modal::FourierSolver3D::loadConfiguration | ( | XMLReader & | source,
|  | Manager & | manager
| ) |  |
| override virtual

Load configuration from given `source`.

XML reader (`source`) point to opening of `this` solver tag and after return from this method should point to this solver closing tag.

Parameters

  source | source of configuration
  manager | manager from which information about geometry, meshes, materials, and so on can be get if needed

Reimplemented from plask::Solver.

Definition at line 77 of file solver3d.cpp.

## ◆ minor()

size_t plask::optical::modal::FourierSolver3D::minor | ( |  | ) | const
| inline

Return minor field coefficients dimension.

Definition at line 320 of file solver3d.hpp.

## ◆ nummodes()

size_t plask::optical::modal::FourierSolver3D::nummodes | ( |  | ) | const
| inline override protected virtual

Return number of determined modes.

Implements plask::optical::modal::ModalSolver< SolverOver< Geometry3D > >.

Definition at line 523 of file solver3d.hpp.

## ◆ onInitialize()

void plask::optical::modal::FourierSolver3D::onInitialize | ( |  | ) |
| override protected virtual

Initialize the solver.

Default implementation just does nothing, however it is a good idea to overwrite it in subclasses and put initialization code in it.

Reimplemented from plask::Solver.

Definition at line 153 of file solver3d.cpp.

## ◆ onInvalidate()

void plask::optical::modal::FourierSolver3D::onInvalidate | ( |  | ) |
| override protected virtual

This method is called by invalidate() to reset stored values.

Default implementation does nothing.

See also
  invalidate()

Reimplemented from plask::Solver.

Definition at line 168 of file solver3d.cpp.

## ◆ setDCT()

void plask::optical::modal::FourierSolver3D::setDCT | ( | int | n | ) |
| inline

Set type of the DCT.

Definition at line 290 of file solver3d.hpp.

## ◆ setExpansionDefaults()

bool plask::optical::modal::FourierSolver3D::setExpansionDefaults | ( | bool | with_k0 = `true` | ) |
| inline override virtual

Set expansion parameters from default values.

Parameters

  with_k0 | Change k0

Returns
  `true` if anything was changed

Implements plask::optical::modal::ModalBase.

Definition at line 145 of file solver3d.hpp.

## ◆ setGradSmooth()

void plask::optical::modal::FourierSolver3D::setGradSmooth | ( | double | value | ) |
| inline

Set current smooth.

Definition at line 281 of file solver3d.hpp.

## ◆ setKlong()

void plask::optical::modal::FourierSolver3D::setKlong | ( | dcomplex | k | ) |
| inline

Set longitudinal wavevector.

Definition at line 255 of file solver3d.hpp.

## ◆ setKtran()

void plask::optical::modal::FourierSolver3D::setKtran | ( | dcomplex | k | ) |
| inline

Set transverse wavevector.

Definition at line 268 of file solver3d.hpp.

## ◆ setLongSize()

void plask::optical::modal::FourierSolver3D::setLongSize | ( | size_t | n | ) |
| inline

Set order of the orthogonal base in the longitudinal direction.

Definition at line 194 of file solver3d.hpp.

## ◆ setMode()

size_t plask::optical::modal::FourierSolver3D::setMode | ( |  | ) |
| inline

Check if the current parameters correspond to some mode and insert it.

Definition at line 498 of file solver3d.hpp.

## ◆ setRule()

void plask::optical::modal::FourierSolver3D::setRule | ( | ExpansionRule | rule | ) |
| inline

Set expansion rule.

Definition at line 304 of file solver3d.hpp.

## ◆ setSizes()

void plask::optical::modal::FourierSolver3D::setSizes | ( | size_t | nl,
|  | size_t | nt
| ) |  |
| inline

Set order of the orthogonal base.

Definition at line 205 of file solver3d.hpp.

## ◆ setSymmetryLong()

void plask::optical::modal::FourierSolver3D::setSymmetryLong | ( | Expansion::Component | symmetry | ) |
| inline

Set new mode symmetry.

Definition at line 215 of file solver3d.hpp.

## ◆ setSymmetryTran()

void plask::optical::modal::FourierSolver3D::setSymmetryTran | ( | Expansion::Component | symmetry | ) |
| inline

Set new mode symmetry.

Definition at line 232 of file solver3d.hpp.

## ◆ setTranSize()

void plask::optical::modal::FourierSolver3D::setTranSize | ( | size_t | n | ) |
| inline

Set order of the orthogonal base in the transverse direction.

Definition at line 199 of file solver3d.hpp.

## ◆ symmetricLong()

bool plask::optical::modal::FourierSolver3D::symmetricLong | ( |  | ) | const
| inline

Get info if the expansion is symmetric.

Definition at line 246 of file solver3d.hpp.

## ◆ symmetricTran()

bool plask::optical::modal::FourierSolver3D::symmetricTran | ( |  | ) | const
| inline

Get info if the expansion is symmetric.

Definition at line 249 of file solver3d.hpp.

## Friends And Related Symbol Documentation

## ◆ ExpansionPW3D

friend struct ExpansionPW3D
| friend

Definition at line 36 of file solver3d.hpp.

## Member Data Documentation

## ◆ dct

int plask::optical::modal::FourierSolver3D::dct
| protected

Type of discrete cosine transform. Can be only 1 or two.

Definition at line 126 of file solver3d.hpp.

## ◆ expansion

ExpansionPW3D plask::optical::modal::FourierSolver3D::expansion

Class responsible for computing expansion coefficients.

Definition at line 136 of file solver3d.hpp.

## ◆ expansion_rule

ExpansionRule plask::optical::modal::FourierSolver3D::expansion_rule
| protected

Expansion rule.

Definition at line 129 of file solver3d.hpp.

## ◆ grad_smooth

double plask::optical::modal::FourierSolver3D::grad_smooth

Smoothing of the normal-direction functions.

Definition at line 164 of file solver3d.hpp.

## ◆ klong

dcomplex plask::optical::modal::FourierSolver3D::klong
| protected

Longitudinal wavevector (1/µm)

Definition at line 111 of file solver3d.hpp.

## ◆ ktran

dcomplex plask::optical::modal::FourierSolver3D::ktran
| protected

Transverse wavevector (1/µm)

Definition at line 112 of file solver3d.hpp.

## ◆ modes

std::vector<Mode> plask::optical::modal::FourierSolver3D::modes

Computed modes.

Definition at line 139 of file solver3d.hpp.

## ◆ outGradients

ProviderFor<GradientFunctions,Geometry3D>::Delegate plask::optical::modal::FourierSolver3D::outGradients

Provider for gradient functions.

Definition at line 172 of file solver3d.hpp.

## ◆ pml_long

PML plask::optical::modal::FourierSolver3D::pml_long

Longitudinal PMLs.

Definition at line 167 of file solver3d.hpp.

## ◆ pml_tran

PML plask::optical::modal::FourierSolver3D::pml_tran

Transverse PMLs.

Definition at line 169 of file solver3d.hpp.

## ◆ refine_long

size_t plask::optical::modal::FourierSolver3D::refine_long

Mesh multiplier for finer computation of the refractive indices in the longitudinal direction.

Definition at line 159 of file solver3d.hpp.

## ◆ refine_tran

size_t plask::optical::modal::FourierSolver3D::refine_tran

Mesh multiplier for finer computation of the refractive indices in the transverse direction.

Definition at line 161 of file solver3d.hpp.

## ◆ size_long

size_t plask::optical::modal::FourierSolver3D::size_long

Maximum order of the orthogonal base in longitudinal direction.

Definition at line 105 of file solver3d.hpp.

## ◆ size_tran

size_t plask::optical::modal::FourierSolver3D::size_tran

Maximum order of the orthogonal base in transverse direction.

Definition at line 107 of file solver3d.hpp.

## ◆ symmetry_long

Expansion::Component plask::optical::modal::FourierSolver3D::symmetry_long
| protected

Symmetry along longitudinal axis.

Definition at line 114 of file solver3d.hpp.

## ◆ symmetry_tran

Expansion::Component plask::optical::modal::FourierSolver3D::symmetry_tran
| protected

Symmetry along transverse axis.

Definition at line 115 of file solver3d.hpp.

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

- solvers/optical/modal/fourier/solver3d.hpp
- solvers/optical/modal/fourier/solver3d.cpp