25 virtual bool IsGas()
const {
return false; }
47 virtual void GetComponent(
const unsigned int i, std::string& label,
92 const double ez,
const double bx,
93 const double by,
const double bz,
double& vx,
94 double& vy,
double& vz);
97 const double ez,
const double bx,
98 const double by,
const double bz,
double& dl,
104 const double ez,
const double bx,
105 const double by,
const double bz,
109 const double ez,
const double bx,
110 const double by,
const double bz,
114 const double ez,
const double bx,
115 const double by,
const double bz,
119 const double ez,
const double bx,
120 const double by,
const double bz,
128 const double pz,
double& vx,
double& vy,
129 double& vz,
const int band = 0);
133 double& pz,
int& band);
141 const double e,
int& type,
int& level,
double& e1,
double& dx,
double& dy,
142 double& dz, std::vector<std::pair<int, double> >& secondaries,
int& ndxc,
146 double& s,
int& type,
147 double& energy)
const;
151 virtual bool HoleVelocity(
const double ex,
const double ey,
const double ez,
152 const double bx,
const double by,
const double bz,
153 double& vx,
double& vy,
double& vz);
155 virtual bool HoleDiffusion(
const double ex,
const double ey,
const double ez,
156 const double bx,
const double by,
const double bz,
157 double& dl,
double& dt);
159 virtual bool HoleDiffusion(
const double ex,
const double ey,
const double ez,
160 const double bx,
const double by,
const double bz,
163 virtual bool HoleTownsend(
const double ex,
const double ey,
const double ez,
164 const double bx,
const double by,
const double bz,
167 virtual bool HoleAttachment(
const double ex,
const double ey,
const double ez,
168 const double bx,
const double by,
const double bz,
175 virtual bool IonVelocity(
const double ex,
const double ey,
const double ez,
176 const double bx,
const double by,
const double bz,
177 double& vx,
double& vy,
double& vz);
179 virtual bool IonDiffusion(
const double ex,
const double ey,
const double ez,
180 const double bx,
const double by,
const double bz,
181 double& dl,
double& dt);
184 const double ez,
const double bx,
185 const double by,
const double bz,
double& diss);
190 void SetFieldGrid(
double emin,
double emax,
const size_t ne,
bool logE,
191 double bmin = 0.,
double bmax = 0.,
const size_t nb = 1,
192 double amin = HalfPi,
double amax = HalfPi,
193 const size_t na = 1);
196 const std::vector<double>& bfields,
197 const std::vector<double>& angles);
199 void GetFieldGrid(std::vector<double>& efields, std::vector<double>& bfields,
200 std::vector<double>& angles);
204 const unsigned int ia,
const double v) {
209 const unsigned int ia,
double& v) {
214 const unsigned int ia,
const double v) {
219 const unsigned int ia,
double& v) {
224 const unsigned int ia,
const double v) {
229 const unsigned int ia,
double& v) {
234 const unsigned int ib,
235 const unsigned int ia,
237 return SetEntry(ie, ib, ia,
"SetElectronLongitudinalDiffusion",
242 const unsigned int ib,
243 const unsigned int ia,
double& dl) {
244 return GetEntry(ie, ib, ia,
"GetElectronLongitudinalDiffusion",
249 const unsigned int ib,
250 const unsigned int ia,
252 return SetEntry(ie, ib, ia,
"SetElectronTransverseDiffusion",
257 const unsigned int ib,
258 const unsigned int ia,
double& dt) {
259 return GetEntry(ie, ib, ia,
"GetElectronTransverseDiffusion",
264 const unsigned int ia,
const double alpha) {
265 return SetEntry(ie, ib, ia,
"SetElectronTownsend",
m_eAlp, alpha);
269 const unsigned int ia,
double& alpha) {
270 return GetEntry(ie, ib, ia,
"GetElectronTownsend",
m_eAlp, alpha);
274 const unsigned int ia,
const double eta) {
275 return SetEntry(ie, ib, ia,
"SetElectronAttachment",
m_eAtt, eta);
279 const unsigned int ia,
double& eta) {
280 return GetEntry(ie, ib, ia,
"GetElectronAttachment",
m_eAtt, eta);
285 const unsigned int ia,
const double lor) {
286 return SetEntry(ie, ib, ia,
"SetElectronLorentzAngle",
m_eLor, lor);
290 const unsigned int ia,
double& lor) {
291 return GetEntry(ie, ib, ia,
"GetElectronLorentzAngle",
m_eLor, lor);
296 const unsigned int ia,
const double v) {
301 const unsigned int ia,
double& v) {
306 const unsigned int ia,
const double v) {
311 const unsigned int ia,
double& v) {
316 const unsigned int ia,
const double v) {
321 const unsigned int ia,
double& v) {
327 const unsigned int ib,
328 const unsigned int ia,
const double dl) {
329 return SetEntry(ie, ib, ia,
"SetHoleLongitudinalDiffusion",
m_hDifL, dl);
333 const unsigned int ib,
334 const unsigned int ia,
double& dl) {
335 return GetEntry(ie, ib, ia,
"GetHoleLongitudinalDiffusion",
m_hDifL, dl);
339 const unsigned int ib,
340 const unsigned int ia,
const double dt) {
341 return SetEntry(ie, ib, ia,
"SetHoleTransverseDiffusion",
m_hDifT, dt);
345 const unsigned int ia,
double& dt) {
346 return GetEntry(ie, ib, ia,
"GetHoleTransverseDiffusion",
m_hDifT, dt);
350 const unsigned int ia,
const double alpha) {
355 const unsigned int ia,
double& alpha) {
360 const unsigned int ia,
const double eta) {
365 const unsigned int ia,
double& eta) {
374 const std::vector<double>& mobilities);
377 const unsigned int ia,
const double mu);
380 const unsigned int ia,
double& mu) {
386 const unsigned int ia,
const double dl) {
387 return SetEntry(ie, ib, ia,
"SetIonLongitudinalDiffusion",
m_iDifL, dl);
391 const unsigned int ia,
double& dl) {
392 return GetEntry(ie, ib, ia,
"GetIonLongitudinalDiffusion",
m_iDifL, dl);
396 const unsigned int ia,
const double dt) {
401 const unsigned int ia,
double& dt) {
406 const unsigned int ia,
const double diss) {
411 const unsigned int ia,
double& diss) {
455 const std::string& extrHigh);
457 const std::string& extrHigh);
459 const std::string& extrHigh);
461 const std::string& extrHigh);
463 const std::string& extrHigh);
465 const std::string& extrHigh);
489 const unsigned int i = 0);
492 const unsigned int i = 0);
495 const unsigned int i = 0);
498 double& e1,
double& ctheta,
int& nsec,
553 std::vector<std::vector<std::vector<double> > >
m_eVelE;
554 std::vector<std::vector<std::vector<double> > >
m_eVelX;
555 std::vector<std::vector<std::vector<double> > >
m_eVelB;
556 std::vector<std::vector<std::vector<double> > >
m_eDifL;
557 std::vector<std::vector<std::vector<double> > >
m_eDifT;
558 std::vector<std::vector<std::vector<double> > >
m_eAlp;
559 std::vector<std::vector<std::vector<double> > >
m_eAtt;
560 std::vector<std::vector<std::vector<double> > >
m_eLor;
562 std::vector<std::vector<std::vector<std::vector<double> > > >
m_eDifM;
565 std::vector<std::vector<std::vector<double> > >
m_hVelE;
566 std::vector<std::vector<std::vector<double> > >
m_hVelX;
567 std::vector<std::vector<std::vector<double> > >
m_hVelB;
568 std::vector<std::vector<std::vector<double> > >
m_hDifL;
569 std::vector<std::vector<std::vector<double> > >
m_hDifT;
570 std::vector<std::vector<std::vector<double> > >
m_hAlp;
571 std::vector<std::vector<std::vector<double> > >
m_hAtt;
573 std::vector<std::vector<std::vector<std::vector<double> > > >
m_hDifM;
576 std::vector<std::vector<std::vector<double> > >
m_iMob;
577 std::vector<std::vector<std::vector<double> > >
m_iDifL;
578 std::vector<std::vector<std::vector<double> > >
m_iDifT;
579 std::vector<std::vector<std::vector<double> > >
m_iDis;
589 std::pair<unsigned int, unsigned int>
m_extrVel = {0, 1};
590 std::pair<unsigned int, unsigned int>
m_extrDif = {0, 1};
591 std::pair<unsigned int, unsigned int>
m_extrAlp = {0, 1};
592 std::pair<unsigned int, unsigned int>
m_extrAtt = {0, 1};
593 std::pair<unsigned int, unsigned int>
m_extrLor = {0, 1};
594 std::pair<unsigned int, unsigned int>
m_extrMob = {0, 1};
595 std::pair<unsigned int, unsigned int>
m_extrDis = {0, 1};
606 bool Velocity(
const double ex,
const double ey,
const double ez,
607 const double bx,
const double by,
const double bz,
608 const std::vector<std::vector<std::vector<double> > >& velE,
609 const std::vector<std::vector<std::vector<double> > >& velB,
610 const std::vector<std::vector<std::vector<double> > >& velX,
611 const double q,
double& vx,
double& vy,
double& vz)
const;
612 bool Diffusion(
const double ex,
const double ey,
const double ez,
613 const double bx,
const double by,
const double bz,
614 const std::vector<std::vector<std::vector<double> > >& difL,
615 const std::vector<std::vector<std::vector<double> > >& difT,
616 double& dl,
double& dt)
const;
617 bool Diffusion(
const double ex,
const double ey,
const double ez,
618 const double bx,
const double by,
const double bz,
619 const std::vector<std::vector<std::vector<std::vector<double> > > >& diff,
620 double cov[3][3])
const;
621 bool Alpha(
const double ex,
const double ey,
const double ez,
622 const double bx,
const double by,
const double bz,
623 const std::vector<std::vector<std::vector<double> > >& tab,
624 unsigned int intp,
const unsigned int thr,
625 const std::pair<unsigned int, unsigned int>& extr,
626 double& alpha)
const;
627 double GetAngle(
const double ex,
const double ey,
const double ez,
628 const double bx,
const double by,
const double bz,
629 const double e,
const double b)
const;
630 bool Interpolate(
const double e,
const double b,
const double a,
631 const std::vector<std::vector<std::vector<double> > >& table,
632 double& y,
const unsigned int intp,
633 const std::pair<unsigned int, unsigned int>& extr)
const;
635 double Interpolate1D(
const double e,
const std::vector<double>& table,
636 const std::vector<double>& fields,
637 const unsigned int intpMeth,
638 const std::pair<unsigned int, unsigned int>& extr)
const;
640 bool SetEntry(
const unsigned int i,
const unsigned int j,
641 const unsigned int k,
const std::string& fcn,
642 std::vector<std::vector<std::vector<double> > >& tab,
644 bool GetEntry(
const unsigned int i,
const unsigned int j,
645 const unsigned int k,
const std::string& fcn,
646 const std::vector<std::vector<std::vector<double> > >& tab,
650 std::pair<unsigned int, unsigned int>& extr,
651 const std::string& fcn);
654 const std::vector<std::vector<std::vector<double> > >& tab)
const;
656 void Clone(std::vector<std::vector<std::vector<double> > >& tab,
657 const std::vector<double>& efields,
658 const std::vector<double>& bfields,
659 const std::vector<double>& angles,
const unsigned int intp,
660 const std::pair<unsigned int, unsigned int>& extr,
661 const double init,
const std::string& label);
663 std::vector<std::vector<std::vector<std::vector<double> > > >& tab,
664 const unsigned int n,
const std::vector<double>& efields,
665 const std::vector<double>& bfields,
const std::vector<double>& angles,
666 const unsigned int intp,
667 const std::pair<unsigned int, unsigned int>& extr,
const double init,
668 const std::string& label);
670 void Init(
const size_t nE,
const size_t nB,
const size_t nA,
671 std::vector<std::vector<std::vector<double> > >& tab,
674 const size_t nE,
const size_t nB,
const size_t nA,
const size_t nT,
675 std::vector<std::vector<std::vector<std::vector<double> > > >& tab,
Abstract base class for media.
virtual double IonMobility()
Low-field mobility [cm2 V-1 ns-1].
void ResetHoleAttachment()
virtual void GetComponent(const unsigned int i, std::string &label, double &f)
Get the name and fraction of a given component.
bool Interpolate(const double e, const double b, const double a, const std::vector< std::vector< std::vector< double > > > &table, double &y, const unsigned int intp, const std::pair< unsigned int, unsigned int > &extr) const
virtual bool GetPhotonCollision(const double e, int &type, int &level, double &e1, double &ctheta, int &nsec, double &esec)
virtual double UnScaleElectricField(const double e) const
virtual double ScaleVelocity(const double v) const
void ResetElectronAttachment()
virtual double GetMassDensity() const
Get the mass density [g/cm3].
double GetFanoFactor()
Get the Fano factor.
std::vector< double > m_bFields
bool GetIonDissociation(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &diss)
Get an entry in the table of dissociation coefficients.
bool SetElectronTownsend(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double alpha)
Set an entry in the table of Townsend coefficients.
virtual void GetElectronMomentum(const double e, double &px, double &py, double &pz, int &band)
bool IsMicroscopic() const
Does the medium have electron scattering rates?
void SetTemperature(const double t)
Set the temperature [K].
bool GetElectronVelocityB(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
Get an entry in the table of drift speeds along Btrans.
bool GetElectronVelocityE(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
Get an entry in the table of drift speeds along E.
void ResetElectronLorentzAngle()
void SetFanoFactor(const double f)
Set the Fano factor.
virtual bool HoleTownsend(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha)
Ionisation coefficient [cm-1].
bool SetIonDissociation(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double diss)
Set an entry in the table of dissociation coefficients.
double GetW()
Get the W value.
virtual double ScaleAttachment(const double eta) const
void SetExtrapolationMethodIonDissociation(const std::string &extrLow, const std::string &extrHigh)
void SetInterpolationMethodIonDissociation(const unsigned int intrp)
double Interpolate1D(const double e, const std::vector< double > &table, const std::vector< double > &fields, const unsigned int intpMeth, const std::pair< unsigned int, unsigned int > &extr) const
double GetAngle(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, const double e, const double b) const
virtual double ScaleDiffusion(const double d) const
virtual double ElectronMobility()
Low-field mobility [cm2 V-1 ns-1].
virtual double GetNumberDensity() const
Get the number density [cm-3].
virtual unsigned int GetNumberOfDeexcitationProducts() const
unsigned int SetThreshold(const std::vector< std::vector< std::vector< double > > > &tab) const
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)
Drift velocity [cm / ns].
virtual double ScaleLorentzAngle(const double lor) const
virtual bool ElectronLorentzAngle(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &lor)
Lorentz angle.
bool GetIonLongitudinalDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dl)
Get an entry in the table of longitudinal diffusion coefficients.
bool Diffusion(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, const std::vector< std::vector< std::vector< double > > > &difL, const std::vector< std::vector< std::vector< double > > > &difT, double &dl, double &dt) const
bool GetHoleAttachment(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &eta)
Get an entry in the table of attachment coefficients.
bool GetHoleVelocityExB(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
Get an entry in the table of drift speeds along ExB.
std::vector< std::vector< std::vector< double > > > m_eAlp
std::vector< std::vector< std::vector< double > > > m_hAlp
void ResetIonDissociation()
bool GetElectronAttachment(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &eta)
Get an entry in the table of attachment coefficients.
virtual bool GetDielectricFunction(const double e, double &eps1, double &eps2, const unsigned int i=0)
Get the complex dielectric function at a given energy.
virtual void EnableDrift(const bool on=true)
Switch electron/ion/hole on/off.
double GetDielectricConstant() const
Get the relative static dielectric constant.
virtual void SetNumberDensity(const double n)
Set the number density [cm-3].
bool SetElectronVelocityB(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double v)
Set an entry in the table of drift speeds along Btrans.
double GetPressure() const
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)
Drift velocity [cm / ns].
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)
Drift velocity [cm / ns].
virtual void EnablePrimaryIonisation(const bool on=true)
Make the medium ionisable or non-ionisable.
std::pair< unsigned int, unsigned int > m_extrAtt
int GetId() const
Return the id number of the class instance.
bool GetIonMobility(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &mu)
Get an entry in the table of ion mobilities.
void SetExtrapolationMethodTownsend(const std::string &extrLow, const std::string &extrHigh)
virtual void SetAtomicNumber(const double z)
Set the effective atomic number.
bool SetElectronTransverseDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double dt)
Set an entry in the table of transverse diffusion coefficients.
bool SetHoleTransverseDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double dt)
Set an entry in the table of transverse diffusion coefficients.
virtual double GetAtomicWeight() const
Get the effective atomic weight.
bool SetHoleTownsend(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double alpha)
Set an entry in the table of Townsend coefficients.
virtual bool GetElectronCollision(const double e, int &type, int &level, double &e1, double &dx, double &dy, double &dz, std::vector< std::pair< int, double > > &secondaries, int &ndxc, int &band)
Sample the collision type. Update energy and direction vector.
std::vector< std::vector< std::vector< double > > > m_iDifT
bool GetEntry(const unsigned int i, const unsigned int j, const unsigned int k, const std::string &fcn, const std::vector< std::vector< std::vector< double > > > &tab, double &val) const
void SetExtrapolationMethodIonMobility(const std::string &extrLow, const std::string &extrHigh)
std::pair< unsigned int, unsigned int > m_extrVel
virtual double ScaleElectricField(const double e) const
bool SetEntry(const unsigned int i, const unsigned int j, const unsigned int k, const std::string &fcn, std::vector< std::vector< std::vector< double > > > &tab, const double val)
virtual double ScaleDiffusionTensor(const double d) const
unsigned int GetNumberOfComponents() const
Get number of components of the medium.
std::vector< std::vector< std::vector< double > > > m_hDifL
virtual double GetElectronNullCollisionRate(const int band=0)
Null-collision rate [ns-1].
virtual double GetAtomicNumber() const
Get the effective atomic number.
bool GetElectronTownsend(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &alpha)
Get an entry in the table of Townsend coefficients.
std::vector< std::vector< std::vector< double > > > m_eVelE
std::vector< std::vector< std::vector< double > > > m_eVelX
std::vector< std::vector< std::vector< double > > > m_eDifL
void Init(const size_t nE, const size_t nB, const size_t nA, std::vector< std::vector< std::vector< double > > > &tab, const double val)
bool GetElectronLorentzAngle(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &lor)
Get an entry in the table of Lorentz angles.
virtual double ScaleTownsend(const double alpha) const
virtual double GetPhotonCollisionRate(const double e)
void SetDielectricConstant(const double eps)
Set the relative static dielectric constant.
virtual bool GetDeexcitationProduct(const unsigned int i, double &t, double &s, int &type, double &energy) const
virtual double GetElectronCollisionRate(const double e, const int band=0)
Collision rate [ns-1] for given electron energy.
bool GetHoleTownsend(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &alpha)
Get an entry in the table of Townsend coefficients.
bool GetExtrapolationIndex(std::string str, unsigned int &nb) const
void SetInterpolationMethodVelocity(const unsigned int intrp)
Set the degree of polynomial interpolation (usually 2).
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)
Longitudinal and transverse diffusion coefficients [cm1/2].
void SetInterpolationMethodDiffusion(const unsigned int intrp)
bool SetElectronVelocityE(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double v)
Set an entry in the table of drift speeds along E.
void SetExtrapolationMethodDiffusion(const std::string &extrLow, const std::string &extrHigh)
std::vector< double > m_eFields
void GetFieldGrid(std::vector< double > &efields, std::vector< double > &bfields, std::vector< double > &angles)
Get the fields and E-B angles used in the transport tables.
bool SetIonLongitudinalDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double dl)
Set an entry in the table of longitudinal diffusion coefficients.
std::vector< std::vector< std::vector< double > > > m_hDifT
virtual bool ElectronTownsend(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha)
Ionisation coefficient [cm-1].
void ResetElectronDiffusion()
virtual bool IsSemiconductor() const
Is this medium a semiconductor?
void SetFieldGrid(double emin, double emax, const size_t ne, bool logE, double bmin=0., double bmax=0., const size_t nb=1, double amin=HalfPi, double amax=HalfPi, const size_t na=1)
Set the range of fields to be covered by the transport tables.
virtual bool GetOpticalDataRange(double &emin, double &emax, const unsigned int i=0)
Get the energy range [eV] of the available optical data.
std::vector< std::vector< std::vector< double > > > m_eAtt
virtual void SetMassDensity(const double rho)
Set the mass density [g/cm3].
bool SetHoleVelocityE(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double v)
Set an entry in the table of drift speeds along E.
virtual double ScaleDissociation(const double diss) const
bool GetElectronVelocityExB(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
Get an entry in the table of drift speeds along ExB.
bool Alpha(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, const std::vector< std::vector< std::vector< double > > > &tab, unsigned int intp, const unsigned int thr, const std::pair< unsigned int, unsigned int > &extr, double &alpha) const
const std::string & GetName() const
Get the medium name/identifier.
std::vector< double > m_bAngles
std::vector< std::vector< std::vector< double > > > m_iDifL
std::vector< std::vector< std::vector< double > > > m_hVelE
virtual bool IsGas() const
Is this medium a gas?
std::vector< std::vector< std::vector< double > > > m_eLor
std::vector< std::vector< std::vector< double > > > m_eDifT
bool GetElectronTransverseDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dt)
Get an entry in the table of transverse diffusion coefficients.
virtual double GetElectronEnergy(const double px, const double py, const double pz, double &vx, double &vy, double &vz, const int band=0)
Dispersion relation (energy vs. wave vector)
void SetInterpolationMethodIonMobility(const unsigned int intrp)
void SetExtrapolationMethodVelocity(const std::string &extrLow, const std::string &extrHigh)
virtual bool ElectronAttachment(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta)
Attachment coefficient [cm-1].
virtual double HoleMobility()
Low-field mobility [cm2 V-1 ns-1].
std::pair< unsigned int, unsigned int > m_extrDis
std::vector< std::vector< std::vector< double > > > m_hAtt
void SetPressure(const double p)
void SetExtrapolationMethod(const std::string &low, const std::string &high, std::pair< unsigned int, unsigned int > &extr, const std::string &fcn)
bool GetHoleVelocityE(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
Get an entry in the table of drift speeds along E.
std::pair< unsigned int, unsigned int > m_extrAlp
void EnableDebugging()
Switch on/off debugging messages.
std::vector< std::vector< std::vector< double > > > m_eVelB
bool GetHoleVelocityB(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &v)
Get an entry in the table of drift speeds along Btrans.
bool IsIonisable() const
Is charge deposition by charged particles/photon enabled in this medium?
virtual void SetAtomicWeight(const double a)
Set the effective atomic weight.
void SetExtrapolationMethodAttachment(const std::string &extrLow, const std::string &extrHigh)
std::pair< unsigned int, unsigned int > m_extrLor
unsigned int m_nComponents
virtual bool IsConductor() const
Is this medium a conductor?
bool SetHoleAttachment(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double eta)
Set an entry in the table of attachment coefficients.
bool GetHoleTransverseDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dt)
Get an entry in the table of transverse diffusion coefficients.
bool GetElectronLongitudinalDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dl)
Get an entry in the table of longitudinal diffusion coefficients.
std::pair< unsigned int, unsigned int > m_extrDif
void SetInterpolationMethodAttachment(const unsigned int intrp)
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)
Longitudinal and transverse diffusion coefficients [cm1/2].
bool SetElectronLorentzAngle(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double lor)
Set an entry in the table of Lorentz angles.
double GetTemperature() const
Get the temperature [K].
bool GetHoleLongitudinalDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dl)
Get an entry in the table of longitudinal diffusion coefficients.
virtual bool IonDissociation(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &diss)
Dissociation coefficient.
virtual void ResetTables()
Reset all tables of transport parameters.
bool SetElectronVelocityExB(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double v)
Set an entry in the table of drift speeds along ExB.
bool SetHoleVelocityExB(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double v)
Set an entry in the table of drift speeds along ExB.
bool SetHoleLongitudinalDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double dl)
Set an entry in the table of longitudinal diffusion coefficients.
std::vector< std::vector< std::vector< double > > > m_hVelX
virtual ~Medium()
Destructor.
std::pair< unsigned int, unsigned int > m_extrMob
void Clone(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 std::pair< unsigned int, unsigned int > &extr, const double init, const std::string &label)
bool SetHoleVelocityB(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double v)
Set an entry in the table of drift speeds along Btrans.
void ResetHoleDiffusion()
std::vector< std::vector< std::vector< std::vector< double > > > > m_eDifM
std::vector< std::vector< std::vector< double > > > m_hVelB
bool Velocity(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, const std::vector< std::vector< std::vector< double > > > &velE, const std::vector< std::vector< std::vector< double > > > &velB, const std::vector< std::vector< std::vector< double > > > &velX, const double q, double &vx, double &vy, double &vz) const
std::vector< std::vector< std::vector< std::vector< double > > > > m_hDifM
void SetW(const double w)
Set the W value (average energy to produce an electron/ion or e/h pair).
std::vector< std::vector< std::vector< double > > > m_iMob
bool SetElectronAttachment(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double eta)
Set an entry in the table of attachment coefficients.
void ResetElectronTownsend()
virtual bool HoleAttachment(const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta)
Attachment coefficient [cm-1].
bool IsDriftable() const
Is charge carrier transport enabled in this medium?
void ResetElectronVelocity()
void SetInterpolationMethodTownsend(const unsigned int intrp)
virtual bool GetPhotoAbsorptionCrossSection(const double e, double &sigma, const unsigned int i=0)
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)
Longitudinal and transverse diffusion coefficients [cm1/2].
bool SetElectronLongitudinalDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double dl)
Set an entry in the table of longitudinal diffusion coefficients.
std::vector< std::vector< std::vector< double > > > m_iDis
bool SetIonTransverseDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, const double dt)
Set an entry in the table of transverse diffusion coefficients.
bool GetIonTransverseDiffusion(const unsigned int ie, const unsigned int ib, const unsigned int ia, double &dt)
Get an entry in the table of transverse diffusion coefficients.
bool SetIonMobility(const std::vector< double > &fields, const std::vector< double > &mobilities)