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

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

#include <solvers/optical/modal/bessel/solvercyl.hpp>

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

Classes

struct  Mode
 

Public Types

enum  BesselDomain { DOMAIN_FINITE , DOMAIN_INFINITE }
 
enum  InfiniteWavevectors { WAVEVECTORS_UNIFORM , WAVEVECTORS_NONUNIFORM , WAVEVECTORS_LAGUERRE , WAVEVECTORS_MANUAL }
 
enum  Rule { RULE_DIRECT , RULE_COMBINED_1 , RULE_COMBINED_2 , RULE_OLD }
 
typedef ModalSolver< SolverWithMesh< Geometry2DCylindrical, MeshAxis > > BaseType
 
- Public Types inherited from plask::SolverWithMesh< Geometry2DCylindrical, MeshAxis >
typedef MeshAxis MeshType
 Type of the mesh for this solver.
 
- Public Types inherited from plask::SolverOver< SpaceT >
typedef SpaceT 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

const charruleName ()
 
std::string getClassName () const override
 Get name of solver.
 
std::vector< doublegetKlist ()
 Return list of wavevectors.
 
void setKlist (const std::vector< double > &values)
 Set manual k-list.
 
std::vector< doublegetKweights ()
 Return list of wavevector weights.
 
void setKweights (const std::vector< double > &values)
 Set manual k-weights.
 
void clearKweights ()
 
void clearModes () override
 Clear computed modes.
 
bool setExpansionDefaults (bool with_k0=true) override
 Set expansion parameters from default values.
 
 BesselSolverCyl (const std::string &name="")
 
void loadConfiguration (XMLReader &reader, Manager &manager) override
 Load configuration from given source.
 
size_t findMode (dcomplex start, int m=1)
 Find the mode around the specified effective index.
 
size_t getSize () const
 Get order of the orthogonal base.
 
void setSize (size_t n)
 Set order of the orthogonal base.
 
double getKscale () const
 Get scale for infinite wavevectors.
 
void setKscale (double s)
 Set scale for infinite wavevectors.
 
double getKmax () const
 Get maximum wavevector/k0 for infinite domain.
 
void setKmax (double s)
 Set maximum wavevector/k0 for infinite domain.
 
InfiniteWavevectors getKmethod () const
 Get method of infinite k-space integration.
 
void setKmethod (InfiniteWavevectors k)
 Set method of infinite k-space integration.
 
BesselDomain getDomain () const
 Get current domain.
 
void setDomain (BesselDomain dom)
 Set new domain.
 
Rule getRule () const
 Get current domain.
 
void setRule (Rule r)
 Set new domain.
 
unsigned getM () const
 Get order of the orthogonal base.
 
void setM (unsigned n)
 Set order of the orthogonal base.
 
ExpansiongetExpansion () override
 Get solver expansion.
 
