![]() |
Garfield 0.3
Toolkit for the detailed simulation of particle detectors based on ionization measurement in gases and semiconductors
|
Solid crystalline silicon More...
#include <MediumSilicon.hh>
Classes | |
struct | Band |
Public Member Functions | |
MediumSilicon () | |
Constructor. | |
virtual | ~MediumSilicon () |
Destructor. | |
bool | IsSemiconductor () const override |
void | SetDoping (const char type, const double c) |
Set doping concentration [cm-3] and type ('i', 'n', 'p'). | |
void | GetDoping (char &type, double &c) const |
Retrieve doping concentration. | |
void | SetTrapCrossSection (const double ecs, const double hcs) |
Trapping cross-sections for electrons and holes. | |
void | SetTrapDensity (const double n) |
Trap density [cm-3], by default set to zero. | |
void | SetTrappingTime (const double etau, const double htau) |
Set time constant for trapping of electrons and holes [ns]. | |
void | SetLowFieldMobility (const double mue, const double muh) |
Specify the low field values of the electron and hole mobilities. | |
void | SetLatticeMobilityModel (const std::string &model) |
Set the parameterisation to be used for calculating the lattice mobility model. | |
void | SetLatticeMobilityModelMinimos () |
Calculate the lattice mobility using the Minimos model. | |
void | SetLatticeMobilityModelSentaurus () |
Calculate the lattice mobility using the Sentaurus model (default). | |
void | SetLatticeMobilityModelReggiani () |
Calculate the lattice mobility using the Reggiani model. | |
void | SetDopingMobilityModelMinimos () |
Use the Minimos model for the doping-dependence of the mobility. | |
void | SetDopingMobilityModelMasetti () |
Use the Masetti model for the doping-dependence of the mobility (default). | |
void | SetSaturationVelocity (const double vsate, const double vsath) |
Specify the saturation velocities of electrons and holes. | |
void | SetSaturationVelocityModelMinimos () |
Calculate the saturation velocities using the Minimos model. | |
void | SetSaturationVelocityModelCanali () |
Calculate the saturation velocities using the Canali model (default). | |
void | SetSaturationVelocityModelReggiani () |
Calculate the saturation velocities using the Reggiani model. | |
void | SetHighFieldMobilityModel (const std::string &model) |
Set the parameterisation to be used for the drift velocity as function of the electric field. | |
void | SetHighFieldMobilityModelMinimos () |
Parameterize the high-field mobility using the Minimos model. | |
void | SetHighFieldMobilityModelCanali () |
Parameterize the high-field mobility using the Canali model (default). | |
void | SetHighFieldMobilityModelReggiani () |
Parameterize the high-field mobility using the Reggiani model. | |
void | SetHighFieldMobilityModelConstant () |
Make the velocity proportional to the electric field (no saturation). | |
void | SetImpactIonisationModel (const std::string &model) |
Set the parameterisation to be used for calculating the impact ionisation coefficient. | |
void | SetImpactIonisationModelVanOverstraetenDeMan () |
Calculate α using the van Overstraeten-de Man model (default). | |
void | SetImpactIonisationModelGrant () |
Calculate α using the Grant model. | |
void | SetImpactIonisationModelMassey () |
Calculate α using the Massey model. | |
void | SetImpactIonisationModelOkutoCrowell () |
Calculate α using the Okuto-Crowell model. | |
void | SetDiffusionScaling (const double d) |
Apply a scaling factor to the diffusion coefficients. | |
bool | SetMaxElectronEnergy (const double e) |
double | GetMaxElectronEnergy () const |
bool | Initialise () |
void | EnableScatteringRateOutput (const bool on=true) |
void | EnableNonParabolicity (const bool on=true) |
void | EnableFullBandDensityOfStates (const bool on=true) |
void | EnableAnisotropy (const bool on=true) |
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 |
bool | ElectronTownsend (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha) override |
bool | ElectronAttachment (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta) override |
double | ElectronMobility () 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 |
bool | HoleTownsend (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha) override |
bool | HoleAttachment (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta) override |
double | HoleMobility () override |
double | GetElectronEnergy (const double px, const double py, const double pz, double &vx, double &vy, double &vz, const int band=0) override |
void | GetElectronMomentum (const double e, double &px, double &py, double &pz, int &band) override |
double | GetElectronNullCollisionRate (const int band) override |
double | GetElectronCollisionRate (const double e, const int band) override |
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 | ResetCollisionCounters () |
unsigned int | GetNumberOfElectronCollisions () const |
unsigned int | GetNumberOfLevels () const |
unsigned int | GetNumberOfElectronCollisions (const unsigned int level) const |
unsigned int | GetNumberOfElectronBands () const |
int | GetElectronBandPopulation (const int band) |
bool | GetOpticalDataRange (double &emin, double &emax, const unsigned int i=0) override |
bool | GetDielectricFunction (const double e, double &eps1, double &eps2, const unsigned int i=0) override |
void | ComputeSecondaries (const double e0, double &ee, double &eh) |
Private Types | |
enum class | LatticeMobility { Sentaurus = 0 , Minimos , Reggiani } |
enum class | DopingMobility { Minimos = 0 , Masetti } |
enum class | SaturationVelocity { Minimos = 0 , Canali , Reggiani } |
enum class | HighFieldMobility { Minimos = 0 , Canali , Reggiani , Constant } |
enum class | ImpactIonisation { VanOverstraeten = 0 , Grant , Massey , Okuto } |
Private Member Functions | |
bool | Update () |
void | UpdateLatticeMobility () |
void | UpdateDopingMobilityMinimos () |
void | UpdateDopingMobilityMasetti () |
void | UpdateSaturationVelocity () |
void | UpdateHighFieldMobilityCanali () |
void | UpdateImpactIonisation () |
double | ElectronMobility (const double e) const |
double | ElectronAlpha (const double e) const |
double | HoleMobility (const double e) const |
double | HoleAlpha (const double e) const |
bool | LoadOpticalData (const std::string &filename) |
bool | ElectronScatteringRates () |
bool | HoleScatteringRates () |
bool | AcousticScatteringRates (const double rho, const double kbt, const double dp, Band &band) |
bool | OpticalScatteringRates (const double rho, const double kbt, const double dtk, const double eph, Band &band) |
bool | IntervalleyScatteringRates (const double rho, const double kbt, const double dtk, const double eph, Band &bndI, Band &bndF, const double zF, const int collType) |
bool | IonisationRates (const std::vector< double > &p, const std::vector< double > ð, const std::vector< double > &b, Band &band) |
bool | ImpurityScatteringRates (const double kbt, Band &band) |
void | InitialiseDOS () |
void | ComputeDOS () |
Private Attributes | |
std::mutex | m_mutex |
double | m_diffScale = 1. |
double | m_bandGap = 1.12 |
char | m_dopingType = 'i' |
double | m_cDop = 0. |
double | m_eMuLat = 1.35e-6 |
double | m_hMuLat = 0.45e-6 |
double | m_eMu = 1.35e-6 |
double | m_hMu = 0.45e-6 |
double | m_eBetaCanali = 1.109 |
double | m_hBetaCanali = 1.213 |
double | m_eBetaCanaliInv = 1. / 1.109 |
double | m_hBetaCanaliInv = 1. / 1.213 |
double | m_eVs = 1.02e-2 |
double | m_hVs = 0.72e-2 |
double | m_eRs = 1.35e-6 / 1.02e-2 |
double | m_hRs = 0.45e-6 / 0.72e-2 |
double | m_eHallFactor = 1.15 |
double | m_hHallFactor = 0.7 |
double | m_eTrapCs = 1.e-15 |
double | m_hTrapCs = 1.e-15 |
double | m_eTrapDensity = 0. |
double | m_hTrapDensity = 0. |
double | m_eTrapTime = 0. |
double | m_hTrapTime = 0. |
double | m_eTrapRate = 0. |
double | m_hTrapRate = 0. |
int | m_trappingModel = 0 |
double | m_eImpactA0 = 3.318e5 |
double | m_eImpactA1 = 0.703e6 |
double | m_eImpactA2 = 0. |
double | m_eImpactB0 = 1.135e6 |
double | m_eImpactB1 = 1.231e6 |
double | m_eImpactB2 = 0. |
double | m_hImpactA0 = 1.582e6 |
double | m_hImpactA1 = 0.671e6 |
double | m_hImpactB0 = 2.036e6 |
double | m_hImpactB1 = 1.693e6 |
bool | m_hasUserMobility = false |
bool | m_hasUserSaturationVelocity = false |
LatticeMobility | m_latticeMobilityModel = LatticeMobility::Sentaurus |
DopingMobility | m_dopingMobilityModel = DopingMobility::Masetti |
SaturationVelocity | m_saturationVelocityModel = SaturationVelocity::Canali |
HighFieldMobility | m_highFieldMobilityModel = HighFieldMobility::Canali |
ImpactIonisation | m_impactIonisationModel = ImpactIonisation::VanOverstraeten |
bool | m_cfOutput = false |
bool | m_nonParabolic = true |
bool | m_fullBandDos = false |
bool | m_anisotropic = true |
std::array< Band, 3 > | m_cb |
std::vector< size_t > | m_cbIndex |
Band | m_vb |
unsigned int | m_nCollElectronAcoustic = 0 |
unsigned int | m_nCollElectronOptical = 0 |
unsigned int | m_nCollElectronIntervalley = 0 |
unsigned int | m_nCollElectronImpurity = 0 |
unsigned int | m_nCollElectronIonisation = 0 |
std::vector< unsigned int > | m_nCollElectronDetailed |
std::vector< unsigned int > | m_nCollElectronBand |
double | m_eStepDos = 0. |
double | m_invStepDos = 0. |
std::vector< double > | m_fbDosV |
std::vector< double > | m_fbDosC |
double | m_fbDosMaxV |
double | m_fbDosMaxC |
std::string | m_opticalDataFile = "OpticalData_Si.txt" |
std::vector< double > | m_egamma |
std::vector< double > | m_eps1 |
std::vector< double > | m_eps2 |
Solid crystalline silicon
Definition at line 14 of file MediumSilicon.hh.
|
strongprivate |
Enumerator | |
---|---|
Minimos | |
Masetti |
Definition at line 181 of file MediumSilicon.hh.
|
strongprivate |
Enumerator | |
---|---|
Minimos | |
Canali | |
Reggiani | |
Constant |
Definition at line 183 of file MediumSilicon.hh.
|
strongprivate |
Enumerator | |
---|---|
VanOverstraeten | |
Grant | |
Massey | |
Okuto |
Definition at line 184 of file MediumSilicon.hh.
|
strongprivate |
Enumerator | |
---|---|
Sentaurus | |
Minimos | |
Reggiani |
Definition at line 180 of file MediumSilicon.hh.
|
strongprivate |
Enumerator | |
---|---|
Minimos | |
Canali | |
Reggiani |
Definition at line 182 of file MediumSilicon.hh.
Garfield::MediumSilicon::MediumSilicon | ( | ) |
Constructor.
|
inlinevirtual |
|
private |
|
private |
void Garfield::MediumSilicon::ComputeSecondaries | ( | const double | e0, |
double & | ee, | ||
double & | eh ) |
|
private |
|
override |
|
override |
|
inlineoverride |
Definition at line 128 of file MediumSilicon.hh.
|
private |
|
private |
|
override |
|
override |
|
inline |
Definition at line 116 of file MediumSilicon.hh.
|
inline |
Definition at line 113 of file MediumSilicon.hh.
|
inline |
Definition at line 112 of file MediumSilicon.hh.
|
inline |
Definition at line 111 of file MediumSilicon.hh.
|
override |
void Garfield::MediumSilicon::GetDoping | ( | char & | type, |
double & | c ) const |
Retrieve doping concentration.
int Garfield::MediumSilicon::GetElectronBandPopulation | ( | const int | band | ) |
|
override |
|
override |
|
override |
|
override |
|
inline |
Definition at line 105 of file MediumSilicon.hh.
unsigned int Garfield::MediumSilicon::GetNumberOfElectronBands | ( | ) | const |
unsigned int Garfield::MediumSilicon::GetNumberOfElectronCollisions | ( | ) | const |
unsigned int Garfield::MediumSilicon::GetNumberOfElectronCollisions | ( | const unsigned int | level | ) | const |
unsigned int Garfield::MediumSilicon::GetNumberOfLevels | ( | ) | const |
|
override |
|
private |
|
override |
|
inlineoverride |
Definition at line 140 of file MediumSilicon.hh.
|
private |
|
private |
|
override |
|
override |
|
private |
bool Garfield::MediumSilicon::Initialise | ( | ) |
|
private |
|
private |
|
private |
|
inlineoverride |
Definition at line 21 of file MediumSilicon.hh.
|
private |
|
private |
void Garfield::MediumSilicon::ResetCollisionCounters | ( | ) |
|
inline |
Apply a scaling factor to the diffusion coefficients.
Definition at line 101 of file MediumSilicon.hh.
void Garfield::MediumSilicon::SetDoping | ( | const char | type, |
const double | c ) |
Set doping concentration [cm-3] and type ('i', 'n', 'p').
void Garfield::MediumSilicon::SetDopingMobilityModelMasetti | ( | ) |
Use the Masetti model for the doping-dependence of the mobility (default).
void Garfield::MediumSilicon::SetDopingMobilityModelMinimos | ( | ) |
Use the Minimos model for the doping-dependence of the mobility.
void Garfield::MediumSilicon::SetHighFieldMobilityModel | ( | const std::string & | model | ) |
Set the parameterisation to be used for the drift velocity as function of the electric field.
The currently implemented models are
void Garfield::MediumSilicon::SetHighFieldMobilityModelCanali | ( | ) |
Parameterize the high-field mobility using the Canali model (default).
void Garfield::MediumSilicon::SetHighFieldMobilityModelConstant | ( | ) |
Make the velocity proportional to the electric field (no saturation).
void Garfield::MediumSilicon::SetHighFieldMobilityModelMinimos | ( | ) |
Parameterize the high-field mobility using the Minimos model.
void Garfield::MediumSilicon::SetHighFieldMobilityModelReggiani | ( | ) |
Parameterize the high-field mobility using the Reggiani model.
void Garfield::MediumSilicon::SetImpactIonisationModel | ( | const std::string & | model | ) |
Set the parameterisation to be used for calculating the impact ionisation coefficient.
The currently implemented models are
void Garfield::MediumSilicon::SetImpactIonisationModelGrant | ( | ) |
Calculate α using the Grant model.
void Garfield::MediumSilicon::SetImpactIonisationModelMassey | ( | ) |
Calculate α using the Massey model.
void Garfield::MediumSilicon::SetImpactIonisationModelOkutoCrowell | ( | ) |
Calculate α using the Okuto-Crowell model.
void Garfield::MediumSilicon::SetImpactIonisationModelVanOverstraetenDeMan | ( | ) |
Calculate α using the van Overstraeten-de Man model (default).
void Garfield::MediumSilicon::SetLatticeMobilityModel | ( | const std::string & | model | ) |
Set the parameterisation to be used for calculating the lattice mobility model.
The currently implemented models are
void Garfield::MediumSilicon::SetLatticeMobilityModelMinimos | ( | ) |
Calculate the lattice mobility using the Minimos model.
void Garfield::MediumSilicon::SetLatticeMobilityModelReggiani | ( | ) |
Calculate the lattice mobility using the Reggiani model.
void Garfield::MediumSilicon::SetLatticeMobilityModelSentaurus | ( | ) |
Calculate the lattice mobility using the Sentaurus model (default).
void Garfield::MediumSilicon::SetLowFieldMobility | ( | const double | mue, |
const double | muh ) |
Specify the low field values of the electron and hole mobilities.
bool Garfield::MediumSilicon::SetMaxElectronEnergy | ( | const double | e | ) |
void Garfield::MediumSilicon::SetSaturationVelocity | ( | const double | vsate, |
const double | vsath ) |
Specify the saturation velocities of electrons and holes.
void Garfield::MediumSilicon::SetSaturationVelocityModelCanali | ( | ) |
Calculate the saturation velocities using the Canali model (default).
void Garfield::MediumSilicon::SetSaturationVelocityModelMinimos | ( | ) |
Calculate the saturation velocities using the Minimos model.
void Garfield::MediumSilicon::SetSaturationVelocityModelReggiani | ( | ) |
Calculate the saturation velocities using the Reggiani model.
void Garfield::MediumSilicon::SetTrapCrossSection | ( | const double | ecs, |
const double | hcs ) |
Trapping cross-sections for electrons and holes.
void Garfield::MediumSilicon::SetTrapDensity | ( | const double | n | ) |
Trap density [cm-3], by default set to zero.
void Garfield::MediumSilicon::SetTrappingTime | ( | const double | etau, |
const double | htau ) |
Set time constant for trapping of electrons and holes [ns].
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
Definition at line 254 of file MediumSilicon.hh.
|
private |
Definition at line 191 of file MediumSilicon.hh.
|
private |
Definition at line 292 of file MediumSilicon.hh.
|
private |
Definition at line 293 of file MediumSilicon.hh.
|
private |
Definition at line 195 of file MediumSilicon.hh.
|
private |
Definition at line 251 of file MediumSilicon.hh.
|
private |
Definition at line 189 of file MediumSilicon.hh.
|
private |
Definition at line 245 of file MediumSilicon.hh.
|
private |
Definition at line 193 of file MediumSilicon.hh.
|
private |
Definition at line 204 of file MediumSilicon.hh.
|
private |
Definition at line 206 of file MediumSilicon.hh.
|
private |
Definition at line 315 of file MediumSilicon.hh.
|
private |
Definition at line 215 of file MediumSilicon.hh.
|
private |
Definition at line 230 of file MediumSilicon.hh.
|
private |
Definition at line 231 of file MediumSilicon.hh.
|
private |
Definition at line 232 of file MediumSilicon.hh.
|
private |
Definition at line 233 of file MediumSilicon.hh.
|
private |
Definition at line 234 of file MediumSilicon.hh.
|
private |
Definition at line 235 of file MediumSilicon.hh.
|
private |
Definition at line 201 of file MediumSilicon.hh.
|
private |
Definition at line 198 of file MediumSilicon.hh.
|
private |
Definition at line 316 of file MediumSilicon.hh.
|
private |
Definition at line 317 of file MediumSilicon.hh.
|
private |
Definition at line 212 of file MediumSilicon.hh.
|
private |
Definition at line 307 of file MediumSilicon.hh.
|
private |
Definition at line 219 of file MediumSilicon.hh.
|
private |
Definition at line 221 of file MediumSilicon.hh.
|
private |
Definition at line 225 of file MediumSilicon.hh.
|
private |
Definition at line 223 of file MediumSilicon.hh.
|
private |
Definition at line 209 of file MediumSilicon.hh.
|
private |
Definition at line 310 of file MediumSilicon.hh.
|
private |
Definition at line 311 of file MediumSilicon.hh.
|
private |
Definition at line 311 of file MediumSilicon.hh.
|
private |
Definition at line 309 of file MediumSilicon.hh.
|
private |
Definition at line 253 of file MediumSilicon.hh.
|
private |
Definition at line 242 of file MediumSilicon.hh.
|
private |
Definition at line 243 of file MediumSilicon.hh.
|
private |
Definition at line 205 of file MediumSilicon.hh.
|
private |
Definition at line 207 of file MediumSilicon.hh.
|
private |
Definition at line 216 of file MediumSilicon.hh.
|
private |
Definition at line 247 of file MediumSilicon.hh.
|
private |
Definition at line 236 of file MediumSilicon.hh.
|
private |
Definition at line 237 of file MediumSilicon.hh.
|
private |
Definition at line 238 of file MediumSilicon.hh.
|
private |
Definition at line 239 of file MediumSilicon.hh.
|
private |
Definition at line 202 of file MediumSilicon.hh.
|
private |
Definition at line 199 of file MediumSilicon.hh.
|
private |
Definition at line 213 of file MediumSilicon.hh.
|
private |
Definition at line 220 of file MediumSilicon.hh.
|
private |
Definition at line 222 of file MediumSilicon.hh.
|
private |
Definition at line 226 of file MediumSilicon.hh.
|
private |
Definition at line 224 of file MediumSilicon.hh.
|
private |
Definition at line 210 of file MediumSilicon.hh.
|
private |
Definition at line 248 of file MediumSilicon.hh.
|
private |
Definition at line 308 of file MediumSilicon.hh.
|
private |
Definition at line 244 of file MediumSilicon.hh.
|
private |
Definition at line 186 of file MediumSilicon.hh.
|
private |
Definition at line 298 of file MediumSilicon.hh.
|
private |
Definition at line 304 of file MediumSilicon.hh.
|
private |
Definition at line 303 of file MediumSilicon.hh.
|
private |
Definition at line 301 of file MediumSilicon.hh.
|
private |
Definition at line 300 of file MediumSilicon.hh.
|
private |
Definition at line 302 of file MediumSilicon.hh.
|
private |
Definition at line 299 of file MediumSilicon.hh.
|
private |
Definition at line 252 of file MediumSilicon.hh.
|
private |
Definition at line 314 of file MediumSilicon.hh.
|
private |
Definition at line 246 of file MediumSilicon.hh.
|
private |
Definition at line 227 of file MediumSilicon.hh.
|
private |
Definition at line 295 of file MediumSilicon.hh.