PLaSK library
Loading...
Searching...
No Matches
plask::gain::freecarrier::FreeCarrierGainSolver3D Struct Reference

Gain solver using Fermi Golden Rule. More...

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

Inheritance diagram for plask::gain::freecarrier::FreeCarrierGainSolver3D:
[legend]
Collaboration diagram for plask::gain::freecarrier::FreeCarrierGainSolver3D:
[legend]

Classes

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

Public Member Functions

 FreeCarrierGainSolver3D (const std::string &name="")
 
std::string getClassName () const override
 Get name of solver.
 
- Public Member Functions inherited from plask::gain::freecarrier::FreeCarrierGainSolver< SolverOver< Geometry3D > >
 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< SolverOver< Geometry3D > > > getGainSpectrum (const Vec< DIM > &point)
 
- 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")
 
virtual void onGeometryChange (const Geometry::Event &)
 This method is called when the geometry is changed.
 
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.
 

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< 3 > > &dst_mesh, double wavelength, InterpolationMethod interp=INTERPOLATION_DEFAULT) override
 
const LazyData< std::vector< double > > getEnergyLevels (EnergyLevels::EnumType which, const shared_ptr< const MeshD< 3 > > &dst_mesh, InterpolationMethod interp=INTERPOLATION_DEFAULT) override
 
- Protected Member Functions inherited from plask::gain::freecarrier::FreeCarrierGainSolver< SolverOver< Geometry3D > >
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< Geometry3D >
void readBoundaryConditions (Manager &manager, XMLReader &reader, BoundaryConditions< Boundary, ConditionT > &dest)
 Read boundary conditions using information about the geometry of this solver.
 

Friends

struct ActiveRegionMesh
 

Additional Inherited Members

- Public Types inherited from plask::gain::freecarrier::FreeCarrierGainSolver< SolverOver< Geometry3D > >
enum  WhichLevel
 Which level to compute. More...
 
enum  
 
typedef BaseT::SpaceType GeometryType
 
typedef GainSpectrum< SolverOver< Geometry3D > > GainSpectrumType
 
- Public Types inherited from plask::SolverOver< Geometry3D >
typedef Geometry3D SpaceType
 of the space for this solver
 
- Public Attributes inherited from plask::gain::freecarrier::FreeCarrierGainSolver< SolverOver< Geometry3D > >
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< SolverOver< Geometry3D > >
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::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
 

Detailed Description

Gain solver using Fermi Golden Rule.

Definition at line 24 of file freecarrier3d.hpp.

Member Typedef Documentation

◆ DataBaseTensor2

◆ DataBaseVector

Constructor & Destructor Documentation

◆ FreeCarrierGainSolver3D()

plask::gain::freecarrier::FreeCarrierGainSolver3D::FreeCarrierGainSolver3D ( const std::string &  name = "")

Definition at line 22 of file freecarrier3d.cpp.

Member Function Documentation

◆ detectActiveRegions()

void plask::gain::freecarrier::FreeCarrierGainSolver3D::detectActiveRegions ( )
overrideprotectedvirtual

Detect active regions.

Store information about them in the regions field.

Implements plask::gain::freecarrier::FreeCarrierGainSolver< SolverOver< Geometry3D > >.

Definition at line 24 of file freecarrier3d.cpp.

◆ getClassName()

std::string plask::gain::freecarrier::FreeCarrierGainSolver3D::getClassName ( ) const
overridevirtual

Get name of solver.

Returns
name of this solver

Implements plask::Solver.

Definition at line 452 of file freecarrier3d.cpp.

◆ getEnergyLevels()

const LazyData< std::vector< double > > plask::gain::freecarrier::FreeCarrierGainSolver3D::getEnergyLevels ( EnergyLevels::EnumType  which,
const shared_ptr< const MeshD< 3 > > &  dst_mesh,
InterpolationMethod  interp = INTERPOLATION_DEFAULT 
)
overrideprotected

Definition at line 444 of file freecarrier3d.cpp.

◆ getGainData()

const LazyData< Tensor2< double > > plask::gain::freecarrier::FreeCarrierGainSolver3D::getGainData ( Gain::EnumType  what,
const shared_ptr< const MeshD< 3 > > &  dst_mesh,
double  wavelength,
InterpolationMethod  interp = INTERPOLATION_DEFAULT 
)
overrideprotected

Definition at line 387 of file freecarrier3d.cpp.

Friends And Related Symbol Documentation

◆ ActiveRegionMesh

Definition at line 66 of file freecarrier3d.hpp.


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