PLaSK library
Loading...
Searching...
No Matches
plask::gain::freecarrier::FreeCarrierGainSolver< BaseT > Struct Template Referenceabstract

Gain solver using Fermi Golden Rule. More...

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

Inheritance diagram for plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >:
[legend]
Collaboration diagram for plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >:
[legend]

Classes

struct  ActiveRegionInfo
 Structure containing information about each active region. More...
 
struct  ActiveRegionParams
 Structure containing active region data for current used. More...
 
struct  Level
 Data for energy level. More...
 

Public Types

enum  WhichLevel : size_t { EL = EnergyLevels::ELECTRONS , HH = EnergyLevels::HEAVY_HOLES , LH = EnergyLevels::LIGHT_HOLES }
 Which level to compute. More...
 
enum  { DIM = GeometryType::DIM }
 
typedef BaseT::SpaceType GeometryType
 
typedef GainSpectrum< BaseT > GainSpectrumType
 

Public Member Functions

 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< doublegetGain0 (double hw, double Fc, double Fv, double T, double nr, const ActiveRegionParams &params) const
 Find gain before convolution.
 
Tensor2< doublegetGain (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< BaseT > > getGainSpectrum (const Vec< DIM > &point)
 

Public Attributes

std::vector< ActiveRegionInforegions
 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< ActiveRegionParamsparams0
 Reference active region params.
 
bool quick_levels
 Are levels computed quickly based on estimates.
 

Protected Member Functions

virtual void detectActiveRegions ()=0
 Detect active regions.
 
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.
 
template<class F >
std::pair< double, doublefermi_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 Attributes

shared_ptr< MaterialsubstrateMaterial
 Substrate material.
 
bool explicitSubstrate = false
 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?
 

Friends

struct GainSpectrum< BaseT >
 

Detailed Description

template<typename BaseT>
struct plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >

Gain solver using Fermi Golden Rule.

Definition at line 31 of file freecarrier.hpp.

Member Typedef Documentation

◆ GainSpectrumType

template<typename BaseT >
typedef GainSpectrum<BaseT> plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::GainSpectrumType

Definition at line 392 of file freecarrier.hpp.

◆ GeometryType

template<typename BaseT >
typedef BaseT::SpaceType plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::GeometryType

Definition at line 35 of file freecarrier.hpp.

Member Enumeration Documentation

◆ anonymous enum

template<typename BaseT >
anonymous enum
Enumerator
DIM 

Definition at line 37 of file freecarrier.hpp.

◆ WhichLevel

Which level to compute.

Enumerator
EL 
HH 
LH 

Definition at line 33 of file freecarrier.hpp.

Constructor & Destructor Documentation

◆ FreeCarrierGainSolver()

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

Definition at line 38 of file freecarrier.cpp.

◆ ~FreeCarrierGainSolver()

Definition at line 53 of file freecarrier.cpp.

Member Function Documentation

◆ detectActiveRegions()

template<typename BaseT >
virtual void plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::detectActiveRegions ( )
protectedpure virtual

Detect active regions.

Store information about them in the regions field.

Implemented in plask::gain::freecarrier::FreeCarrierGainSolver2D< GeometryT >, and plask::gain::freecarrier::FreeCarrierGainSolver3D.

◆ detEl()

template<typename BaseT >
double plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::detEl ( double  E,
const ActiveRegionParams params,
size_t  well = 0 
)
inline

Definition at line 324 of file freecarrier.hpp.

◆ detHh()

template<typename BaseT >
double plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::detHh ( double  E,
const ActiveRegionParams params,
size_t  well = 0 
)
inline

Definition at line 330 of file freecarrier.hpp.

◆ detLh()

template<typename BaseT >
double plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::detLh ( double  E,
const ActiveRegionParams params,
size_t  well = 0 
)
inline

Definition at line 336 of file freecarrier.hpp.

◆ estimateAboveLevels()

template<typename BaseT >
void plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::estimateAboveLevels ( WhichLevel  which,
ActiveRegionParams params 
) const
protected

Find levels estimates.

Detect range above the wells

Definition at line 412 of file freecarrier.cpp.

◆ estimateLevels()

template<typename BaseT >
void plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::estimateLevels ( )
protected

Estimate energy levels.

Definition at line 474 of file freecarrier.cpp.

◆ estimateWellLevels()

template<typename BaseT >
void plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::estimateWellLevels ( WhichLevel  which,
ActiveRegionParams params,
size_t  qw 
) const
protected

Find levels estimates.

Definition at line 344 of file freecarrier.cpp.

◆ fermi_bracket_and_solve()

template<typename BaseT >
template<class F >
std::pair< double, double > plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::fermi_bracket_and_solve ( F  f,
double  guess,
double  step,
boost::uintmax_t &  max_iter 
) const
inlineprotected

Walk the energy to bracket the Fermi level.

Definition at line 230 of file freecarrier.hpp.

◆ findFermiLevels()

template<typename BaseT >
void plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::findFermiLevels ( double Fc,
double Fv,
double  n,
double  T,
const ActiveRegionParams params 
) const

Compute quasi-Fermi levels for given concentration and temperature.

Definition at line 575 of file freecarrier.cpp.

◆ getEnergyLevels()

template<typename BaseT >
virtual const LazyData< std::vector< double > > plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::getEnergyLevels ( EnergyLevels::EnumType  which,
const shared_ptr< const MeshD< DIM > > &  dst_mesh,
InterpolationMethod  interp = INTERPOLATION_DEFAULT 
)
protectedpure virtual

Compute the energy levels.

Returns
energy levels for specified active region

◆ getGain()

template<typename BaseT >
Tensor2< double > plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::getGain ( double  hw,
double  Fc,
double  Fv,
double  T,
double  nr,
const ActiveRegionParams params 
) const

Find gain after convolution.

Definition at line 634 of file freecarrier.cpp.

◆ getGain0()

template<typename BaseT >
Tensor2< double > plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::getGain0 ( double  hw,
double  Fc,
double  Fv,
double  T,
double  nr,
const ActiveRegionParams params 
) const

Find gain before convolution.

Definition at line 597 of file freecarrier.cpp.

◆ getGainData()

template<typename BaseT >
virtual const LazyData< Tensor2< double > > plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::getGainData ( Gain::EnumType  what,
const shared_ptr< const MeshD< DIM > > &  dst_mesh,
double  wavelength,
InterpolationMethod  interp = INTERPOLATION_DEFAULT 
)
protectedpure virtual

Compute the gain on the mesh.

This method is called by gain provider.

Parameters
whatwhat to return (gain or its carriers derivative)
dst_meshdestination mesh
wavelengthwavelength to compute gain for
interpinterpolation method
Returns
gain distribution

◆ getGainSpectrum()

template<typename BaseT >
shared_ptr< GainSpectrum< BaseT > > plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::getGainSpectrum ( const Vec< DIM > &  point)
inline

Definition at line 387 of file freecarrier.hpp.

◆ getLifeTime()

template<typename BaseT >
double plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::getLifeTime ( ) const
inline

Definition at line 370 of file freecarrier.hpp.

◆ getMatrixElem()

template<typename BaseT >
double plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::getMatrixElem ( ) const
inline

Definition at line 373 of file freecarrier.hpp.

◆ getN()

template<typename BaseT >
double plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::getN ( double  F,
double  T,
const ActiveRegionParams params 
) const

Compute concentration for electron quasi-Fermi level.

Definition at line 537 of file freecarrier.cpp.

◆ getP()

template<typename BaseT >
double plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::getP ( double  F,
double  T,
const ActiveRegionParams params 
) const

Compute concentration for hole quasi-Fermi level.

Definition at line 552 of file freecarrier.cpp.

◆ getStrained()

template<typename BaseT >
bool plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::getStrained ( ) const
inline

Definition at line 379 of file freecarrier.hpp.

◆ getSubstrate()

template<typename BaseT >
shared_ptr< Material > plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::getSubstrate ( ) const
inline

Get substrate material.

Definition at line 345 of file freecarrier.hpp.

◆ getT0()

template<typename BaseT >
double plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::getT0 ( ) const
inline

Definition at line 364 of file freecarrier.hpp.

◆ level() [1/3]

template<typename BaseT >
double plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::level ( WhichLevel  which,
double  E,
const ActiveRegionParams params 
) const
inlineprotected

Definition at line 214 of file freecarrier.hpp.

◆ level() [2/3]

template<typename BaseT >
double plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::level ( WhichLevel  which,
double  E,
const ActiveRegionParams params,
size_t  start,
size_t  stop 
) const
protected

Compute determinant for energy levels.

Definition at line 284 of file freecarrier.cpp.

◆ level() [3/3]

template<typename BaseT >
double plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::level ( WhichLevel  which,
double  E,
const ActiveRegionParams params,
size_t  well 
) const
inlineprotected

Definition at line 218 of file freecarrier.hpp.

◆ loadConfiguration()

template<typename BaseT >
void plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::loadConfiguration ( plask::XMLReader reader,
plask::Manager manager 
)
override

Definition at line 58 of file freecarrier.cpp.

◆ onInitialize()

template<typename BaseT >
void plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::onInitialize ( )
overrideprotected

Initialize the solver.

Definition at line 78 of file freecarrier.cpp.

◆ onInputChange()

template<typename BaseT >
void plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::onInputChange ( ReceiverBase ,
ReceiverBase::ChangeReason   
)
inlineprotected

Notify that gain was changed.

Definition at line 293 of file freecarrier.hpp.

◆ onInvalidate()

template<typename BaseT >
void plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::onInvalidate ( )
overrideprotected

Invalidate the gain.

Definition at line 85 of file freecarrier.cpp.

◆ setLifeTime()

template<typename BaseT >
void plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::setLifeTime ( double  iLifeTime)
inline

Definition at line 371 of file freecarrier.hpp.

◆ setMatrixElem()

template<typename BaseT >
void plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::setMatrixElem ( double  iMatrixElem)
inline

Definition at line 374 of file freecarrier.hpp.

◆ setStrained()

template<typename BaseT >
void plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::setStrained ( bool  value)
inline

Definition at line 380 of file freecarrier.hpp.

◆ setSubstrate()

template<typename BaseT >
void plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::setSubstrate ( shared_ptr< Material material)
inline

Set substrate material.

Definition at line 348 of file freecarrier.hpp.

◆ setT0()

template<typename BaseT >
void plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::setT0 ( double  T)
inline

Definition at line 365 of file freecarrier.hpp.

Friends And Related Symbol Documentation

◆ GainSpectrum< BaseT >

template<typename BaseT >
friend struct GainSpectrum< BaseT >
friend

Definition at line 380 of file freecarrier.hpp.

Member Data Documentation

◆ explicitSubstrate

template<typename BaseT >
bool plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::explicitSubstrate = false
protected

Is substrate material explicitly set?

Definition at line 203 of file freecarrier.hpp.

◆ inBandEdges

Receiver for band edges.

Definition at line 181 of file freecarrier.hpp.

◆ inCarriersConcentration

Receiver for carriers concentration in the active region.

Definition at line 178 of file freecarrier.hpp.

◆ inFermiLevels

Receiver for quasi Fermi levels.

Definition at line 184 of file freecarrier.hpp.

◆ inTemperature

Receiver for temperature.

Definition at line 175 of file freecarrier.hpp.

◆ levelsep

template<typename BaseT >
double plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::levelsep
protected

Minimum separation between distinct levels.

Definition at line 279 of file freecarrier.hpp.

◆ lifetime

template<typename BaseT >
double plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::lifetime
protected

Stimulated emission lifetime [ps].

Definition at line 273 of file freecarrier.hpp.

◆ matrixelem

template<typename BaseT >
double plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::matrixelem
protected

Optical matrix element [m0*eV].

Definition at line 274 of file freecarrier.hpp.

◆ outEnergyLevels

template<typename BaseT >
ProviderFor<EnergyLevels,GeometryType>::Delegate plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::outEnergyLevels

Provider for energy levels.

Definition at line 190 of file freecarrier.hpp.

◆ outGain

Provider for gain distribution.

Definition at line 187 of file freecarrier.hpp.

◆ params0

template<typename BaseT >
std::vector<ActiveRegionParams> plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::params0

Reference active region params.

Definition at line 319 of file freecarrier.hpp.

◆ quick_levels

template<typename BaseT >
bool plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::quick_levels

Are levels computed quickly based on estimates.

Definition at line 321 of file freecarrier.hpp.

◆ regions

template<typename BaseT >
std::vector<ActiveRegionInfo> plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::regions

List of active regions.

Definition at line 172 of file freecarrier.hpp.

◆ strained

template<typename BaseT >
bool plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::strained
protected

Consider strain in QW?

Definition at line 281 of file freecarrier.hpp.

◆ substrateMaterial

template<typename BaseT >
shared_ptr<Material> plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::substrateMaterial
protected

Substrate material.

Definition at line 200 of file freecarrier.hpp.

◆ T0

template<typename BaseT >
double plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::T0
protected

Temperature used for compiting level estimates.

Definition at line 276 of file freecarrier.hpp.


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