PLaSK library
Loading...
Searching...
No Matches
plask::gain::freecarrier::FreeCarrierGainSolver2D< GeometryT > Struct Template Reference

Gain solver using Fermi Golden Rule. More...

#include <solvers/gain/freecarrier/freecarrier2d.hpp>

Inheritance diagram for plask::gain::freecarrier::FreeCarrierGainSolver2D< GeometryT >:
[legend]
Collaboration diagram for plask::gain::freecarrier::FreeCarrierGainSolver2D< GeometryT >:
[legend]

Classes

struct  ComputedData
 
struct  DataBase
 Base for lazy data implementation. More...
 
struct  DgdnData
 
struct  EnergyLevelsData
 
struct  GainData
 

Public Member Functions

 FreeCarrierGainSolver2D (const std::string &name="")
 
std::string getClassName () const override
 Get name of solver.
 
std::string getClassName () const
 Get name of solver.
 
std::string getClassName () const
 Get name of solver.
 
- Public Member Functions inherited from plask::gain::freecarrier::FreeCarrierGainSolver< SolverWithMesh< GeometryT, MeshAxis > >
 FreeCarrierGainSolver (const std::string &name="")
 
virtual ~FreeCarrierGainSolver ()
 
void loadConfiguration (plask::XMLReader &reader, plask::Manager &manager) override
 
double getN (double F, double T, const ActiveRegionParams &params) const
 Compute concentration for electron quasi-Fermi level.
 
double getP (double F, double T, const ActiveRegionParams &params) const
 Compute concentration for hole quasi-Fermi level.
 
double detEl (double E, const ActiveRegionParams &params, size_t well=0)
 
double detHh (double E, const ActiveRegionParams &params, size_t well=0)
 
double detLh (double E, const ActiveRegionParams &params, size_t well=0)
 
shared_ptr< MaterialgetSubstrate () const
 Get substrate material.
 
void setSubstrate (shared_ptr< Material > material)
 Set substrate material.
 
void findFermiLevels (double &Fc, double &Fv, double n, double T, const ActiveRegionParams &params) const
 Compute quasi-Fermi levels for given concentration and temperature.
 
Tensor2< double > getGain0 (double hw, double Fc, double Fv, double T, double nr, const ActiveRegionParams &params) const
 Find gain before convolution.
 
Tensor2< double > getGain (double hw, double Fc, double Fv, double T, double nr, const ActiveRegionParams &params) const
 Find gain after convolution.
 
double getT0 () const
 
void setT0 (double T)
 
double getLifeTime () const
 
void setLifeTime (double iLifeTime)
 
double getMatrixElem () const
 
void setMatrixElem (double iMatrixElem)
 
bool getStrained () const
 
void setStrained (bool value)
 
shared_ptr< GainSpectrum< SolverWithMesh< GeometryT, MeshAxis > > > getGainSpectrum (const Vec< DIM > &point)
 
- Public Member Functions inherited from plask::SolverWithMesh< GeometryT, 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")
 
virtual void onGeometryChange (const Geometry::Event &)
 This method is called when the geometry is changed.
 
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.
 

Protected Types

typedef DataBase< Tensor2< double > > DataBaseTensor2
 
typedef DataBase< std::vector< double > > DataBaseVector
 

Protected Member Functions

void detectActiveRegions () override
 Detect active regions.
 
const LazyData< Tensor2< double > > getGainData (Gain::EnumType what, const shared_ptr< const MeshD< 2 > > &dst_mesh, double wavelength, InterpolationMethod interp=INTERPOLATION_DEFAULT) override
 
const LazyData< std::vector< double > > getEnergyLevels (EnergyLevels::EnumType which, const shared_ptr< const MeshD< 2 > > &dst_mesh, InterpolationMethod interp=INTERPOLATION_DEFAULT) override
 
- Protected Member Functions inherited from plask::gain::freecarrier::FreeCarrierGainSolver< SolverWithMesh< GeometryT, MeshAxis > >
double level (WhichLevel which, double E, const ActiveRegionParams &params, size_t start, size_t stop) const
 Compute determinant for energy levels.
 
double level (WhichLevel which, double E, const ActiveRegionParams &params) const
 
double level (WhichLevel which, double E, const ActiveRegionParams &params, size_t well) const
 
void estimateWellLevels (WhichLevel which, ActiveRegionParams &params, size_t qw) const
 Find levels estimates.
 
void estimateAboveLevels (WhichLevel which, ActiveRegionParams &params) const
 Find levels estimates.
 
std::pair< double, double > fermi_bracket_and_solve (F f, double guess, double step, boost::uintmax_t &max_iter) const
 Walk the energy to bracket the Fermi level.
 
void estimateLevels ()
 Estimate energy levels.
 
void onInitialize () override
 Initialize the solver.
 
void onInvalidate () override
 Invalidate the gain.
 
void onInputChange (ReceiverBase &, ReceiverBase::ChangeReason)
 Notify that gain was changed.
 
virtual const LazyData< Tensor2< double > > getGainData (Gain::EnumType what, const shared_ptr< const MeshD< DIM > > &dst_mesh, double wavelength, InterpolationMethod interp=INTERPOLATION_DEFAULT)=0
 Compute the gain on the mesh.
 
virtual const LazyData< std::vector< double > > getEnergyLevels (EnergyLevels::EnumType which, const shared_ptr< const MeshD< DIM > > &dst_mesh, InterpolationMethod interp=INTERPOLATION_DEFAULT)=0
 Compute the energy levels.
 
