PLaSK library
|
Gain solver using Fermi Golden Rule. More...
#include <solvers/gain/freecarrier/freecarrier.hpp>
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 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 ¶ms, size_t start, size_t stop) const |
Compute determinant for energy levels. | |
double | level (WhichLevel which, double E, const ActiveRegionParams ¶ms) const |
double | level (WhichLevel which, double E, const ActiveRegionParams ¶ms, size_t well) const |
void | estimateWellLevels (WhichLevel which, ActiveRegionParams ¶ms, size_t qw) const |
Find levels estimates. | |
void | estimateAboveLevels (WhichLevel which, ActiveRegionParams ¶ms) 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 > |
Gain solver using Fermi Golden Rule.
Definition at line 31 of file freecarrier.hpp.
typedef GainSpectrum<BaseT> plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::GainSpectrumType |
Definition at line 392 of file freecarrier.hpp.
typedef BaseT::SpaceType plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::GeometryType |
Definition at line 35 of file freecarrier.hpp.
Enumerator | |
---|---|
DIM |
Definition at line 37 of file freecarrier.hpp.
enum plask::gain::freecarrier::FreeCarrierGainSolver::WhichLevel : size_t |
plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::FreeCarrierGainSolver | ( | const std::string & | name = "" | ) |
Definition at line 38 of file freecarrier.cpp.
|
virtual |
Definition at line 53 of file freecarrier.cpp.
|
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.
|
inline |
Definition at line 324 of file freecarrier.hpp.
|
inline |
Definition at line 330 of file freecarrier.hpp.
|
inline |
Definition at line 336 of file freecarrier.hpp.
|
protected |
|
protected |
Estimate energy levels.
Definition at line 474 of file freecarrier.cpp.
|
protected |
Find levels estimates.
Definition at line 344 of file freecarrier.cpp.
|
inlineprotected |
Walk the energy to bracket the Fermi level.
Definition at line 230 of file freecarrier.hpp.
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.
|
protectedpure virtual |
Compute the energy levels.
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.
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.
|
protectedpure virtual |
Compute the gain on the mesh.
This method is called by gain provider.
what | what to return (gain or its carriers derivative) |
dst_mesh | destination mesh |
wavelength | wavelength to compute gain for |
interp | interpolation method |
|
inline |
Definition at line 387 of file freecarrier.hpp.
|
inline |
Definition at line 370 of file freecarrier.hpp.
|
inline |
Definition at line 373 of file freecarrier.hpp.
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.
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.
|
inline |
Definition at line 379 of file freecarrier.hpp.
|
inline |
Get substrate material.
Definition at line 345 of file freecarrier.hpp.
|
inline |
Definition at line 364 of file freecarrier.hpp.
|
inlineprotected |
Definition at line 214 of file freecarrier.hpp.
|
protected |
Compute determinant for energy levels.
Definition at line 284 of file freecarrier.cpp.
|
inlineprotected |
Definition at line 218 of file freecarrier.hpp.
|
override |
Definition at line 58 of file freecarrier.cpp.
|
overrideprotected |
Initialize the solver.
Definition at line 78 of file freecarrier.cpp.
|
inlineprotected |
Notify that gain was changed.
Definition at line 293 of file freecarrier.hpp.
|
overrideprotected |
Invalidate the gain.
Definition at line 85 of file freecarrier.cpp.
|
inline |
Definition at line 371 of file freecarrier.hpp.
|
inline |
Definition at line 374 of file freecarrier.hpp.
|
inline |
Definition at line 380 of file freecarrier.hpp.
|
inline |
Set substrate material.
Definition at line 348 of file freecarrier.hpp.
|
inline |
Definition at line 365 of file freecarrier.hpp.
|
friend |
Definition at line 380 of file freecarrier.hpp.
|
protected |
Is substrate material explicitly set?
Definition at line 203 of file freecarrier.hpp.
ReceiverFor<BandEdges, GeometryType> plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::inBandEdges |
Receiver for band edges.
Definition at line 181 of file freecarrier.hpp.
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.
ReceiverFor<FermiLevels, GeometryType> plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::inFermiLevels |
Receiver for quasi Fermi levels.
Definition at line 184 of file freecarrier.hpp.
ReceiverFor<Temperature, GeometryType> plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::inTemperature |
Receiver for temperature.
Definition at line 175 of file freecarrier.hpp.
|
protected |
Minimum separation between distinct levels.
Definition at line 279 of file freecarrier.hpp.
|
protected |
Stimulated emission lifetime [ps].
Definition at line 273 of file freecarrier.hpp.
|
protected |
Optical matrix element [m0*eV].
Definition at line 274 of file freecarrier.hpp.
ProviderFor<EnergyLevels,GeometryType>::Delegate plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::outEnergyLevels |
Provider for energy levels.
Definition at line 190 of file freecarrier.hpp.
ProviderFor<Gain,GeometryType>::Delegate plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::outGain |
Provider for gain distribution.
Definition at line 187 of file freecarrier.hpp.
std::vector<ActiveRegionParams> plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::params0 |
Reference active region params.
Definition at line 319 of file freecarrier.hpp.
bool plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::quick_levels |
Are levels computed quickly based on estimates.
Definition at line 321 of file freecarrier.hpp.
std::vector<ActiveRegionInfo> plask::gain::freecarrier::FreeCarrierGainSolver< BaseT >::regions |
List of active regions.
Definition at line 172 of file freecarrier.hpp.
|
protected |
Consider strain in QW?
Definition at line 281 of file freecarrier.hpp.
|
protected |
Substrate material.
Definition at line 200 of file freecarrier.hpp.
|
protected |
Temperature used for compiting level estimates.
Definition at line 276 of file freecarrier.hpp.