Garfield++ v1r0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
Loading...
Searching...
No Matches
Medium.hh
Go to the documentation of this file.
1// Abstract base class for media
2
3#ifndef G_MEDIUM_H
4#define G_MEDIUM_H
5
6#include <string>
7#include <vector>
8
9namespace Garfield {
10
11class Medium {
12
13 public:
14 // Constructor
15 Medium();
16 // Destructor
17 virtual ~Medium() {}
18
19 // Return the id number of the class instance
20 int GetId() const { return m_id; }
21 // Medium name/identifier
22 std::string GetName() const { return m_name; }
23 virtual bool IsGas() const { return false; }
24 virtual bool IsSemiconductor() const { return false; }
25
26 // Temperature [K]
27 void SetTemperature(const double& t);
28 double GetTemperature() const { return m_temperature; }
29 // Pressure [Torr]
30 void SetPressure(const double& p);
31 double GetPressure() const { return m_pressure; }
32 // Relative static dielectric constant
33 void SetDielectricConstant(const double& eps);
34 double GetDielectricConstant() const { return m_epsilon; }
35
36 // Get number of components
37 unsigned int GetNumberOfComponents() const { return m_nComponents; }
38 virtual void GetComponent(const unsigned int& i,
39 std::string& label, double& f);
40 // Effective atomic number and weight
41 virtual void SetAtomicNumber(const double& z);
42 virtual double GetAtomicNumber() const { return m_z; }
43 virtual void SetAtomicWeight(const double& a);
44 virtual double GetAtomicWeight() const { return m_a; }
45 // Number density [cm-3] and mass density [g/cm3]
46 virtual void SetNumberDensity(const double& n);
47 virtual double GetNumberDensity() const { return m_density; }
48 virtual void SetMassDensity(const double& rho);
49 virtual double GetMassDensity() const;
50
51 // Transport properties
52 virtual void EnableDrift() { m_driftable = true; }
53 void DisableDrift() { m_driftable = false; }
54 virtual void EnablePrimaryIonisation() { m_ionisable = true; }
56
57 bool IsDriftable() const { return m_driftable; }
58 bool IsMicroscopic() const { return m_microscopic; }
59 bool IsIonisable() const { return m_ionisable; }
60
61 // W value and Fano factor
62 void SetW(const double& w) {
63 m_w = w;
64 };
65 double GetW() { return m_w; }
66 void SetFanoFactor(const double& f) { m_fano = f; }
67 double GetFanoFactor() { return m_fano; }
68
69 // Transport parameters for electrons
70 // Drift velocity [cm / ns]
71 virtual bool ElectronVelocity(const double ex, const double ey,
72 const double ez, const double bx,
73 const double by, const double bz, double& vx,
74 double& vy, double& vz);
75 // Longitudinal and transverse diffusion coefficients [cm1/2]
76 virtual bool ElectronDiffusion(const double ex, const double ey,
77 const double ez, const double bx,
78 const double by, const double bz, double& dl,
79 double& dt);
80 // Diffusion tensor: diagonal elements are the diffusion
81 // coefficients [cm] along e, btrans, e x b,
82 // off-diagonal elements are the covariances
83 virtual bool ElectronDiffusion(const double ex, const double ey,
84 const double ez, const double bx,
85 const double by, const double bz,
86 double cov[3][3]);
87 // Ionisation coefficient [cm-1]
88 virtual bool ElectronTownsend(const double ex, const double ey,
89 const double ez, const double bx,
90 const double by, const double bz,
91 double& alpha);
92 // Attachment coefficient [cm-1]
93 virtual bool ElectronAttachment(const double ex, const double ey,
94 const double ez, const double bx,
95 const double by, const double bz,
96 double& eta);
97
98 // Microscopic electron transport properties
99
100 // Dispersion relation (Energy vs. wave vector)
101 virtual double GetElectronEnergy(const double px, const double py,
102 const double pz, double& vx, double& vy,
103 double& vz, const int band = 0);
104 virtual void GetElectronMomentum(const double e, double& px, double& py,
105 double& pz, int& band);
106
107 // Null-collision rate [ns-1]
108 virtual double GetElectronNullCollisionRate(const int band = 0);
109 // Collision rate [ns-1] for given electron energy
110 virtual double GetElectronCollisionRate(const double e, const int band = 0);
111 virtual bool GetElectronCollision(const double e, int& type, int& level,
112 double& e1, double& dx, double& dy,
113 double& dz, int& nion, int& ndxc,
114 int& band);
115
116 virtual int GetNumberOfIonisationProducts() { return 0; }
117 virtual bool GetIonisationProduct(const int i, int& type, double& energy);
118
119 virtual int GetNumberOfDeexcitationProducts() { return 0; }
120 virtual bool GetDeexcitationProduct(const int i, double& t, double& s,
121 int& type, double& energy);
122
123 // Transport parameters for holes
124 virtual bool HoleVelocity(const double ex, const double ey, const double ez,
125 const double bx, const double by, const double bz,
126 double& vx, double& vy, double& vz);
127 virtual bool HoleDiffusion(const double ex, const double ey, const double ez,
128 const double bx, const double by, const double bz,
129 double& dl, double& dt);
130 virtual bool HoleDiffusion(const double ex, const double ey, const double ez,
131 const double bx, const double by, const double bz,
132 double cov[3][3]);
133 virtual bool HoleTownsend(const double ex, const double ey, const double ez,
134 const double bx, const double by, const double bz,
135 double& alpha);
136 virtual bool HoleAttachment(const double ex, const double ey, const double ez,
137 const double bx, const double by, const double bz,
138 double& eta);
139
140 // Transport parameters for ions
141 virtual bool IonVelocity(const double ex, const double ey, const double ez,
142 const double bx, const double by, const double bz,
143 double& vx, double& vy, double& vz);
144 virtual bool IonDiffusion(const double ex, const double ey, const double ez,
145 const double bx, const double by, const double bz,
146 double& dl, double& dt);
147 // Dissociation coefficient
148 virtual bool IonDissociation(const double ex, const double ey,
149 const double ez, const double bx,
150 const double by, const double bz, double& diss);
151
152 // Set the range of fields to be covered by the transport tables.
153 void SetFieldGrid(double emin, double emax, int ne, bool logE,
154 double bmin = 0., double bmax = 0., int nb = 1,
155 double amin = 0., double amax = 0., int na = 1);
156 void SetFieldGrid(const std::vector<double>& efields,
157 const std::vector<double>& bfields,
158 const std::vector<double>& angles);
159 void GetFieldGrid(std::vector<double>& efields, std::vector<double>& bfields,
160 std::vector<double>& angles);
161
162 bool GetElectronVelocityE(const unsigned int& ie,
163 const unsigned int& ib,
164 const unsigned int& ia, double& v);
165 bool GetElectronVelocityExB(const unsigned int& ie,
166 const unsigned int& ib,
167 const unsigned int& ia, double& v);
168 bool GetElectronVelocityB(const unsigned int& ie,
169 const unsigned int& ib,
170 const unsigned int& ia, double& v);
171
172 bool GetElectronLongitudinalDiffusion(const unsigned int& ie,
173 const unsigned int& ib,
174 const unsigned int& ia, double& dl);
175 bool GetElectronTransverseDiffusion(const unsigned int& ie,
176 const unsigned int& ib,
177 const unsigned int& ia, double& dt);
178 bool GetElectronTownsend(const unsigned int& ie,
179 const unsigned int& ib,
180 const unsigned int& ia, double& alpha);
181 bool GetElectronAttachment(const unsigned int& ie,
182 const unsigned int& ib,
183 const unsigned int& ia, double& eta);
184
185 bool GetHoleVelocityE(const unsigned int& ie, const unsigned int& ib,
186 const unsigned int& ia, double& v);
187 bool GetHoleVelocityExB(const unsigned int& ie, const unsigned int& ib,
188 const unsigned int& ia, double& v);
189 bool GetHoleVelocityB(const unsigned int& ie, const unsigned int& ib,
190 const unsigned int& ia, double& v);
191 bool GetHoleLongitudinalDiffusion(const unsigned int& ie,
192 const unsigned int& ib,
193 const unsigned int& ia, double& dl);
194 bool GetHoleTransverseDiffusion(const unsigned int& ie,
195 const unsigned int& ib,
196 const unsigned int& ia, double& dt);
197 bool GetHoleTownsend(const unsigned int& ie, const unsigned int& ib,
198 const unsigned int& ia, double& alpha);
199 bool GetHoleAttachment(const unsigned int& ie, const unsigned int& ib,
200 const unsigned int& ia, double& eta);
201
202 bool GetIonMobility(const unsigned int& ie, const unsigned int& ib,
203 const unsigned int& ia, double& mu);
204 bool GetIonLongitudinalDiffusion(const unsigned int& ie,
205 const unsigned int& ib,
206 const unsigned int& ia, double& dl);
207 bool GetIonTransverseDiffusion(const unsigned int& ie,
208 const unsigned int& ib,
209 const unsigned int& ia, double& dt);
210 bool GetIonDissociation(const unsigned int& ie,
211 const unsigned int& ib,
212 const unsigned int& ia, double& diss);
213
218 void ResetHoleVelocity();
219 void ResetHoleDiffusion();
220 void ResetHoleTownsend();
221 void ResetHoleAttachment();
222 void ResetIonMobility();
223 void ResetIonDiffusion();
225
226 bool SetIonMobility(const unsigned int& ie, const unsigned int& ib,
227 const unsigned int& ia, const double& mu);
228 bool SetIonMobility(const std::vector<double>& fields,
229 const std::vector<double>& mobilities);
230
231 // Select extrapolation method for fields below/above the table range.
232 // Options are "constant"/"linear"/"exponential".
233 void SetExtrapolationMethodVelocity(const std::string& extrLow,
234 const std::string& extrHigh);
235 void SetExtrapolationMethodDiffusion(const std::string& extrLow,
236 const std::string& extrHigh);
237 void SetExtrapolationMethodTownsend(const std::string& extrLow,
238 const std::string& extrHigh);
239 void SetExtrapolationMethodAttachment(const std::string& extrLow,
240 const std::string& extrHigh);
241 void SetExtrapolationMethodIonMobility(const std::string& extrLow,
242 const std::string& extrHigh);
243 void SetExtrapolationMethodIonDissociation(const std::string& extrLow,
244 const std::string& extrHigh);
245
246 // Set the degree of polynomial interpolation (usually 2).
247 void SetInterpolationMethodVelocity(const unsigned int& intrp);
248 void SetInterpolationMethodDiffusion(const unsigned int& intrp);
249 void SetInterpolationMethodTownsend(const unsigned int& intrp);
250 void SetInterpolationMethodAttachment(const unsigned int& intrp);
251 void SetInterpolationMethodIonMobility(const unsigned int& intrp);
252 void SetInterpolationMethodIonDissociation(const unsigned int& intrp);
253
254 // Scaling of fields and transport parameters.
255 virtual double ScaleElectricField(const double& e) const { return e; }
256 virtual double UnScaleElectricField(const double& e) const { return e; }
257 virtual double ScaleVelocity(const double& v) const { return v; }
258 virtual double ScaleDiffusion(const double& d) const { return d; }
259 virtual double ScaleDiffusionTensor(const double& d) const { return d; }
260 virtual double ScaleTownsend(const double& alpha) const { return alpha; }
261 virtual double ScaleAttachment(const double& eta) const { return eta; }
262 virtual double ScaleDissociation(const double &diss) const { return diss; }
263
264 // Optical properties
265 // Energy range [eV] of available optical data
266 virtual bool GetOpticalDataRange(double& emin, double& emax,
267 const unsigned int& i = 0);
268 // Complex dielectric function
269 virtual bool GetDielectricFunction(const double& e, double& eps1, double& eps2,
270 const unsigned int& i = 0);
271 // Photoabsorption cross-section [cm2]
272 virtual bool GetPhotoAbsorptionCrossSection(const double& e, double& sigma,
273 const unsigned int& i = 0);
274 virtual double GetPhotonCollisionRate(const double& e);
275 virtual bool GetPhotonCollision(const double e, int& type, int& level,
276 double& e1, double& ctheta, int& nsec,
277 double& esec);
278
279 // Switch on/off debugging messages
280 void EnableDebugging() { m_debug = true; }
281 void DisableDebugging() { m_debug = false; }
282
283 protected:
284 std::string m_className;
285
286 static int m_idCounter;
287
288 // Id number
289 int m_id;
290 // Name
291 std::string m_name;
292 // Temperature [K]
294 // Pressure [Torr]
296 // Static dielectric constant
297 double m_epsilon;
298 // Number of components
299 unsigned int m_nComponents;
300 // (Effective) atomic number Z
301 double m_z;
302 // Atomic weight A
303 double m_a;
304 // Number density [cm-3]
305 double m_density;
306
307 // Transport flags
311
312 // W value and Fano factor
313 double m_w, m_fano;
314
315 // Update flag
317
318 // Switch on/off debugging messages
320
321 // Field grids
322 unsigned int m_nEfields;
323 unsigned int m_nBfields;
324 unsigned int m_nAngles;
325
326 std::vector<double> eFields;
327 std::vector<double> bFields;
328 std::vector<double> bAngles;
329
330 // Tables of transport parameters
332 // Electrons
336 std::vector<std::vector<std::vector<double> > > tabElectronVelocityE;
337 std::vector<std::vector<std::vector<double> > > tabElectronVelocityExB;
338 std::vector<std::vector<std::vector<double> > > tabElectronVelocityB;
339 std::vector<std::vector<std::vector<double> > > tabElectronDiffLong;
340 std::vector<std::vector<std::vector<double> > > tabElectronDiffTrans;
341 std::vector<std::vector<std::vector<double> > > tabElectronTownsend;
342 std::vector<std::vector<std::vector<double> > > tabElectronAttachment;
343
344 std::vector<std::vector<std::vector<std::vector<double> > > >
346
347 // Holes
351 std::vector<std::vector<std::vector<double> > > tabHoleVelocityE;
352 std::vector<std::vector<std::vector<double> > > tabHoleVelocityExB;
353 std::vector<std::vector<std::vector<double> > > tabHoleVelocityB;
354 std::vector<std::vector<std::vector<double> > > tabHoleDiffLong;
355 std::vector<std::vector<std::vector<double> > > tabHoleDiffTrans;
356 std::vector<std::vector<std::vector<double> > > tabHoleTownsend;
357 std::vector<std::vector<std::vector<double> > > tabHoleAttachment;
358
359 std::vector<std::vector<std::vector<std::vector<double> > > > tabHoleDiffTens;
360
361 // Ions
365 std::vector<std::vector<std::vector<double> > > tabIonMobility;
366 std::vector<std::vector<std::vector<double> > > tabIonDiffLong;
367 std::vector<std::vector<std::vector<double> > > tabIonDiffTrans;
368 std::vector<std::vector<std::vector<double> > > tabIonDissociation;
369
370 // Thresholds for Townsend, attachment and dissociation coefficients.
373
377
378 // Extrapolation methods
385
386 // Interpolation methods
387 unsigned int m_intpVelocity;
388 unsigned int m_intpDiffusion;
389 unsigned int m_intpTownsend;
390 unsigned int m_intpAttachment;
391 unsigned int m_intpMobility;
392 unsigned int m_intpDissociation;
393
394 double Interpolate1D(const double& e, const std::vector<double>& table,
395 const std::vector<double>& fields,
396 const unsigned int& intpMeth,
397 const int& jExtr, const int& iExtr);
398 bool GetExtrapolationIndex(std::string extrStr, unsigned int& extrNb);
399 void CloneTable(std::vector<std::vector<std::vector<double> > >& tab,
400 const std::vector<double>& efields,
401 const std::vector<double>& bfields,
402 const std::vector<double>& angles,
403 const unsigned int& intp,
404 const unsigned int& extrLow, const unsigned int& extrHigh,
405 const double init,
406 const std::string label);
407 void CloneTensor(
408 std::vector<std::vector<std::vector<std::vector<double> > > >& tab,
409 const unsigned int& n,
410 const std::vector<double>& efields,
411 const std::vector<double>& bfields,
412 const std::vector<double>& angles,
413 const unsigned int& intp,
414 const unsigned int& extrLow, const unsigned int& extrHigh,
415 const double& init,
416 const std::string& label);
417
418 void InitParamArrays(const unsigned int& eRes, const unsigned int& bRes,
419 const unsigned int& aRes,
420 std::vector<std::vector<std::vector<double> > >& tab,
421 const double& val);
422 void InitParamTensor(
423 const unsigned int& eRes, const unsigned int& bRes,
424 const unsigned int& aRes, const unsigned int& tRes,
425 std::vector<std::vector<std::vector<std::vector<double> > > >& tab,
426 const double& val);
427};
428}
429
430#endif
void ResetHoleAttachment()
Definition: Medium.cc:1544
bool GetHoleVelocityE(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &v)
Definition: Medium.cc:2065
double m_density
Definition: Medium.hh:305
bool m_hasElectronDiffTens
Definition: Medium.hh:334
void ResetIonMobility()
Definition: Medium.cc:1550
unsigned int m_nBfields
Definition: Medium.hh:323
virtual bool GetPhotonCollision(const double e, int &type, int &level, double &e1, double &ctheta, int &nsec, double &esec)
Definition: Medium.cc:1474
bool GetElectronVelocityB(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &v)
Definition: Medium.cc:1943
void ResetElectronAttachment()
Definition: Medium.cc:1512
virtual double GetMassDensity() const
Definition: Medium.cc:150
double GetFanoFactor()
Definition: Medium.hh:67
unsigned int m_extrLowMobility
Definition: Medium.hh:383
void ResetIonDiffusion()
Definition: Medium.cc:1556
virtual void GetElectronMomentum(const double e, double &px, double &py, double &pz, int &band)
Definition: Medium.cc:693
bool IsMicroscopic() const
Definition: Medium.hh:58
bool m_microscopic
Definition: Medium.hh:309
bool SetIonMobility(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, const double &mu)
Definition: Medium.cc:2454
unsigned int m_intpDiffusion
Definition: Medium.hh:388
virtual void SetAtomicWeight(const double &a)
Definition: Medium.cc:178
bool GetElectronTransverseDiffusion(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &dt)
Definition: Medium.cc:1992
virtual void SetMassDensity(const double &rho)
Definition: Medium.cc:200
std::vector< std::vector< std::vector< double > > > tabHoleVelocityE
Definition: Medium.hh:351
virtual double ScaleElectricField(const double &e) const
Definition: Medium.hh:255
unsigned int m_extrLowDiffusion
Definition: Medium.hh:380
double m_pressure
Definition: Medium.hh:295
void InitParamTensor(const unsigned int &eRes, const unsigned int &bRes, const unsigned int &aRes, const unsigned int &tRes, std::vector< std::vector< std::vector< std::vector< double > > > > &tab, const double &val)
Definition: Medium.cc:2792
virtual bool HoleTownsend(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha)
Definition: Medium.cc:1079
virtual bool GetIonisationProduct(const int i, int &type, double &energy)
Definition: Medium.cc:748
bool m_hasElectronDiffTrans
Definition: Medium.hh:334
double m_fano
Definition: Medium.hh:313
bool m_hasElectronTownsend
Definition: Medium.hh:335
double GetW()
Definition: Medium.hh:65
void SetInterpolationMethodIonDissociation(const unsigned int &intrp)
Definition: Medium.cc:2690
virtual bool GetElectronCollision(const double e, int &type, int &level, double &e1, double &dx, double &dy, double &dz, int &nion, int &ndxc, int &band)
Definition: Medium.cc:727
void SetExtrapolationMethodIonDissociation(const std::string &extrLow, const std::string &extrHigh)
Definition: Medium.cc:2616
std::vector< double > bFields
Definition: Medium.hh:327
virtual double ScaleDiffusion(const double &d) const
Definition: Medium.hh:258
std::vector< std::vector< std::vector< double > > > tabElectronVelocityB
Definition: Medium.hh:338
unsigned int m_extrHighAttachment
Definition: Medium.hh:382
unsigned int m_nAngles
Definition: Medium.hh:324
virtual double GetNumberDensity() const
Definition: Medium.hh:47
bool GetIonLongitudinalDiffusion(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &dl)
Definition: Medium.cc:2256
bool GetIonDissociation(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &diss)
Definition: Medium.cc:2304
bool GetHoleVelocityExB(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &v)
Definition: Medium.cc:2089
virtual 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)
Definition: Medium.cc:773
unsigned int m_intpMobility
Definition: Medium.hh:391
unsigned int m_intpAttachment
Definition: Medium.hh:390
bool GetElectronTownsend(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &alpha)
Definition: Medium.cc:2017
bool GetIonTransverseDiffusion(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &dt)
Definition: Medium.cc:2280
bool m_hasElectronVelocityB
Definition: Medium.hh:333
void ResetHoleVelocity()
Definition: Medium.cc:1518
void DisableDrift()
Definition: Medium.hh:53
bool GetExtrapolationIndex(std::string extrStr, unsigned int &extrNb)
Definition: Medium.cc:2635
void ResetIonDissociation()
Definition: Medium.cc:1564
unsigned int m_extrHighDiffusion
Definition: Medium.hh:380
std::vector< double > eFields
Definition: Medium.hh:326
std::vector< std::vector< std::vector< double > > > tabIonDissociation
Definition: Medium.hh:368
unsigned int m_extrHighMobility
Definition: Medium.hh:383
double GetDielectricConstant() const
Definition: Medium.hh:34
std::vector< std::vector< std::vector< double > > > tabElectronVelocityE
Definition: Medium.hh:336
void CloneTensor(std::vector< std::vector< std::vector< std::vector< double > > > > &tab, const unsigned int &n, const std::vector< double > &efields, const std::vector< double > &bfields, const std::vector< double > &angles, const unsigned int &intp, const unsigned int &extrLow, const unsigned int &extrHigh, const double &init, const std::string &label)
Definition: Medium.cc:2391
void SetFieldGrid(double emin, double emax, int ne, bool logE, double bmin=0., double bmax=0., int nb=1, double amin=0., double amax=0., int na=1)
Definition: Medium.cc:1570
std::string m_name
Definition: Medium.hh:291
unsigned int m_intpTownsend
Definition: Medium.hh:389
virtual void SetAtomicNumber(const double &z)
Definition: Medium.cc:167
unsigned int m_extrLowAttachment
Definition: Medium.hh:382
virtual bool GetOpticalDataRange(double &emin, double &emax, const unsigned int &i=0)
Definition: Medium.cc:1402
std::vector< double > bAngles
Definition: Medium.hh:328
unsigned int m_extrHighDissociation
Definition: Medium.hh:384
double GetPressure() const
Definition: Medium.hh:31
virtual double ScaleAttachment(const double &eta) const
Definition: Medium.hh:261
virtual void GetComponent(const unsigned int &i, std::string &label, double &f)
Definition: Medium.cc:155
bool m_driftable
Definition: Medium.hh:308
virtual 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)
Definition: Medium.cc:217
virtual bool IonVelocity(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &vx, double &vy, double &vz)
Definition: Medium.cc:1211
virtual double ScaleDiffusionTensor(const double &d) const
Definition: Medium.hh:259
int GetId() const
Definition: Medium.hh:20
unsigned int m_intpVelocity
Definition: Medium.hh:387
void SetExtrapolationMethodTownsend(const std::string &extrLow, const std::string &extrHigh)
Definition: Medium.cc:2560
bool m_hasHoleTownsend
Definition: Medium.hh:350
std::vector< std::vector< std::vector< double > > > tabElectronDiffLong
Definition: Medium.hh:339
virtual double UnScaleElectricField(const double &e) const
Definition: Medium.hh:256
virtual double GetAtomicWeight() const
Definition: Medium.hh:44
void SetInterpolationMethodIonMobility(const unsigned int &intrp)
Definition: Medium.cc:2683
virtual ~Medium()
Definition: Medium.hh:17
void SetExtrapolationMethodIonMobility(const std::string &extrLow, const std::string &extrHigh)
Definition: Medium.cc:2598
std::vector< std::vector< std::vector< double > > > tabElectronAttachment
Definition: Medium.hh:342
int thrIonDissociation
Definition: Medium.hh:376
unsigned int GetNumberOfComponents() const
Definition: Medium.hh:37
virtual double GetElectronNullCollisionRate(const int band=0)
Definition: Medium.cc:708
virtual double GetAtomicNumber() const
Definition: Medium.hh:42
virtual int GetNumberOfIonisationProducts()
Definition: Medium.hh:116
unsigned int m_extrLowVelocity
Definition: Medium.hh:379
void DisablePrimaryIonisation()
Definition: Medium.hh:55
unsigned int m_extrHighTownsend
Definition: Medium.hh:381
virtual void EnableDrift()
Definition: Medium.hh:52
virtual bool GetPhotoAbsorptionCrossSection(const double &e, double &sigma, const unsigned int &i=0)
Definition: Medium.cc:1443
virtual int GetNumberOfDeexcitationProducts()
Definition: Medium.hh:119
virtual double ScaleDissociation(const double &diss) const
Definition: Medium.hh:262
virtual double GetElectronCollisionRate(const double e, const int band=0)
Definition: Medium.cc:717
void SetTemperature(const double &t)
Definition: Medium.cc:117
virtual bool ElectronDiffusion(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &dl, double &dt)
Definition: Medium.cc:388
unsigned int m_extrHighVelocity
Definition: Medium.hh:379
virtual double ScaleVelocity(const double &v) const
Definition: Medium.hh:257
std::vector< std::vector< std::vector< double > > > tabHoleTownsend
Definition: Medium.hh:356
void SetDielectricConstant(const double &eps)
Definition: Medium.cc:139
double m_epsilon
Definition: Medium.hh:297
unsigned int m_extrLowTownsend
Definition: Medium.hh:381
void SetExtrapolationMethodDiffusion(const std::string &extrLow, const std::string &extrHigh)
Definition: Medium.cc:2541
void GetFieldGrid(std::vector< double > &efields, std::vector< double > &bfields, std::vector< double > &angles)
Definition: Medium.cc:1886
void SetW(const double &w)
Definition: Medium.hh:62
double Interpolate1D(const double &e, const std::vector< double > &table, const std::vector< double > &fields, const unsigned int &intpMeth, const int &jExtr, const int &iExtr)
Definition: Medium.cc:2697
void SetPressure(const double &p)
Definition: Medium.cc:128
static int m_idCounter
Definition: Medium.hh:286
std::vector< std::vector< std::vector< std::vector< double > > > > tabHoleDiffTens
Definition: Medium.hh:359
void DisableDebugging()
Definition: Medium.hh:281
virtual bool ElectronTownsend(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha)
Definition: Medium.cc:542
void ResetElectronDiffusion()
Definition: Medium.cc:1496
virtual bool IsSemiconductor() const
Definition: Medium.hh:24
std::vector< std::vector< std::vector< double > > > tabIonDiffTrans
Definition: Medium.hh:367
void SetInterpolationMethodAttachment(const unsigned int &intrp)
Definition: Medium.cc:2676
unsigned int m_extrLowDissociation
Definition: Medium.hh:384
virtual bool GetDielectricFunction(const double &e, double &eps1, double &eps2, const unsigned int &i=0)
Definition: Medium.cc:1419
bool m_hasHoleVelocityB
Definition: Medium.hh:348
std::vector< std::vector< std::vector< std::vector< double > > > > tabElectronDiffTens
Definition: Medium.hh:345
virtual bool IsGas() const
Definition: Medium.hh:23
bool GetHoleTransverseDiffusion(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &dt)
Definition: Medium.cc:2161
void SetInterpolationMethodVelocity(const unsigned int &intrp)
Definition: Medium.cc:2655
virtual bool GetDeexcitationProduct(const int i, double &t, double &s, int &type, double &energy)
Definition: Medium.cc:760
virtual double GetElectronEnergy(const double px, const double py, const double pz, double &vx, double &vy, double &vz, const int band=0)
Definition: Medium.cc:677
unsigned int m_nEfields
Definition: Medium.hh:322
std::vector< std::vector< std::vector< double > > > tabHoleVelocityExB
Definition: Medium.hh:352
void SetExtrapolationMethodVelocity(const std::string &extrLow, const std::string &extrHigh)
Definition: Medium.cc:2522
virtual bool ElectronAttachment(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta)
Definition: Medium.cc:609
bool m_hasElectronVelocityExB
Definition: Medium.hh:333
bool GetHoleVelocityB(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &v)
Definition: Medium.cc:2113
std::vector< std::vector< std::vector< double > > > tabIonMobility
Definition: Medium.hh:365
bool m_hasHoleDiffTrans
Definition: Medium.hh:349
bool m_hasIonDiffTrans
Definition: Medium.hh:363
bool GetElectronVelocityExB(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &v)
Definition: Medium.cc:1919
int thrElectronAttachment
Definition: Medium.hh:372
void EnableDebugging()
Definition: Medium.hh:280
bool m_hasIonMobility
Definition: Medium.hh:362
bool m_hasElectronDiffLong
Definition: Medium.hh:334
std::vector< std::vector< std::vector< double > > > tabHoleDiffTrans
Definition: Medium.hh:355
bool IsIonisable() const
Definition: Medium.hh:59
virtual void EnablePrimaryIonisation()
Definition: Medium.hh:54
void InitParamArrays(const unsigned int &eRes, const unsigned int &bRes, const unsigned int &aRes, std::vector< std::vector< std::vector< double > > > &tab, const double &val)
Definition: Medium.cc:2772
bool m_ionisable
Definition: Medium.hh:310
bool GetElectronLongitudinalDiffusion(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &dl)
Definition: Medium.cc:1967
void SetExtrapolationMethodAttachment(const std::string &extrLow, const std::string &extrHigh)
Definition: Medium.cc:2579
std::vector< std::vector< std::vector< double > > > tabHoleVelocityB
Definition: Medium.hh:353
bool m_hasHoleDiffLong
Definition: Medium.hh:349
std::vector< std::vector< std::vector< double > > > tabHoleDiffLong
Definition: Medium.hh:354
unsigned int m_nComponents
Definition: Medium.hh:299
int thrHoleAttachment
Definition: Medium.hh:375
void SetFanoFactor(const double &f)
Definition: Medium.hh:66
bool GetHoleAttachment(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &eta)
Definition: Medium.cc:2209
std::vector< std::vector< std::vector< double > > > tabIonDiffLong
Definition: Medium.hh:366
std::string m_className
Definition: Medium.hh:284
virtual bool HoleDiffusion(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &dl, double &dt)
Definition: Medium.cc:928
bool GetHoleLongitudinalDiffusion(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &dl)
Definition: Medium.cc:2137
double GetTemperature() const
Definition: Medium.hh:28
std::vector< std::vector< std::vector< double > > > tabHoleAttachment
Definition: Medium.hh:357
virtual bool IonDissociation(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &diss)
Definition: Medium.cc:1335
bool m_hasIonDissociation
Definition: Medium.hh:364
void SetInterpolationMethodDiffusion(const unsigned int &intrp)
Definition: Medium.cc:2662
bool GetElectronAttachment(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &eta)
Definition: Medium.cc:2041
bool m_hasIonDiffLong
Definition: Medium.hh:363
bool GetHoleTownsend(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &alpha)
Definition: Medium.cc:2185
int thrHoleTownsend
Definition: Medium.hh:374
virtual double ScaleTownsend(const double &alpha) const
Definition: Medium.hh:260
unsigned int m_intpDissociation
Definition: Medium.hh:392
virtual double GetPhotonCollisionRate(const double &e)
Definition: Medium.cc:1466
bool m_hasHoleAttachment
Definition: Medium.hh:350
void ResetHoleDiffusion()
Definition: Medium.cc:1528
bool m_hasHoleVelocityExB
Definition: Medium.hh:348
void SetInterpolationMethodTownsend(const unsigned int &intrp)
Definition: Medium.cc:2669
bool m_isChanged
Definition: Medium.hh:316
bool m_hasElectronVelocityE
Definition: Medium.hh:333
bool GetElectronVelocityE(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &v)
Definition: Medium.cc:1895
std::vector< std::vector< std::vector< double > > > tabElectronTownsend
Definition: Medium.hh:341
void CloneTable(std::vector< std::vector< std::vector< double > > > &tab, const std::vector< double > &efields, const std::vector< double > &bfields, const std::vector< double > &angles, const unsigned int &intp, const unsigned int &extrLow, const unsigned int &extrHigh, const double init, const std::string label)
Definition: Medium.cc:2328
bool m_hasHoleVelocityE
Definition: Medium.hh:348
int thrElectronTownsend
Definition: Medium.hh:371
bool m_hasElectronAttachment
Definition: Medium.hh:335
void ResetElectronTownsend()
Definition: Medium.cc:1506
bool m_hasHoleDiffTens
Definition: Medium.hh:349
std::string GetName() const
Definition: Medium.hh:22
virtual bool HoleAttachment(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta)
Definition: Medium.cc:1144
bool IsDriftable() const
Definition: Medium.hh:57
virtual void SetNumberDensity(const double &n)
Definition: Medium.cc:189
void ResetHoleTownsend()
Definition: Medium.cc:1538
void ResetElectronVelocity()
Definition: Medium.cc:1486
virtual bool IonDiffusion(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &dl, double &dt)
Definition: Medium.cc:1268
double m_temperature
Definition: Medium.hh:293
std::vector< std::vector< std::vector< double > > > tabElectronDiffTrans
Definition: Medium.hh:340
std::vector< std::vector< std::vector< double > > > tabElectronVelocityExB
Definition: Medium.hh:337
bool GetIonMobility(const unsigned int &ie, const unsigned int &ib, const unsigned int &ia, double &mu)
Definition: Medium.cc:2233