- 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.
 

Additional Inherited Members

- Public Types inherited from plask::gain::freecarrier::FreeCarrierGainSolver< SolverWithMesh< GeometryT, MeshAxis > >
enum  WhichLevel
 Which level to compute. More...
 
enum  
 
typedef BaseT::SpaceType GeometryType
 
typedef GainSpectrum< SolverWithMesh< GeometryT, MeshAxis > > GainSpectrumType
 
- Public Types inherited from plask::SolverWithMesh< GeometryT, 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 Attributes inherited from plask::gain::freecarrier::FreeCarrierGainSolver< SolverWithMesh< GeometryT, MeshAxis > >
std::vector< ActiveRegionInfo > regions
 List of active regions.
 
ReceiverFor< Temperature, GeometryTypeinTemperature
 Receiver for temperature.
 
ReceiverFor< CarriersConcentration, GeometryTypeinCarriersConcentration
 Receiver for carriers concentration in the active region.
 
ReceiverFor< BandEdges, GeometryTypeinBandEdges
 Receiver for band edges.
 
ReceiverFor< FermiLevels, GeometryTypeinFermiLevels
 Receiver for quasi Fermi levels.
 
ProviderFor< Gain, GeometryType >::Delegate outGain
 Provider for gain distribution.
 
ProviderFor< EnergyLevels, GeometryType >::Delegate outEnergyLevels
 Provider for energy levels.
 
std::vector< ActiveRegionParams > params0
 Reference active region params.
 
bool quick_levels
 Are levels computed quickly based on estimates.
 
- Protected Attributes inherited from plask::gain::freecarrier::FreeCarrierGainSolver< SolverWithMesh< GeometryT, MeshAxis > >
shared_ptr< MaterialsubstrateMaterial
 Substrate material.
 
bool explicitSubstrate
 Is substrate material explicitly set?
 
double lifetime
 Stimulated emission lifetime [ps].
 
double matrixelem
 Optical matrix element [m0*eV].
 
double T0
 Temperature used for compiting level estimates.
 
double levelsep
 Minimum separation between distinct levels.
 
bool strained
 Consider strain in QW?
 
- Protected Attributes inherited from plask::SolverWithMesh< GeometryT, 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
 

Detailed Description

template<typename GeometryT>
struct plask::gain::freecarrier::FreeCarrierGainSolver2D< GeometryT >

Gain solver using Fermi Golden Rule.

Definition at line 25 of file freecarrier2d.hpp.

Member Typedef Documentation

◆ DataBaseTensor2

Definition at line 44 of file freecarrier2d.hpp.

◆ DataBaseVector

Definition at line 45 of file freecarrier2d.hpp.

Constructor & Destructor Documentation

◆ FreeCarrierGainSolver2D()

template<typename GeometryT >
plask::gain::freecarrier::FreeCarrierGainSolver2D< GeometryT >::FreeCarrierGainSolver2D ( const std::string &  name = "")

Definition at line 23 of file freecarrier2d.cpp.

Member Function Documentation

◆ detectActiveRegions()

template<typename GeometryT >
void plask::gain::freecarrier::FreeCarrierGainSolver2D< GeometryT >::detectActiveRegions ( )
overrideprotectedvirtual

Detect active regions.

Store information about them in the regions field.

Implements plask::gain::freecarrier::FreeCarrierGainSolver< SolverWithMesh< GeometryT, MeshAxis > >.

Definition at line 38 of file freecarrier2d.cpp.

◆ getClassName() [1/3]

std::string plask::gain::freecarrier::FreeCarrierGainSolver2D< Geometry2DCartesian >::getClassName ( ) const
virtual

Get name of solver.

Returns
name of this solver

Implements plask::Solver.

Definition at line 474 of file freecarrier2d.cpp.

◆ getClassName() [2/3]

std::string plask::gain::freecarrier::FreeCarrierGainSolver2D< Geometry2DCylindrical >::getClassName ( ) const
virtual

Get name of solver.

Returns
name of this solver

Implements plask::Solver.

Definition at line 475 of file freecarrier2d.cpp.

◆ getClassName() [3/3]

template<typename GeometryT >
std::string plask::gain::freecarrier::FreeCarrierGainSolver2D< GeometryT >::getClassName ( ) const
overridevirtual

Get name of solver.

Returns
name of this solver

Implements plask::Solver.

◆ getEnergyLevels()

template<typename GeometryT >
const LazyData< std::vector< double > > plask::gain::freecarrier::FreeCarrierGainSolver2D< GeometryT >::getEnergyLevels ( EnergyLevels::EnumType  which,
const shared_ptr< const MeshD< 2 > > &  dst_mesh,
InterpolationMethod  interp = INTERPOLATION_DEFAULT 
)
overrideprotected

Definition at line 466 of file freecarrier2d.cpp.

◆ getGainData()

template<typename GeometryT >
const LazyData< Tensor2< double > > plask::gain::freecarrier::FreeCarrierGainSolver2D< GeometryT >::getGainData ( Gain::EnumType  what,
const shared_ptr< const MeshD< 2 > > &  dst_mesh,
double  wavelength,
InterpolationMethod  interp = INTERPOLATION_DEFAULT 
)
overrideprotected

Definition at line 409 of file freecarrier2d.cpp.


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