PLaSK library

Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | Friends | List of all members
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< Material > | getSubstrate () 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< BaseT > > | getGainSpectrum (const Vec< DIM > &point)

## Public Attributes
std::vector< ActiveRegionInfo > | regions
| List of active regions.
ReceiverFor< Temperature, GeometryType > | inTemperature
| Receiver for temperature.
ReceiverFor< CarriersConcentration, GeometryType > | inCarriersConcentration
| Receiver for carriers concentration in the active region.
ReceiverFor< BandEdges, GeometryType > | inBandEdges
| Receiver for band edges.
ReceiverFor< FermiLevels, GeometryType > | inFermiLevels
| 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 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, 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 Attributes
shared_ptr< Material > | substrateMaterial
| 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

template<typename BaseT >

enum plask::gain::freecarrier::FreeCarrierGainSolver::WhichLevel : size_t

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()

template<typename BaseT >

plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::~FreeCarrierGainSolver | ( |  | ) |
| virtual

Definition at line 53 of file freecarrier.cpp.

## Member Function Documentation

## ◆ detectActiveRegions()

template<typename BaseT >

virtual void plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::detectActiveRegions | ( |  | ) |
| protected pure 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
| inline protected

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`
| ) |  |
| protected pure 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`
| ) |  |
| protected pure virtual

Compute the gain on the mesh.

This method is called by gain provider.

Parameters

  what | what to return (gain or its carriers derivative)
  dst_mesh | destination mesh
  wavelength | wavelength to compute gain for
  interp | interpolation 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
| inline protected

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
| inline protected

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 | ( |  | ) |
| override protected

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 |
| ) |  |
| inline protected

Notify that gain was changed.

Definition at line 293 of file freecarrier.hpp.

## ◆ onInvalidate()

template<typename BaseT >

void plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::onInvalidate | ( |  | ) |
| override protected

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

template<typename BaseT >

ReceiverFor<BandEdges, GeometryType> plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::inBandEdges

Receiver for band edges.

Definition at line 181 of file freecarrier.hpp.

## ◆ inCarriersConcentration

template<typename BaseT >

ReceiverFor<CarriersConcentration, GeometryType> plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::inCarriersConcentration

Receiver for carriers concentration in the active region.

Definition at line 178 of file freecarrier.hpp.

## ◆ inFermiLevels

template<typename BaseT >

ReceiverFor<FermiLevels, GeometryType> plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::inFermiLevels

Receiver for quasi Fermi levels.

Definition at line 184 of file freecarrier.hpp.

## ◆ inTemperature

template<typename BaseT >

ReceiverFor<Temperature, GeometryType> plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::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

template<typename BaseT >

ProviderFor<Gain,GeometryType>::Delegate plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::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:

- solvers/gain/freecarrier/freecarrier.hpp
- solvers/gain/freecarrier/freecarrier.cpp