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

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

#include <solvers/optical/modal/fourier/solver2d.hpp>

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

Classes

struct  Mode
 Mode parameters. More...
 

Public Types

enum  What {
  WHAT_WAVELENGTH , WHAT_K0 , WHAT_NEFF , WHAT_KTRAN ,
  WHAT_BETA
}
 Indication of parameter to search. More...
 
enum  FourierType { FOURIER_DISCRETE , FOURIER_ANALYTIC }
 Possible ways of computation of Fourier coefficients. More...
 
typedef ModalSolver< SolverWithMesh< Geometry2DCartesian, MeshAxis > > BaseType
 
- Public Types inherited from plask::SolverWithMesh< Geometry2DCartesian, 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

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.
 
 FourierSolver2D (const std::string &name="")
 
void loadConfiguration (XMLReader &reader, Manager &manager) override
 Load configuration from given source.
 
void setSimpleMesh ()
 Set the simple mesh based on the geometry bounding boxes.
 
size_t findMode (FourierSolver2D::What what, dcomplex start)
 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.
 
int getDCT () const
 Get type of the DCT.
 
void setDCT (int n)
 Set type of the DCT.
 
bool dct2 () const
 True if DCT == 2.
 
FourierType getFourierType () const
 Get type of the DCT.
 
void setFourierType (FourierType ft)
 Set type of the DCT.
 
dcomplex getKtran () const
 Get transverse wavevector.
 
void setKtran (dcomplex k)
 Set transverse wavevector.
 
void setBeta (dcomplex k)
 Set longitudinal wavevector.
 
dcomplex getBeta () const
 Get longitudinal wavevector.
 
Expansion::Component getSymmetry () const
 Return current mode symmetry.
 
void setSymmetry (Expansion::Component sym)
 Set new mode symmetry.
 
Expansion::Component getPolarization () const
 Return current mode polarization.
 
void setPolarization (Expansion::Component pol)
 Set new mode polarization.
 
bool symmetric () const
 Get info if the expansion is symmetric.
 
bool separated () const
 Get info if the expansion is separated.
 
ExpansiongetExpansion () override
 Get solver expansion.
 
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, double center=0., dcomplex lam=NAN)
 Compute incident vector with Gaussian profile.
 
