1#ifndef G_MEDIUM_SILICON_H
2#define G_MEDIUM_SILICON_H
20 void SetDoping(
const char type,
const double c);
21 void GetDoping(
char& type,
double& c)
const;
30 const double bx,
const double by,
const double bz,
31 double& vx,
double& vy,
double& vz);
33 const double bx,
const double by,
const double bz,
36 const double bx,
const double by,
const double bz,
39 bool HoleVelocity(
const double ex,
const double ey,
const double ez,
40 const double bx,
const double by,
const double bz,
41 double& vx,
double& vy,
double& vz);
42 bool HoleTownsend(
const double ex,
const double ey,
const double ez,
43 const double bx,
const double by,
const double bz,
45 bool HoleAttachment(
const double ex,
const double ey,
const double ez,
46 const double bx,
const double by,
const double bz,
97 double& vx,
double& vy,
double& vz,
109 double& dx,
double& dy,
double& dz,
int& nion,
110 int& ndxc,
int& band);
112 return m_ionProducts.size();
115 double& energy)
const;
134 const unsigned int i = 0);
136 const unsigned int i = 0);
141 static const int LatticeMobilityModelSentaurus = 0;
142 static const int LatticeMobilityModelMinimos = 1;
143 static const int LatticeMobilityModelReggiani = 2;
144 static const int DopingMobilityModelMinimos = 0;
145 static const int DopingMobilityModelMasetti = 1;
146 static const int SaturationVelocityModelMinimos = 0;
147 static const int SaturationVelocityModelCanali = 1;
148 static const int SaturationVelocityModelReggiani = 2;
149 static const int HighFieldMobilityModelMinimos = 0;
150 static const int HighFieldMobilityModelCanali = 1;
151 static const int HighFieldMobilityModelReggiani = 2;
152 static const int HighFieldMobilityModelConstant = 3;
153 static const int ImpactIonisationModelVanOverstraeten = 0;
154 static const int ImpactIonisationModelGrant = 1;
162 double m_dopingConcentration;
166 double m_mLongX, m_mTransX;
168 double m_mLongL, m_mTransL;
170 double m_alphaX, m_alphaL;
172 double m_eLatticeMobility, m_hLatticeMobility;
174 double m_eMobility, m_hMobility;
176 double m_eBetaCanali, m_hBetaCanali;
177 double m_eBetaCanaliInv, m_hBetaCanaliInv;
179 double m_eSatVel, m_hSatVel;
181 double m_eHallFactor, m_hHallFactor;
184 double m_eTrapCs, m_hTrapCs;
185 double m_eTrapDensity, m_hTrapDensity;
186 double m_eTrapTime, m_hTrapTime;
190 double m_eImpactA0, m_eImpactA1, m_eImpactA2;
191 double m_eImpactB0, m_eImpactB1, m_eImpactB2;
192 double m_hImpactA0, m_hImpactA1;
193 double m_hImpactB0, m_hImpactB1;
196 bool m_hasUserMobility;
197 bool m_hasUserSaturationVelocity;
198 int m_latticeMobilityModel;
199 int m_dopingMobilityModel;
200 int m_saturationVelocityModel;
201 int m_highFieldMobilityModel;
202 int m_impactIonisationModel;
206 bool m_useNonParabolicity;
207 bool m_useFullBandDos;
208 bool m_useAnisotropy;
211 double m_eFinalXL, m_eStepXL;
212 double m_eFinalG, m_eStepG;
213 double m_eFinalV, m_eStepV;
214 static const int nEnergyStepsXL = 2000;
215 static const int nEnergyStepsG = 2000;
216 static const int nEnergyStepsV = 2000;
219 int m_nLevelsX, m_nLevelsL, m_nLevelsG;
222 int m_nValleysX, m_nValleysL;
224 double m_eMinL, m_eMinG;
225 int m_ieMinL, m_ieMinG;
228 double m_cfNullElectronsX;
229 double m_cfNullElectronsL;
230 double m_cfNullElectronsG;
231 std::vector<double> m_cfTotElectronsX;
232 std::vector<double> m_cfTotElectronsL;
233 std::vector<double> m_cfTotElectronsG;
234 std::vector<std::vector<double> > m_cfElectronsX;
235 std::vector<std::vector<double> > m_cfElectronsL;
236 std::vector<std::vector<double> > m_cfElectronsG;
237 std::vector<double> m_energyLossElectronsX;
238 std::vector<double> m_energyLossElectronsL;
239 std::vector<double> m_energyLossElectronsG;
241 std::vector<int> m_scatTypeElectronsX;
242 std::vector<int> m_scatTypeElectronsL;
243 std::vector<int> m_scatTypeElectronsG;
246 double m_cfNullHoles;
247 std::vector<double> m_cfTotHoles;
248 std::vector<std::vector<double> > m_cfHoles;
249 std::vector<double> m_energyLossHoles;
251 std::vector<int> m_scatTypeHoles;
254 unsigned int m_nCollElectronAcoustic;
255 unsigned int m_nCollElectronOptical;
256 unsigned int m_nCollElectronIntervalley;
257 unsigned int m_nCollElectronImpurity;
258 unsigned int m_nCollElectronIonisation;
259 std::vector<unsigned int> m_nCollElectronDetailed;
260 std::vector<unsigned int> m_nCollElectronBand;
266 std::vector<ionProd> m_ionProducts;
270 std::vector<double> m_fbDosValence;
271 std::vector<double> m_fbDosConduction;
272 double m_fbDosMaxV, m_fbDosMaxC;
275 std::string m_opticalDataFile;
282 std::vector<opticalData> m_opticalDataTable;
284 bool UpdateTransportParameters();
285 void UpdateLatticeMobilityMinimos();
286 void UpdateLatticeMobilitySentaurus();
287 void UpdateLatticeMobilityReggiani();
289 void UpdateDopingMobilityMinimos();
290 void UpdateDopingMobilityMasetti();
292 void UpdateSaturationVelocityMinimos();
293 void UpdateSaturationVelocityCanali();
294 void UpdateSaturationVelocityReggiani();
296 void UpdateHighFieldMobilityCanali();
298 void UpdateImpactIonisationVanOverstraetenDeMan();
299 void UpdateImpactIonisationGrant();
301 bool ElectronMobilityMinimos(
const double e,
double& mu)
const;
302 bool ElectronMobilityCanali(
const double e,
double& mu)
const;
303 bool ElectronMobilityReggiani(
const double e,
double& mu)
const;
304 bool ElectronImpactIonisationVanOverstraetenDeMan(
const double e,
305 double& alpha)
const;
306 bool ElectronImpactIonisationGrant(
const double e,
double& alpha)
const;
307 bool HoleMobilityMinimos(
const double e,
double& mu)
const;
308 bool HoleMobilityCanali(
const double e,
double& mu)
const;
309 bool HoleMobilityReggiani(
const double e,
double& mu)
const;
310 bool HoleImpactIonisationVanOverstraetenDeMan(
const double e,
311 double& alpha)
const;
312 bool HoleImpactIonisationGrant(
const double e,
double& alpha)
const;
314 bool LoadOpticalData(
const std::string& filename);
316 bool ElectronScatteringRates();
317 bool ElectronAcousticScatteringRates();
318 bool ElectronOpticalScatteringRates();
319 bool ElectronIntervalleyScatteringRatesXX();
320 bool ElectronIntervalleyScatteringRatesXL();
321 bool ElectronIntervalleyScatteringRatesLL();
322 bool ElectronIntervalleyScatteringRatesXGLG();
323 bool ElectronIonisationRatesXL();
324 bool ElectronIonisationRatesG();
325 bool ElectronImpurityScatteringRates();
327 bool HoleScatteringRates();
328 bool HoleAcousticScatteringRates();
329 bool HoleOpticalScatteringRates();
330 bool HoleIonisationRates();
333 void InitialiseDensityOfStates();
Solid crystalline silicon
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)
virtual ~MediumSilicon()
Destructor.
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)
void SetLatticeMobilityModelReggiani()
void EnableNonParabolicity()
void SetDoping(const char type, const double c)
Doping concentration [cm-3] and type ('i', 'n', 'p')
void GetDoping(char &type, double &c) const
void SetHighFieldMobilityModelReggiani()
bool HoleAttachment(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta)
unsigned int GetNumberOfLevels() const
void SetSaturationVelocityModelReggiani()
double GetValenceBandDensityOfStates(const double e, const int band=-1)
void DisableFullBandDensityOfStates()
void SetDopingMobilityModelMasetti()
void SetTrapDensity(const double n)
double GetElectronNullCollisionRate(const int band)
bool GetDielectricFunction(const double e, double &eps1, double &eps2, const unsigned int i=0)
void SetHighFieldMobilityModelMinimos()
bool IsSemiconductor() const
MediumSilicon()
Constructor.
void SetSaturationVelocity(const double vsate, const double vsath)
bool ElectronAttachment(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta)
void ComputeSecondaries(const double e0, double &ee, double &eh)
void ResetCollisionCounters()
void DisableScatteringRateOutput()
bool HoleTownsend(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha)
double GetElectronEnergy(const double px, const double py, const double pz, double &vx, double &vy, double &vz, const int band=0)
double GetConductionBandDensityOfStates(const double e, const int band=0)
bool SetMaxElectronEnergy(const double e)
void SetHighFieldMobilityModelConstant()
void SetLatticeMobilityModelSentaurus()
void SetSaturationVelocityModelCanali()
void SetHighFieldMobilityModelCanali()
bool GetOpticalDataRange(double &emin, double &emax, const unsigned int i=0)
void SetImpactIonisationModelVanOverstraetenDeMan()
void SetTrappingTime(const double etau, const double htau)
bool GetIonisationProduct(const unsigned int i, int &type, double &energy) const
void SetSaturationVelocityModelMinimos()
void EnableFullBandDensityOfStates()
void SetLowFieldMobility(const double mue, const double muh)
double GetMaxElectronEnergy() const
unsigned int GetNumberOfIonisationProducts() const
double GetElectronCollisionRate(const double e, const int band)
unsigned int GetNumberOfElectronCollisions() const
bool ElectronTownsend(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha)
void DisableNonParabolicity()
void SetLatticeMobilityModelMinimos()
void GetElectronMomentum(const double e, double &px, double &py, double &pz, int &band)
void SetTrapCrossSection(const double ecs, const double hcs)
Trapping cross-sections for electrons and holes.
void SetDiffusionScaling(const double d)
int GetElectronBandPopulation(const int band)
void SetImpactIonisationModelGrant()
bool GetElectronCollision(const double e, int &type, int &level, double &e1, double &dx, double &dy, double &dz, int &nion, int &ndxc, int &band)
void SetDopingMobilityModelMinimos()
void EnableScatteringRateOutput()
unsigned int GetNumberOfElectronBands() const
Abstract base class for media.