LazyData< Vec< 3, dcomplex > > getScatteredFieldE (const cvector &incident, Transfer::IncidentDirection side, const shared_ptr< const MeshD< 2 > > &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< 2 > > &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< 2 > > &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.
 
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.
 
cmatrix epsV_k (size_t layer)
 
cmatrix epsTss (size_t layer)
 
cmatrix epsTsp (size_t layer)
 
cmatrix epsTps (size_t layer)
 
cmatrix epsTpp (size_t layer)
 
cmatrix muV_k ()
 
cmatrix muTss ()
 
cmatrix muTsp ()
 
cmatrix muTps ()
 
cmatrix muTpp ()
 
- Public Member Functions inherited from plask::optical::modal::ModalSolver< SolverWithMesh< Geometry2DCylindrical, MeshAxis > >
 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::SolverWithMesh< Geometry2DCylindrical, MeshAxis >
 SolverWithMesh (const std::string &name="")
 
 ~SolverWithMesh ()
 
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")
 
virtual void onMeshChange (const typename MeshT::Event &PLASK_UNUSED(evt))
 This method is called just after the mesh has been changed.
 
void onGeometryChange (const Geometry::Event &PLASK_UNUSED(evt)) override
 This method is called when the geometry is changed.
 
MeshAxismeshRef () const
 Get current module mesh.
 
shared_ptr< MeshAxisgetMesh () const
 Get current solver mesh.
 
void setMesh (const shared_ptr< MeshAxis > &mesh)
 Set new mesh for the solver.
 
void setMesh (shared_ptr< MeshGeneratorD< MeshT::DIM > > generator)
 Set new mesh got from generator.
 
- Public Member Functions inherited from plask::SolverOver< SpaceT >
 SolverOver (const std::string &name="")
 
 ~SolverOver ()
 
void parseStandardConfiguration (XMLReader &source, Manager &manager, const std::string &expected_msg="solver configuration element")
 
shared_ptr< SpaceTgetGeometry () const
 Get current solver geometry space.
 
void setGeometry (const shared_ptr< SpaceT > &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

std::vector< doubleklist
 Abscissa for manual wavevectors.
 
boost::optional< std::vector< double > > kweights
 Weights for manual wavevectors.
 
std::unique_ptr< ExpansionBesselexpansion
 Class responsible for computing expansion coefficients.
 
std::vector< Modemodes
 Computed modes.
 
double integral_error
 Expected integration estimate error.
 
size_t max_integration_points
 Maximum number of integration points in a single segment.
 
PML pml
 Lateral PMLs.
 
ProviderFor< ModeLoss >::Delegate outLoss
 Provider for computed modal extinction.
 
- Public Attributes inherited from plask::optical::modal::ModalSolver< SolverWithMesh< Geometry2DCylindrical, MeshAxis > >
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 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.
 
void applyMode (const Mode &mode)
 
double getModalLoss (size_t n)
 Return mode modal loss.
 
double getWavelength (size_t n) override
 Return mode wavelength.
 
- Protected Member Functions inherited from plask::optical::modal::ModalSolver< SolverWithMesh< Geometry2DCylindrical, MeshAxis > >
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< SpaceT >
template<typename Boundary , typename ConditionT >
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

BesselDomain domain
 Domain over which the field is expanded (finite or infinite)
 
int m
 Angular dependency index.
 
size_t size
 Maximum order of the orthogonal base.
 
Rule rule
 Coefficients matrix expansion rule.
 
double kscale
 Scale for k-points for infinite expansion.
 
double kmax
 Maximum k-vector/k0 for infinite expansion.
 
InfiniteWavevectors kmethod
 How integration points and weight should be computed.
 
- Protected Attributes inherited from plask::optical::modal::ModalSolver< SolverWithMesh< Geometry2DCylindrical, MeshAxis > >
double smooth
 Smoothing coefficient.
 
- Protected Attributes inherited from plask::SolverWithMesh< Geometry2DCylindrical, MeshAxis >
shared_ptr< MeshAxismesh
 Mesh over which the calculations are performed.
 
boost::signals2::connection mesh_signal_connection
 Connection of mesh to onMeshChange method, see http://www.boost.org/doc/libs/1_55_0/doc/html/signals2/tutorial.html#idp204830936.
 
- Protected Attributes inherited from plask::SolverOver< SpaceT >
shared_ptr< SpaceTgeometry
 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
 Approxximate lateral distance between points for temperature investigation.
 
double temp_layer
 Minimum layer thickness for the purpose of temperature-based layers division.
 

Friends

struct ExpansionBessel
 
struct ExpansionBesselFini
 
struct ExpansionBesselInfini
 

Detailed Description

Reflection transformation solver in Cartesian 2D geometry.

Definition at line 30 of file solvercyl.hpp.

Member Typedef Documentation

◆ BaseType

Member Enumeration Documentation

◆ BesselDomain

Enumerator
DOMAIN_FINITE 
DOMAIN_INFINITE 

Definition at line 38 of file solvercyl.hpp.

◆ InfiniteWavevectors

Enumerator
WAVEVECTORS_UNIFORM 
WAVEVECTORS_NONUNIFORM 
WAVEVECTORS_LAGUERRE 
WAVEVECTORS_MANUAL 

Definition at line 43 of file solvercyl.hpp.

◆ Rule

Enumerator
RULE_DIRECT 
RULE_COMBINED_1 
RULE_COMBINED_2 
RULE_OLD 

Definition at line 51 of file solvercyl.hpp.

Constructor & Destructor Documentation

◆ BesselSolverCyl()

plask::optical::modal::BesselSolverCyl::BesselSolverCyl ( const std::string &  name = "")

Definition at line 20 of file solvercyl.cpp.

Member Function Documentation

◆ applyMode() [1/2]

void plask::optical::modal::BesselSolverCyl::applyMode ( const Mode mode)
inlineprotected

Definition at line 465 of file solvercyl.hpp.

◆ applyMode() [2/2]

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

Apply mode number n.

Returns
Mode power

Implements plask::optical::modal::ModalSolver< SolverWithMesh< Geometry2DCylindrical, MeshAxis > >.

Definition at line 459 of file solvercyl.hpp.

◆ clearKweights()

void plask::optical::modal::BesselSolverCyl::clearKweights ( )
inline

Definition at line 187 of file solvercyl.hpp.

◆ clearModes()

void plask::optical::modal::BesselSolverCyl::clearModes ( )
inlineoverridevirtual

Clear computed modes.

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

Definition at line 191 of file solvercyl.hpp.

◆ computeIntegrals()

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

Recompute integrals used in RE and RH matrices.

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

Definition at line 119 of file solvercyl.hpp.

◆ epsTpp()

cmatrix plask::optical::modal::BesselSolverCyl::epsTpp ( size_t  layer)

Definition at line 199 of file solvercyl.cpp.

◆ epsTps()

cmatrix plask::optical::modal::BesselSolverCyl::epsTps ( size_t  layer)

Definition at line 209 of file solvercyl.cpp.

◆ epsTsp()

cmatrix plask::optical::modal::BesselSolverCyl::epsTsp ( size_t  layer)

Definition at line 204 of file solvercyl.cpp.

◆ epsTss()

cmatrix plask::optical::modal::BesselSolverCyl::epsTss ( size_t  layer)

Definition at line 194 of file solvercyl.cpp.

◆ epsV_k()

cmatrix plask::optical::modal::BesselSolverCyl::epsV_k ( size_t  layer)

Definition at line 189 of file solvercyl.cpp.

◆ findMode()

size_t plask::optical::modal::BesselSolverCyl::findMode ( dcomplex  start,
int  m = 1 
)

Find the mode around the specified effective index.

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

Parameters
startinitial wavelength value to search the mode around
Returns
determined effective index

Definition at line 165 of file solvercyl.cpp.

◆ getClassName()

std::string plask::optical::modal::BesselSolverCyl::getClassName ( ) const
inlineoverridevirtual

Get name of solver.

Returns
name of this solver

Implements plask::Solver.

Definition at line 68 of file solvercyl.hpp.

◆ getDomain()

BesselDomain plask::optical::modal::BesselSolverCyl::getDomain ( ) const
inline

Get current domain.

Definition at line 253 of file solvercyl.hpp.

◆ getExpansion()

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

Get solver expansion.

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

Definition at line 273 of file solvercyl.hpp.

◆ getFieldVectorE()

cvector plask::optical::modal::BesselSolverCyl::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 333 of file solvercyl.hpp.

◆ getFieldVectorH()

cvector plask::optical::modal::BesselSolverCyl::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 344 of file solvercyl.hpp.

◆ getIntegralEE()

double plask::optical::modal::BesselSolverCyl::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 356 of file solvercyl.hpp.

◆ getIntegralHH()

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

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

Parameters
nummode number
z1lower integration bound
z2upper integration bound
Returns
computed integral

Definition at line 368 of file solvercyl.hpp.

◆ getKlist()

std::vector< double > plask::optical::modal::BesselSolverCyl::getKlist ( )
inline

Return list of wavevectors.

Definition at line 150 of file solvercyl.hpp.

◆ getKmax()

double plask::optical::modal::BesselSolverCyl::getKmax ( ) const
inline

Get maximum wavevector/k0 for infinite domain.

Definition at line 243 of file solvercyl.hpp.

◆ getKmethod()

InfiniteWavevectors plask::optical::modal::BesselSolverCyl::getKmethod ( ) const
inline

Get method of infinite k-space integration.

Definition at line 248 of file solvercyl.hpp.

◆ getKscale()

double plask::optical::modal::BesselSolverCyl::getKscale ( ) const
inline

Get scale for infinite wavevectors.

Definition at line 238 of file solvercyl.hpp.

◆ getKweights()

std::vector< double > plask::optical::modal::BesselSolverCyl::getKweights ( )
inline

Return list of wavevector weights.

Definition at line 167 of file solvercyl.hpp.

◆ getM()

unsigned plask::optical::modal::BesselSolverCyl::getM ( ) const
inline

Get order of the orthogonal base.

Definition at line 269 of file solvercyl.hpp.

◆ getModalLoss()

double plask::optical::modal::BesselSolverCyl::getModalLoss ( size_t  n)
inlineprotected

Return mode modal loss.

Parameters
nmode number

Definition at line 476 of file solvercyl.hpp.

◆ getRule()

Rule plask::optical::modal::BesselSolverCyl::getRule ( ) const
inline

Get current domain.

Definition at line 261 of file solvercyl.hpp.

◆ getScatteredFieldE()

LazyData< Vec< 3, dcomplex > > plask::optical::modal::BesselSolverCyl::getScatteredFieldE ( const cvector incident,
Transfer::IncidentDirection  side,
const shared_ptr< const MeshD< 2 > > &  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 283 of file solvercyl.hpp.

◆ getScatteredFieldH()

LazyData< Vec< 3, dcomplex > > plask::optical::modal::BesselSolverCyl::getScatteredFieldH ( const cvector incident,
Transfer::IncidentDirection  side,
const shared_ptr< const MeshD< 2 > > &  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 301 of file solvercyl.hpp.

◆ getScatteredFieldMagnitude()

LazyData< double > plask::optical::modal::BesselSolverCyl::getScatteredFieldMagnitude ( const cvector incident,
Transfer::IncidentDirection  side,
const shared_ptr< const MeshD< 2 > > &  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 318 of file solvercyl.hpp.

◆ getScatteredFieldVectorE()

cvector plask::optical::modal::BesselSolverCyl::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 380 of file solvercyl.hpp.

◆ getScatteredFieldVectorH()

cvector plask::optical::modal::BesselSolverCyl::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 393 of file solvercyl.hpp.

◆ getScatteredIntegralEE()

double plask::optical::modal::BesselSolverCyl::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 407 of file solvercyl.hpp.

◆ getScatteredIntegralHH()

double plask::optical::modal::BesselSolverCyl::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 421 of file solvercyl.hpp.

◆ getSize()

size_t plask::optical::modal::BesselSolverCyl::getSize ( ) const
inline

Get order of the orthogonal base.

Definition at line 230 of file solvercyl.hpp.

◆ getWavelength()

double plask::optical::modal::BesselSolverCyl::getWavelength ( size_t  n)
overrideprotectedvirtual

Return mode wavelength.

Parameters
nmode number

Implements plask::optical::modal::ModalSolver< SolverWithMesh< Geometry2DCylindrical, MeshAxis > >.

Definition at line 183 of file solvercyl.cpp.

◆ insertMode()

size_t plask::optical::modal::BesselSolverCyl::insertMode ( )
inlineprotected

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

Definition at line 436 of file solvercyl.hpp.

◆ loadConfiguration()

void plask::optical::modal::BesselSolverCyl::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 37 of file solvercyl.cpp.

◆ muTpp()

cmatrix plask::optical::modal::BesselSolverCyl::muTpp ( )

Definition at line 251 of file solvercyl.cpp.

◆ muTps()

cmatrix plask::optical::modal::BesselSolverCyl::muTps ( )

Definition at line 242 of file solvercyl.cpp.

◆ muTsp()

cmatrix plask::optical::modal::BesselSolverCyl::muTsp ( )

Definition at line 233 of file solvercyl.cpp.

◆ muTss()

cmatrix plask::optical::modal::BesselSolverCyl::muTss ( )

Definition at line 224 of file solvercyl.cpp.

◆ muV_k()

cmatrix plask::optical::modal::BesselSolverCyl::muV_k ( )

Definition at line 215 of file solvercyl.cpp.

◆ nummodes()

size_t plask::optical::modal::BesselSolverCyl::nummodes ( ) const
inlineoverrideprotectedvirtual

Return number of determined modes.

Implements plask::optical::modal::ModalSolver< SolverWithMesh< Geometry2DCylindrical, MeshAxis > >.

Definition at line 457 of file solvercyl.hpp.

◆ onInitialize()

void plask::optical::modal::BesselSolverCyl::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 131 of file solvercyl.cpp.

◆ onInvalidate()

void plask::optical::modal::BesselSolverCyl::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 159 of file solvercyl.cpp.

◆ ruleName()

const char * plask::optical::modal::BesselSolverCyl::ruleName ( )
inline

Definition at line 58 of file solvercyl.hpp.

◆ setDomain()

void plask::optical::modal::BesselSolverCyl::setDomain ( BesselDomain  dom)
inline

Set new domain.

Definition at line 255 of file solvercyl.hpp.

◆ setExpansionDefaults()

bool plask::optical::modal::BesselSolverCyl::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 195 of file solvercyl.hpp.

◆ setKlist()

void plask::optical::modal::BesselSolverCyl::setKlist ( const std::vector< double > &  values)
inline

Set manual k-list.

Definition at line 157 of file solvercyl.hpp.

◆ setKmax()

void plask::optical::modal::BesselSolverCyl::setKmax ( double  s)
inline

Set maximum wavevector/k0 for infinite domain.

Definition at line 245 of file solvercyl.hpp.

◆ setKmethod()

void plask::optical::modal::BesselSolverCyl::setKmethod ( InfiniteWavevectors  k)
inline

Set method of infinite k-space integration.

Definition at line 250 of file solvercyl.hpp.

◆ setKscale()

void plask::optical::modal::BesselSolverCyl::setKscale ( double  s)
inline

Set scale for infinite wavevectors.

Definition at line 240 of file solvercyl.hpp.

◆ setKweights()

void plask::optical::modal::BesselSolverCyl::setKweights ( const std::vector< double > &  values)
inline

Set manual k-weights.

Definition at line 178 of file solvercyl.hpp.

◆ setM()

void plask::optical::modal::BesselSolverCyl::setM ( unsigned  n)
inline

Set order of the orthogonal base.

Definition at line 271 of file solvercyl.hpp.

◆ setMode()

size_t plask::optical::modal::BesselSolverCyl::setMode ( )
inline

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

Definition at line 428 of file solvercyl.hpp.

◆ setRule()

void plask::optical::modal::BesselSolverCyl::setRule ( Rule  r)
inline

Set new domain.

Definition at line 263 of file solvercyl.hpp.

◆ setSize()

void plask::optical::modal::BesselSolverCyl::setSize ( size_t  n)
inline

Set order of the orthogonal base.

Definition at line 232 of file solvercyl.hpp.

Friends And Related Symbol Documentation

◆ ExpansionBessel

Definition at line 34 of file solvercyl.hpp.

◆ ExpansionBesselFini

Definition at line 35 of file solvercyl.hpp.

◆ ExpansionBesselInfini

Definition at line 36 of file solvercyl.hpp.

Member Data Documentation

◆ domain

BesselDomain plask::optical::modal::BesselSolverCyl::domain
protected

Domain over which the field is expanded (finite or infinite)

Definition at line 107 of file solvercyl.hpp.

◆ expansion

std::unique_ptr<ExpansionBessel> plask::optical::modal::BesselSolverCyl::expansion

Class responsible for computing expansion coefficients.

Definition at line 144 of file solvercyl.hpp.

◆ integral_error

double plask::optical::modal::BesselSolverCyl::integral_error

Expected integration estimate error.

Definition at line 206 of file solvercyl.hpp.

◆ klist

std::vector<double> plask::optical::modal::BesselSolverCyl::klist

Abscissa for manual wavevectors.

Definition at line 138 of file solvercyl.hpp.

◆ kmax

double plask::optical::modal::BesselSolverCyl::kmax
protected

Maximum k-vector/k0 for infinite expansion.

Definition at line 130 of file solvercyl.hpp.

◆ kmethod

InfiniteWavevectors plask::optical::modal::BesselSolverCyl::kmethod
protected

How integration points and weight should be computed.

Definition at line 133 of file solvercyl.hpp.

◆ kscale

double plask::optical::modal::BesselSolverCyl::kscale
protected

Scale for k-points for infinite expansion.

Definition at line 127 of file solvercyl.hpp.

◆ kweights

boost::optional<std::vector<double> > plask::optical::modal::BesselSolverCyl::kweights

Weights for manual wavevectors.

Definition at line 141 of file solvercyl.hpp.

◆ m

int plask::optical::modal::BesselSolverCyl::m
protected

Angular dependency index.

Definition at line 110 of file solvercyl.hpp.

◆ max_integration_points

size_t plask::optical::modal::BesselSolverCyl::max_integration_points

Maximum number of integration points in a single segment.

Definition at line 209 of file solvercyl.hpp.

◆ modes

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

Computed modes.

Definition at line 147 of file solvercyl.hpp.

◆ outLoss

ProviderFor<ModeLoss>::Delegate plask::optical::modal::BesselSolverCyl::outLoss

Provider for computed modal extinction.

Definition at line 215 of file solvercyl.hpp.

◆ pml

PML plask::optical::modal::BesselSolverCyl::pml

Lateral PMLs.

Definition at line 212 of file solvercyl.hpp.

◆ rule

Rule plask::optical::modal::BesselSolverCyl::rule
protected

Coefficients matrix expansion rule.

Definition at line 124 of file solvercyl.hpp.

◆ size

size_t plask::optical::modal::BesselSolverCyl::size
protected

Maximum order of the orthogonal base.

Definition at line 113 of file solvercyl.hpp.


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