PLaSK library
Loading...
Searching...
No Matches
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.
 
ExpansiongetExpansion () 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< doublegetScatteredFieldMagnitude (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< Geometry3DgetGeometry () 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, ValTdataLog (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, ValTdataLog (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< Modemodes
 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< Transfertransfer
 Transfer method object (AdmittanceTransfer or ReflectionTransfer)
 
shared_ptr< OrderedAxisvbounds
 Layer boundaries.
 
shared_ptr< OrderedAxisverts
 Centers of layers.
 
size_t lcount
 Number of distinct layers.
 
std::vector< boollgained
 Information if the layer has gain.
 
std::vector< boollcomputed
 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< doublegetGradients (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< RootDiggergetRootDigger (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< Geometry3Dgeometry
 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

Member Enumeration Documentation

◆ ExpansionRule

Expansion rule.

Enumerator
RULE_OLD 
RULE_DIRECT 
RULE_INVERSE 
RULE_COMBINED 

Definition at line 49 of file solver3d.hpp.

◆ 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)
inlineprotected

Definition at line 540 of file solver3d.hpp.

◆ applyMode() [2/2]

double plask::optical::modal::FourierSolver3D::applyMode ( size_t  n)
inlineoverrideprotectedvirtual

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 ( )
inlineoverridevirtual

Clear computed modes.

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

Definition at line 141 of file solver3d.hpp.

◆ computeIntegrals()

void plask::optical::modal::FourierSolver3D::computeIntegrals ( )
inlineoverrideprotectedvirtual

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
whatwhat to search for
startinitial 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
inlineoverridevirtual

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)
inlineprotected

Return mode effective index.

Parameters
nmode number

Definition at line 535 of file solver3d.hpp.

◆ getExpansion()

Expansion & plask::optical::modal::FourierSolver3D::getExpansion ( )
inlineoverridevirtual

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
nummode number
zposition 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
nummode number
zposition 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
nummode number
z1lower integration bound
z2upper 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
nummode number
z1lower integration bound
z2upper 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
incidentincident field vector
sideincidence direction
dst_meshtarget mesh
methodinterpolation method
partpart 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
incidentincident field vector
sideincidence direction
dst_meshtarget mesh
methodinterpolation method
partpart 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
incidentincident field vector
sideincidence direction
dst_meshdestination mesh
methodinterpolation 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
incidentincident field vector
sideincidence side
zposition 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
incidentincident field vector
sideincidence side
zposition 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
incidentincident field vector
sideincidence side
z1lower integration bound
z2upper 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
incidentincident field vector
sideincidence side
z1lower integration bound
z2upper 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)
overrideprotectedvirtual

Return mode wavelength.

Parameters
nmode 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
sideincidence side
polarizationpolarization of the perpendicularly incident light
sigma_long,sigma_transtandard deviations in longitudinal and transverse directions
center_long,center_tranposition of the beam center in longitudinal and transverse directions
lamwavelength
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
sideincidence side
polarizationpolarization of the perpendicularly incident light
lamwavelength
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 ( )
inlineprotected

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 
)
overridevirtual

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
sourcesource of configuration
managermanager 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
inlineoverrideprotectedvirtual

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 ( )
overrideprotectedvirtual

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 ( )
overrideprotectedvirtual

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)
inlineoverridevirtual

Set expansion parameters from default values.

Parameters
with_k0Change 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

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: