1#ifndef G_MEDIUM_SILICON_H
2#define G_MEDIUM_SILICON_H
120 const double bx,
const double by,
const double bz,
121 double& vx,
double& vy,
double& vz)
override;
123 const double bx,
const double by,
const double bz,
124 double& alpha)
override;
126 const double bx,
const double by,
const double bz,
127 double& eta)
override;
132 const double bx,
const double by,
const double bz,
133 double& vx,
double& vy,
double& vz)
override;
135 const double bx,
const double by,
const double bz,
136 double& alpha)
override;
138 const double bx,
const double by,
const double bz,
139 double& eta)
override;
144 double& vx,
double& vy,
double& vz,
145 const int band = 0)
override;
156 double& dx,
double& dy,
double& dz,
157 std::vector<Secondary>& secondaries,
173 const unsigned int i = 0)
override;
175 const unsigned int i = 0)
override;
283 std::vector<std::vector<double> >
cf;
342 const double dp,
Band& band);
344 const double dtk,
const double eph,
Band& band);
346 const double dtk,
const double eph,
347 Band& bndI,
Band& bndF,
const double zF,
350 const std::vector<double>& eth,
351 const std::vector<double>& b,
Band& band);
HighFieldMobility m_highFieldMobilityModel
virtual ~MediumSilicon()
Destructor.
double HoleMobility(const double e) const
void SetHighFieldMobilityModel(const std::string &model)
Set the parameterisation to be used for the drift velocity as function of the electric field.
void EnableNonParabolicity(const bool on=true)
std::vector< double > m_eps1
void UpdateHighFieldMobilityCanali()
bool AcousticScatteringRates(const double rho, const double kbt, const double dp, Band &band)
bool GetDielectricFunction(const double e, double &eps1, double &eps2, const unsigned int i=0) override
double ElectronAlpha(const double e) const
SaturationVelocity m_saturationVelocityModel
void SetLatticeMobilityModelReggiani()
Calculate the lattice mobility using the Reggiani model.
std::vector< double > m_fbDosV
unsigned int m_nCollElectronAcoustic
std::vector< double > m_fbDosC
double HoleAlpha(const double e) const
bool ElectronScatteringRates()
void SetImpactIonisationModel(const std::string &model)
Set the parameterisation to be used for calculating the impact ionisation coefficient.
bool IonisationRates(const std::vector< double > &p, const std::vector< double > ð, const std::vector< double > &b, Band &band)
void SetDoping(const char type, const double c)
Set doping concentration [cm-3] and type ('i', 'n', 'p').
void SetImpactIonisationModelOkutoCrowell()
Calculate α using the Okuto-Crowell model.
void GetDoping(char &type, double &c) const
Retrieve doping concentration.
bool ElectronTownsend(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha) override
void SetHighFieldMobilityModelReggiani()
Parameterize the high-field mobility using the Reggiani model.
double GetElectronCollisionRate(const double e, const int band) override
bool HoleVelocity(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &vx, double &vy, double &vz) override
unsigned int GetNumberOfLevels() const
void SetSaturationVelocityModelReggiani()
Calculate the saturation velocities using the Reggiani model.
bool ElectronAttachment(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta) override
bool m_hasUserSaturationVelocity
void SetDopingMobilityModelMasetti()
Use the Masetti model for the doping-dependence of the mobility (default).
std::vector< unsigned int > m_nCollElectronBand
void SetTrapDensity(const double n)
Trap density [cm-3], by default set to zero.
unsigned int m_nCollElectronIntervalley
bool LoadOpticalData(const std::string &filename)
std::vector< unsigned int > m_nCollElectronDetailed
void SetHighFieldMobilityModelMinimos()
Parameterize the high-field mobility using the Minimos model.
MediumSilicon()
Constructor.
void SetSaturationVelocity(const double vsate, const double vsath)
Specify the saturation velocities of electrons and holes.
bool ElectronVelocity(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &vx, double &vy, double &vz) override
void UpdateSaturationVelocity()
void ComputeSecondaries(const double e0, double &ee, double &eh)
void ResetCollisionCounters()
LatticeMobility m_latticeMobilityModel
double HoleMobility() override
void EnableAnisotropy(const bool on=true)
bool HoleScatteringRates()
unsigned int m_nCollElectronIonisation
std::string m_opticalDataFile
std::array< Band, 3 > m_cb
bool SetMaxElectronEnergy(const double e)
double ElectronMobility(const double e) const
bool HoleTownsend(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha) override
void SetHighFieldMobilityModelConstant()
Make the velocity proportional to the electric field (no saturation).
std::vector< double > m_eps2
std::vector< size_t > m_cbIndex
void SetLatticeMobilityModelSentaurus()
Calculate the lattice mobility using the Sentaurus model (default).
void SetSaturationVelocityModelCanali()
Calculate the saturation velocities using the Canali model (default).
void SetHighFieldMobilityModelCanali()
Parameterize the high-field mobility using the Canali model (default).
void GetElectronMomentum(const double e, double &px, double &py, double &pz, int &band) override
DopingMobility m_dopingMobilityModel
void SetImpactIonisationModelVanOverstraetenDeMan()
Calculate α using the van Overstraeten-de Man model (default).
void SetTrappingTime(const double etau, const double htau)
Set time constant for trapping of electrons and holes [ns].
void UpdateDopingMobilityMasetti()
void SetSaturationVelocityModelMinimos()
Calculate the saturation velocities using the Minimos model.
bool ImpurityScatteringRates(const double kbt, Band &band)
bool ElectronCollision(const double e, int &type, int &level, double &e1, double &dx, double &dy, double &dz, std::vector< Secondary > &secondaries, int &band) override
void SetLowFieldMobility(const double mue, const double muh)
Specify the low field values of the electron and hole mobilities.
bool HoleAttachment(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta) override
std::vector< double > m_egamma
double GetMaxElectronEnergy() const
double GetElectronEnergy(const double px, const double py, const double pz, double &vx, double &vy, double &vz, const int band=0) override
double ElectronMobility() override
void UpdateLatticeMobility()
unsigned int GetNumberOfElectronCollisions(const unsigned int level) const
unsigned int m_nCollElectronOptical
bool GetOpticalDataRange(double &emin, double &emax, const unsigned int i=0) override
double GetElectronNullCollisionRate(const int band) override
unsigned int m_nCollElectronImpurity
unsigned int GetNumberOfElectronCollisions() const
void SetLatticeMobilityModelMinimos()
Calculate the lattice mobility using the Minimos model.
bool IsSemiconductor() const override
ImpactIonisation m_impactIonisationModel
void SetTrapCrossSection(const double ecs, const double hcs)
Trapping cross-sections for electrons and holes.
void EnableScatteringRateOutput(const bool on=true)
void SetDiffusionScaling(const double d)
Apply a scaling factor to the diffusion coefficients.
int GetElectronBandPopulation(const int band)
void SetLatticeMobilityModel(const std::string &model)
Set the parameterisation to be used for calculating the lattice mobility model.
bool OpticalScatteringRates(const double rho, const double kbt, const double dtk, const double eph, Band &band)
void SetImpactIonisationModelGrant()
Calculate α using the Grant model.
void SetDopingMobilityModelMinimos()
Use the Minimos model for the doping-dependence of the mobility.
void UpdateDopingMobilityMinimos()
void EnableFullBandDensityOfStates(const bool on=true)
void SetImpactIonisationModelMassey()
Calculate α using the Massey model.
unsigned int GetNumberOfElectronBands() const
void UpdateImpactIonisation()
bool IntervalleyScatteringRates(const double rho, const double kbt, const double dtk, const double eph, Band &bndI, Band &bndF, const double zF, const int collType)
std::vector< int > scatType
std::vector< double > energyLoss
std::vector< double > dos
std::vector< std::vector< double > > cf
std::vector< double > cfTot