LazyData< Vec< 3, dcomplex > > getScatteredFieldE (const cvector &incident, Transfer::IncidentDirection side, 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, 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, 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.
 
- Public Member Functions inherited from plask::optical::modal::ModalSolver< SolverWithMesh< Geometry2DCartesian, 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< Geometry2DCartesian, 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

ExpansionPW2D expansion
 Class responsible for computing expansion coefficients.
 
std::vector< Modemodes
 Computed modes.
 
size_t refine
 Mesh multiplier for finer computation of the refractive indices.
 
PML pml
 Lateral PMLs.
 
plask::optional< std::pair< double, double > > mirrors
 Mirror reflectivities.
 
ProviderFor< ModeEffectiveIndex >::Delegate outNeff
 Provider for computed effective index.
 
- Public Attributes inherited from plask::optical::modal::ModalSolver< SolverWithMesh< Geometry2DCartesian, 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.
 
dcomplex getEffectiveIndex (size_t n)
 Return mode effective index.
 
double getMirrorLosses (double n)
 Compute mirror losses for specified effective mode.
 
void applyMode (const Mode &mode)
 
double getWavelength (size_t n) override
 Return mode wavelength.
 
- Protected Member Functions inherited from plask::optical::modal::ModalSolver< SolverWithMesh< Geometry2DCartesian, 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

dcomplex beta
 Longitudinal wavevector (1/µm)
 
dcomplex ktran
 Transverse wavevector (1/µm)
 
Expansion::Component symmetry
 Indicates symmetry if symmetric
 
Expansion::Component polarization
 Indicates polarization if separated
 
size_t size
 Maximum order of the orthogonal base.
 
int dct
 Type of discrete cosine transform. Can be only 1 or two.
 
FourierType ftt
 Way of computation of Fourier coefficients.
 
- Protected Attributes inherited from plask::optical::modal::ModalSolver< SolverWithMesh< Geometry2DCartesian, MeshAxis > >
double smooth
 Smoothing coefficient.
 
- Protected Attributes inherited from plask::SolverWithMesh< Geometry2DCartesian, 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 ExpansionPW2D
 

Detailed Description

Reflection transformation solver in Cartesian 2D geometry.

Definition at line 27 of file solver2d.hpp.

Member Typedef Documentation

◆ BaseType

Member Enumeration Documentation

◆ FourierType

Possible ways of computation of Fourier coefficients.

Enumerator
FOURIER_DISCRETE 
FOURIER_ANALYTIC 

Definition at line 95 of file solver2d.hpp.

◆ What

Indication of parameter to search.

Enumerator
WHAT_WAVELENGTH 

Search for wavelength.

WHAT_K0 

Search for normalized frequency.

WHAT_NEFF 

Search for longitudinal effective index.

WHAT_KTRAN 

Search for transverse wavevector.

WHAT_BETA 

Search for longitudinal wavevector.

Definition at line 36 of file solver2d.hpp.

Constructor & Destructor Documentation

◆ FourierSolver2D()

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

Definition at line 20 of file solver2d.cpp.

Member Function Documentation

◆ applyMode() [1/2]

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

Definition at line 537 of file solver2d.hpp.

◆ applyMode() [2/2]

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

Apply mode number n.

Returns
Mode power

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

Definition at line 505 of file solver2d.hpp.

◆ clearModes()

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

Clear computed modes.

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

Definition at line 133 of file solver2d.hpp.

◆ computeIntegrals()

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

Recompute integrals used in RE and RH matrices.

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

Definition at line 115 of file solver2d.hpp.

◆ dct2()

bool plask::optical::modal::FourierSolver2D::dct2 ( ) const
inline

True if DCT == 2.

Definition at line 203 of file solver2d.hpp.

◆ findMode()

size_t plask::optical::modal::FourierSolver2D::findMode ( FourierSolver2D::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 159 of file solver2d.cpp.

◆ getBeta()

dcomplex plask::optical::modal::FourierSolver2D::getBeta ( ) const
inline

Get longitudinal wavevector.

Definition at line 242 of file solver2d.hpp.

◆ getClassName()

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

Get name of solver.

Returns
name of this solver

Implements plask::Solver.

Definition at line 33 of file solver2d.hpp.

◆ getDCT()

int plask::optical::modal::FourierSolver2D::getDCT ( ) const
inline

Get type of the DCT.

Definition at line 192 of file solver2d.hpp.

◆ getEffectiveIndex()

dcomplex plask::optical::modal::FourierSolver2D::getEffectiveIndex ( size_t  n)
inlineprotected

Return mode effective index.

Parameters
nmode number

Definition at line 515 of file solver2d.hpp.

◆ getExpansion()

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

Get solver expansion.

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

Definition at line 282 of file solver2d.hpp.

◆ getFieldVectorE()

cvector plask::optical::modal::FourierSolver2D::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 382 of file solver2d.hpp.

◆ getFieldVectorH()

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

◆ getFourierType()

FourierType plask::optical::modal::FourierSolver2D::getFourierType ( ) const
inline

Get type of the DCT.

Definition at line 207 of file solver2d.hpp.

◆ getIntegralEE()

double plask::optical::modal::FourierSolver2D::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 405 of file solver2d.hpp.

◆ getIntegralHH()

double plask::optical::modal::FourierSolver2D::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 417 of file solver2d.hpp.

◆ getKtran()

dcomplex plask::optical::modal::FourierSolver2D::getKtran ( ) const
inline

Get transverse wavevector.

Definition at line 217 of file solver2d.hpp.

◆ getMirrorLosses()

double plask::optical::modal::FourierSolver2D::getMirrorLosses ( double  n)
inlineprotected

Compute mirror losses for specified effective mode.

Definition at line 521 of file solver2d.hpp.

◆ getPolarization()

Expansion::Component plask::optical::modal::FourierSolver2D::getPolarization ( ) const
inline

Return current mode polarization.

Definition at line 262 of file solver2d.hpp.

◆ getScatteredFieldE()

LazyData< Vec< 3, dcomplex > > plask::optical::modal::FourierSolver2D::getScatteredFieldE ( const cvector incident,
Transfer::IncidentDirection  side,
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 323 of file solver2d.hpp.

◆ getScatteredFieldH()

LazyData< Vec< 3, dcomplex > > plask::optical::modal::FourierSolver2D::getScatteredFieldH ( const cvector incident,
Transfer::IncidentDirection  side,
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 344 of file solver2d.hpp.

◆ getScatteredFieldMagnitude()

LazyData< double > plask::optical::modal::FourierSolver2D::getScatteredFieldMagnitude ( const cvector incident,
Transfer::IncidentDirection  side,
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 364 of file solver2d.hpp.

◆ getScatteredFieldVectorE()

cvector plask::optical::modal::FourierSolver2D::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 429 of file solver2d.hpp.

◆ getScatteredFieldVectorH()

cvector plask::optical::modal::FourierSolver2D::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 442 of file solver2d.hpp.

◆ getScatteredIntegralEE()

double plask::optical::modal::FourierSolver2D::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 456 of file solver2d.hpp.

◆ getScatteredIntegralHH()

double plask::optical::modal::FourierSolver2D::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 470 of file solver2d.hpp.

◆ getSize()

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

Get order of the orthogonal base.

Definition at line 184 of file solver2d.hpp.

◆ getSymmetry()

Expansion::Component plask::optical::modal::FourierSolver2D::getSymmetry ( ) const
inline

Return current mode symmetry.

Definition at line 245 of file solver2d.hpp.

◆ getWavelength()

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

Return mode wavelength.

Parameters
nmode number

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

Definition at line 223 of file solver2d.cpp.

◆ incidentGaussian()

cvector plask::optical::modal::FourierSolver2D::incidentGaussian ( Transfer::IncidentDirection  side,
Expansion::Component  polarization,
double  sigma,
double  center = 0.,
dcomplex  lam = NAN 
)

Compute incident vector with Gaussian profile.

Parameters
sideincidence side
polarizationpolarization of the perpendicularly incident light
sigmastandard deviation
centerposition of the beam center
lamwavelength
Returns
incident field vector

Definition at line 258 of file solver2d.cpp.

◆ incidentVector()

cvector plask::optical::modal::FourierSolver2D::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 242 of file solver2d.cpp.

◆ insertMode()

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

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

Definition at line 486 of file solver2d.hpp.

◆ loadConfiguration()

void plask::optical::modal::FourierSolver2D::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 34 of file solver2d.cpp.

◆ nummodes()

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

Return number of determined modes.

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

Definition at line 503 of file solver2d.hpp.

◆ onInitialize()

void plask::optical::modal::FourierSolver2D::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 136 of file solver2d.cpp.

◆ onInvalidate()

void plask::optical::modal::FourierSolver2D::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 151 of file solver2d.cpp.

◆ separated()

bool plask::optical::modal::FourierSolver2D::separated ( ) const
inline

Get info if the expansion is separated.

Definition at line 280 of file solver2d.hpp.

◆ setBeta()

void plask::optical::modal::FourierSolver2D::setBeta ( dcomplex  k)
inline

Set longitudinal wavevector.

Definition at line 231 of file solver2d.hpp.

◆ setDCT()

void plask::optical::modal::FourierSolver2D::setDCT ( int  n)
inline

Set type of the DCT.

Definition at line 194 of file solver2d.hpp.

◆ setExpansionDefaults()

bool plask::optical::modal::FourierSolver2D::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 137 of file solver2d.hpp.

◆ setFourierType()

void plask::optical::modal::FourierSolver2D::setFourierType ( FourierType  ft)
inline

Set type of the DCT.

Definition at line 209 of file solver2d.hpp.

◆ setKtran()

void plask::optical::modal::FourierSolver2D::setKtran ( dcomplex  k)
inline

Set transverse wavevector.

Definition at line 220 of file solver2d.hpp.

◆ setMode()

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

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

Definition at line 477 of file solver2d.hpp.

◆ setPolarization()

void plask::optical::modal::FourierSolver2D::setPolarization ( Expansion::Component  pol)
inline

Set new mode polarization.

Definition at line 265 of file solver2d.hpp.

◆ setSimpleMesh()

void plask::optical::modal::FourierSolver2D::setSimpleMesh ( )
inline

Set the simple mesh based on the geometry bounding boxes.

Definition at line 169 of file solver2d.hpp.

◆ setSize()

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

Set order of the orthogonal base.

Definition at line 186 of file solver2d.hpp.

◆ setSymmetry()

void plask::optical::modal::FourierSolver2D::setSymmetry ( Expansion::Component  sym)
inline

Set new mode symmetry.

Definition at line 248 of file solver2d.hpp.

◆ symmetric()

bool plask::optical::modal::FourierSolver2D::symmetric ( ) const
inline

Get info if the expansion is symmetric.

Definition at line 277 of file solver2d.hpp.

Friends And Related Symbol Documentation

◆ ExpansionPW2D

Definition at line 31 of file solver2d.hpp.

Member Data Documentation

◆ beta

dcomplex plask::optical::modal::FourierSolver2D::beta
protected

Longitudinal wavevector (1/µm)

Definition at line 102 of file solver2d.hpp.

◆ dct

int plask::optical::modal::FourierSolver2D::dct
protected

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

Definition at line 120 of file solver2d.hpp.

◆ expansion

ExpansionPW2D plask::optical::modal::FourierSolver2D::expansion

Class responsible for computing expansion coefficients.

Definition at line 128 of file solver2d.hpp.

◆ ftt

FourierType plask::optical::modal::FourierSolver2D::ftt
protected

Way of computation of Fourier coefficients.

Definition at line 123 of file solver2d.hpp.

◆ ktran

dcomplex plask::optical::modal::FourierSolver2D::ktran
protected

Transverse wavevector (1/µm)

Definition at line 103 of file solver2d.hpp.

◆ mirrors

plask::optional<std::pair<double,double> > plask::optical::modal::FourierSolver2D::mirrors

Mirror reflectivities.

Definition at line 157 of file solver2d.hpp.

◆ modes

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

Computed modes.

Definition at line 131 of file solver2d.hpp.

◆ outNeff

ProviderFor<ModeEffectiveIndex>::Delegate plask::optical::modal::FourierSolver2D::outNeff

Provider for computed effective index.

Definition at line 160 of file solver2d.hpp.

◆ pml

PML plask::optical::modal::FourierSolver2D::pml

Lateral PMLs.

Definition at line 154 of file solver2d.hpp.

◆ polarization

Expansion::Component plask::optical::modal::FourierSolver2D::polarization
protected

Indicates polarization if separated

Definition at line 106 of file solver2d.hpp.

◆ refine

size_t plask::optical::modal::FourierSolver2D::refine

Mesh multiplier for finer computation of the refractive indices.

Definition at line 151 of file solver2d.hpp.

◆ size

size_t plask::optical::modal::FourierSolver2D::size
protected

Maximum order of the orthogonal base.

Definition at line 109 of file solver2d.hpp.

◆ symmetry

Expansion::Component plask::optical::modal::FourierSolver2D::symmetry
protected

Indicates symmetry if symmetric

Definition at line 105 of file solver2d.hpp.


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