Garfield++ 4.0
A toolkit for the detailed simulation of particle detectors based on ionisation measurement in gases and semiconductors
Loading...
Searching...
No Matches
Garfield::MediumGaN Class Reference

Gallium-Nitride. More...

#include <MediumGaN.hh>

+ Inheritance diagram for Garfield::MediumGaN:

Public Member Functions

 MediumGaN ()
 Constructor.
 
virtual ~MediumGaN ()
 Destructor.
 
bool IsSemiconductor () const override
 Is this medium a semiconductor?
 
void GetComponent (const unsigned int i, std::string &label, double &f) override
 Get the name and fraction of a given component.
 
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
 Drift velocity [cm / ns].
 
bool ElectronTownsend (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha) override
 Ionisation coefficient [cm-1].
 
bool ElectronAttachment (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta) override
 Attachment coefficient [cm-1].
 
double ElectronMobility () override
 Low-field mobility [cm2 V-1 ns-1].
 
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
 Drift velocity [cm / ns].
 
bool HoleTownsend (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &alpha) override
 Ionisation coefficient [cm-1].
 
bool HoleAttachment (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &eta) override
 Attachment coefficient [cm-1].
 
double HoleMobility () override
 Low-field mobility [cm2 V-1 ns-1].
 
void SetElectronConcentration (const double c)
 Set the electron concentration [cm-3].
 
void SetLowFieldMobility (const double mue, const double muh)
 Set the low-field mobility values [cm2 / (V ns)] explicitly.
 
void UnsetLowFieldMobility ()
 Use the default mobility models.
 
- Public Member Functions inherited from Garfield::Medium
 Medium ()
 Constructor.
 
virtual ~Medium ()
 Destructor.
 
int GetId () const
 Return the id number of the class instance.
 
const std::string & GetName () const
 Get the medium name/identifier.
 
virtual bool IsGas () const
 Is this medium a gas?
 
virtual bool IsSemiconductor () const
 Is this medium a semiconductor?
 
virtual bool IsConductor () const
 Is this medium a conductor?
 
void SetTemperature (const double t)
 Set the temperature [K].
 
double GetTemperature () const
 Get the temperature [K].
 
void SetPressure (const double p)
 
double GetPressure () const
 
void SetDielectricConstant (const double eps)
 Set the relative static dielectric constant.
 
double GetDielectricConstant () const
 Get the relative static dielectric constant.
 
unsigned int GetNumberOfComponents () const
 Get number of components of the medium.
 
virtual void GetComponent (const unsigned int i, std::string &label, double &f)
 Get the name and fraction of a given component.
 
virtual void SetAtomicNumber (const double z)
 Set the effective atomic number.
 
virtual double GetAtomicNumber () const
 Get the effective atomic number.
 
virtual void SetAtomicWeight (const double a)
 Set the effective atomic weight.
 
virtual double GetAtomicWeight () const
 Get the effective atomic weight.
 
virtual void SetNumberDensity (const double n)
 Set the number density [cm-3].
 
virtual double GetNumberDensity () const
 Get the number density [cm-3].
 
virtual void SetMassDensity (const double rho)
 Set the mass density [g/cm3].
 
virtual double GetMassDensity () const
 Get the mass density [g/cm3].
 
virtual void EnableDrift (const bool on=true)
 Switch electron/ion/hole on/off.
 
virtual void EnablePrimaryIonisation (const bool on=true)
 Make the medium ionisable or non-ionisable.
 
bool IsDriftable () const
 Is charge carrier transport enabled in this medium?
 
bool IsMicroscopic () const
 Does the medium have electron scattering rates?
 
bool IsIonisable () const
 Is charge deposition by charged particles/photon enabled in this medium?
 
void SetW (const double w)
 Set the W value (average energy to produce an electron/ion or e/h pair).
 
double GetW ()
 Get the W value.
 
void SetFanoFactor (const double f)
 Set the Fano factor.
 
double GetFanoFactor ()
 Get the Fano factor.
 
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 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].
 
virtual bool ElectronDiffusion (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double cov[3][3])
 
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].
 
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 bool ElectronLorentzAngle (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double &lor)
 Lorentz angle.
 
virtual double ElectronMobility ()
 Low-field mobility [cm2 V-1 ns-1].
 
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)
 
virtual void GetElectronMomentum (const double e, double &px, double &py, double &pz, int &band)
 
virtual double GetElectronNullCollisionRate (const int band=0)
 Null-collision rate [ns-1].
 
virtual double GetElectronCollisionRate (const double e, const int band=0)
 Collision rate [ns-1] for given electron energy.
 
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.
 
virtual unsigned int GetNumberOfDeexcitationProducts () const
 
virtual bool GetDeexcitationProduct (const unsigned int i, double &t, double &s, int &type, double &energy) 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 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].
 
virtual bool HoleDiffusion (const double ex, const double ey, const double ez, const double bx, const double by, const double bz, double cov[3][3])
 Diffusion tensor.
 
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].
 
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].
 
virtual double HoleMobility ()
 Low-field mobility [cm2 V-1 ns-1].
 
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 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].
 
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 double IonMobility ()
 Low-field mobility [cm2 V-1 ns-1].
 
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.
 
void SetFieldGrid (const std::vector< double > &efields, const std::vector< double > &bfields, const std::vector< double > &angles)
 Set the fields and E-B angles to be used in the transport tables.
 
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 SetElectronVelocityE (const size_t ie, const size_t ib, const size_t ia, const double v)
 Set an entry in the table of drift speeds along E.
 
bool GetElectronVelocityE (const size_t ie, const size_t ib, const size_t ia, double &v)
 Get an entry in the table of drift speeds along E.
 
bool SetElectronVelocityExB (const size_t ie, const size_t ib, const size_t ia, const double v)
 Set an entry in the table of drift speeds along ExB.
 
bool GetElectronVelocityExB (const size_t ie, const size_t ib, const size_t ia, double &v)
 Get an entry in the table of drift speeds along ExB.
 
bool SetElectronVelocityB (const size_t ie, const size_t ib, const size_t ia, const double v)
 Set an entry in the table of drift speeds along Btrans.
 
bool GetElectronVelocityB (const size_t ie, const size_t ib, const size_t ia, double &v)
 Get an entry in the table of drift speeds along Btrans.
 
bool SetElectronLongitudinalDiffusion (const size_t ie, const size_t ib, const size_t ia, const double dl)
 Set an entry in the table of longitudinal diffusion coefficients.
 
bool GetElectronLongitudinalDiffusion (const size_t ie, const size_t ib, const size_t ia, double &dl)
 Get an entry in the table of longitudinal diffusion coefficients.
 
bool SetElectronTransverseDiffusion (const size_t ie, const size_t ib, const size_t ia, const double dt)
 Set an entry in the table of transverse diffusion coefficients.
 
bool GetElectronTransverseDiffusion (const size_t ie, const size_t ib, const size_t ia, double &dt)
 Get an entry in the table of transverse diffusion coefficients.
 
bool SetElectronTownsend (const size_t ie, const size_t ib, const size_t ia, const double alpha)
 Set an entry in the table of Townsend coefficients.
 
bool GetElectronTownsend (const size_t ie, const size_t ib, const size_t ia, double &alpha)
 Get an entry in the table of Townsend coefficients.
 
bool SetElectronAttachment (const size_t ie, const size_t ib, const size_t ia, const double eta)
 Set an entry in the table of attachment coefficients.
 
bool GetElectronAttachment (const size_t ie, const size_t ib, const size_t ia, double &eta)
 Get an entry in the table of attachment coefficients.
 
bool SetElectronLorentzAngle (const size_t ie, const size_t ib, const size_t ia, const double lor)
 Set an entry in the table of Lorentz angles.
 
bool GetElectronLorentzAngle (const size_t ie, const size_t ib, const size_t ia, double &lor)
 Get an entry in the table of Lorentz angles.
 
bool SetHoleVelocityE (const size_t ie, const size_t ib, const size_t ia, const double v)
 Set an entry in the table of drift speeds along E.
 
bool GetHoleVelocityE (const size_t ie, const size_t ib, const size_t ia, double &v)
 Get an entry in the table of drift speeds along E.
 
bool SetHoleVelocityExB (const size_t ie, const size_t ib, const size_t ia, const double v)
 Set an entry in the table of drift speeds along ExB.
 
bool GetHoleVelocityExB (const size_t ie, const size_t ib, const size_t ia, double &v)
 Get an entry in the table of drift speeds along ExB.
 
bool SetHoleVelocityB (const size_t ie, const size_t ib, const size_t ia, const double v)
 Set an entry in the table of drift speeds along Btrans.
 
bool GetHoleVelocityB (const size_t ie, const size_t ib, const size_t ia, double &v)
 Get an entry in the table of drift speeds along Btrans.
 
bool SetHoleLongitudinalDiffusion (const size_t ie, const size_t ib, const size_t ia, const double dl)
 Set an entry in the table of longitudinal diffusion coefficients.
 
bool GetHoleLongitudinalDiffusion (const size_t ie, const size_t ib, const size_t ia, double &dl)
 Get an entry in the table of longitudinal diffusion coefficients.
 
bool SetHoleTransverseDiffusion (const size_t ie, const size_t ib, const size_t ia, const double dt)
 Set an entry in the table of transverse diffusion coefficients.
 
bool GetHoleTransverseDiffusion (const size_t ie, const size_t ib, const size_t ia, double &dt)
 Get an entry in the table of transverse diffusion coefficients.
 
bool SetHoleTownsend (const size_t ie, const size_t ib, const size_t ia, const double alpha)
 Set an entry in the table of Townsend coefficients.
 
bool GetHoleTownsend (const size_t ie, const size_t ib, const size_t ia, double &alpha)
 Get an entry in the table of Townsend coefficients.
 
bool SetHoleAttachment (const size_t ie, const size_t ib, const size_t ia, const double eta)
 Set an entry in the table of attachment coefficients.
 
bool GetHoleAttachment (const size_t ie, const size_t ib, const size_t ia, double &eta)
 Get an entry in the table of attachment coefficients.
 
bool SetIonMobility (const std::vector< double > &fields, const std::vector< double > &mobilities)
 
bool SetIonMobility (const size_t ie, const size_t ib, const size_t ia, const double mu)
 Set an entry in the table of ion mobilities.
 
bool GetIonMobility (const size_t ie, const size_t ib, const size_t ia, double &mu)
 Get an entry in the table of ion mobilities.
 
bool SetIonLongitudinalDiffusion (const size_t ie, const size_t ib, const size_t ia, const double dl)
 Set an entry in the table of longitudinal diffusion coefficients.
 
bool GetIonLongitudinalDiffusion (const size_t ie, const size_t ib, const size_t ia, double &dl)
 Get an entry in the table of longitudinal diffusion coefficients.
 
bool SetIonTransverseDiffusion (const size_t ie, const size_t ib, const size_t ia, const double dt)
 Set an entry in the table of transverse diffusion coefficients.
 
bool GetIonTransverseDiffusion (const size_t ie, const size_t ib, const size_t ia, double &dt)
 Get an entry in the table of transverse diffusion coefficients.
 
bool SetIonDissociation (const size_t ie, const size_t ib, const size_t ia, const double diss)
 Set an entry in the table of dissociation coefficients.
 
bool GetIonDissociation (const size_t ie, const size_t ib, const size_t ia, double &diss)
 Get an entry in the table of dissociation coefficients.
 
virtual void ResetTables ()
 Reset all tables of transport parameters.
 
void ResetElectronVelocity ()
 
void ResetElectronDiffusion ()
 
void ResetElectronTownsend ()
 
void ResetElectronAttachment ()
 
void ResetElectronLorentzAngle ()
 
void ResetHoleVelocity ()
 
void ResetHoleDiffusion ()
 
void ResetHoleTownsend ()
 
void ResetHoleAttachment ()
 
void ResetIonMobility ()
 
void ResetIonDiffusion ()
 
void ResetIonDissociation ()
 
void SetExtrapolationMethodVelocity (const std::string &extrLow, const std::string &extrHigh)
 
void SetExtrapolationMethodDiffusion (const std::string &extrLow, const std::string &extrHigh)
 
void SetExtrapolationMethodTownsend (const std::string &extrLow, const std::string &extrHigh)
 
void SetExtrapolationMethodAttachment (const std::string &extrLow, const std::string &extrHigh)
 
void SetExtrapolationMethodIonMobility (const std::string &extrLow, const std::string &extrHigh)
 
void SetExtrapolationMethodIonDissociation (const std::string &extrLow, const std::string &extrHigh)
 
void SetInterpolationMethodVelocity (const unsigned int intrp)
 Set the degree of polynomial interpolation (usually 2).
 
void SetInterpolationMethodDiffusion (const unsigned int intrp)
 
void SetInterpolationMethodTownsend (const unsigned int intrp)
 
void SetInterpolationMethodAttachment (const unsigned int intrp)
 
void SetInterpolationMethodIonMobility (const unsigned int intrp)
 
void SetInterpolationMethodIonDissociation (const unsigned int intrp)
 
virtual double ScaleElectricField (const double e) const
 
virtual double UnScaleElectricField (const double e) const
 
virtual double ScaleVelocity (const double v) const
 
virtual double ScaleDiffusion (const double d) const
 
virtual double ScaleDiffusionTensor (const double d) const
 
virtual double ScaleTownsend (const double alpha) const
 
virtual double ScaleAttachment (const double eta) const
 
virtual double ScaleLorentzAngle (const double lor) const
 
virtual double ScaleDissociation (const double diss) const
 
virtual bool GetOpticalDataRange (double &emin, double &emax, const unsigned int i=0)
 Get the energy range [eV] of the available optical data.
 
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 bool GetPhotoAbsorptionCrossSection (const double e, double &sigma, const unsigned int i=0)
 
virtual double GetPhotonCollisionRate (const double e)
 
virtual bool GetPhotonCollision (const double e, int &type, int &level, double &e1, double &ctheta, int &nsec, double &esec)
 
void EnableDebugging ()
 Switch on/off debugging messages.
 
void DisableDebugging ()
 

Additional Inherited Members

- Protected Member Functions inherited from Garfield::Medium
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
 
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 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< std::vector< double > > > > &diff, double cov[3][3]) const
 
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
 
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
 
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
 
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
 
bool SetEntry (const size_t i, const size_t j, const size_t k, const std::string &fcn, std::vector< std::vector< std::vector< double > > > &tab, const double val)
 
bool GetEntry (const size_t i, const size_t j, const size_t k, const std::string &fcn, const std::vector< std::vector< std::vector< double > > > &tab, double &val) const
 
void SetExtrapolationMethod (const std::string &low, const std::string &high, std::pair< unsigned int, unsigned int > &extr, const std::string &fcn)
 
bool GetExtrapolationIndex (std::string str, unsigned int &nb) const
 
size_t SetThreshold (const std::vector< std::vector< std::vector< double > > > &tab) const
 
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)
 
void Clone (std::vector< std::vector< std::vector< std::vector< double > > > > &tab, const size_t n, 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)
 
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)
 
void Init (const size_t nE, const size_t nB, const size_t nA, const size_t nT, std::vector< std::vector< std::vector< std::vector< double > > > > &tab, const double val)
 
- Protected Attributes inherited from Garfield::Medium
std::string m_className = "Medium"
 
int m_id
 
unsigned int m_nComponents = 1
 
std::string m_name = ""
 
double m_temperature = 293.15
 
double m_pressure = 760.
 
double m_epsilon = 1.
 
double m_z = 1.
 
double m_a = 0.
 
double m_density = 0.
 
double m_w = 0.
 
double m_fano = 0.
 
bool m_driftable = false
 
bool m_microscopic = false
 
bool m_ionisable = false
 
bool m_isChanged = true
 
bool m_debug = false
 
bool m_tab2d = false
 
std::vector< double > m_eFields
 
std::vector< double > m_bFields
 
std::vector< double > m_bAngles
 
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_eVelB
 
std::vector< std::vector< std::vector< double > > > m_eDifL
 
std::vector< std::vector< std::vector< double > > > m_eDifT
 
std::vector< std::vector< std::vector< double > > > m_eAlp
 
std::vector< std::vector< std::vector< double > > > m_eAtt
 
std::vector< std::vector< std::vector< double > > > m_eLor
 
std::vector< std::vector< std::vector< std::vector< double > > > > m_eDifM
 
std::vector< std::vector< std::vector< double > > > m_hVelE
 
std::vector< std::vector< std::vector< double > > > m_hVelX
 
std::vector< std::vector< std::vector< double > > > m_hVelB
 
std::vector< std::vector< std::vector< double > > > m_hDifL
 
std::vector< std::vector< std::vector< double > > > m_hDifT
 
std::vector< std::vector< std::vector< double > > > m_hAlp
 
std::vector< std::vector< std::vector< double > > > m_hAtt
 
std::vector< std::vector< std::vector< std::vector< double > > > > m_hDifM
 
std::vector< std::vector< std::vector< double > > > m_iMob
 
std::vector< std::vector< std::vector< double > > > m_iDifL
 
std::vector< std::vector< std::vector< double > > > m_iDifT
 
std::vector< std::vector< std::vector< double > > > m_iDis
 
unsigned int m_eThrAlp = 0
 
unsigned int m_eThrAtt = 0
 
unsigned int m_hThrAlp = 0
 
unsigned int m_hThrAtt = 0
 
unsigned int m_iThrDis = 0
 
std::pair< unsigned int, unsigned int > m_extrVel = {0, 1}
 
std::pair< unsigned int, unsigned int > m_extrDif = {0, 1}
 
std::pair< unsigned int, unsigned int > m_extrAlp = {0, 1}
 
std::pair< unsigned int, unsigned int > m_extrAtt = {0, 1}
 
std::pair< unsigned int, unsigned int > m_extrLor = {0, 1}
 
std::pair< unsigned int, unsigned int > m_extrMob = {0, 1}
 
std::pair< unsigned int, unsigned int > m_extrDis = {0, 1}
 
unsigned int m_intpVel = 2
 
unsigned int m_intpDif = 2
 
unsigned int m_intpAlp = 2
 
unsigned int m_intpAtt = 2
 
unsigned int m_intpLor = 2
 
unsigned int m_intpMob = 2
 
unsigned int m_intpDis = 2
 
- Static Protected Attributes inherited from Garfield::Medium
static int m_idCounter = -1
 

Detailed Description

Gallium-Nitride.

Definition at line 10 of file MediumGaN.hh.

Constructor & Destructor Documentation

◆ MediumGaN()

Garfield::MediumGaN::MediumGaN ( )

Constructor.

Definition at line 14 of file MediumGaN.cc.

14 : Medium() {
15 m_className = "MediumGaN";
16 m_name = "GaN";
17
18 // J. Wang et al.,
19 // Review of using gallium nitride for ionizing radiation detection,
20 // Appl. Phys. Rev. 2 (2015),
21 // http://dx.doi.org/10.1063/1.4929913
22
23 SetTemperature(300.);
26 SetAtomicWeight(41.865);
27 SetMassDensity(6.15);
28
31 m_microscopic = false;
32
33 m_w = 8.9;
34 m_fano = 0.1;
35}
void SetTemperature(const double t)
Set the temperature [K].
Definition: Medium.cc:71
bool m_microscopic
Definition: Medium.hh:523
double m_fano
Definition: Medium.hh:519
virtual void EnableDrift(const bool on=true)
Switch electron/ion/hole on/off.
Definition: Medium.hh:67
std::string m_name
Definition: Medium.hh:502
virtual void EnablePrimaryIonisation(const bool on=true)
Make the medium ionisable or non-ionisable.
Definition: Medium.hh:69
virtual void SetAtomicNumber(const double z)
Set the effective atomic number.
Definition: Medium.cc:114
void SetDielectricConstant(const double eps)
Set the relative static dielectric constant.
Definition: Medium.cc:91
virtual void SetMassDensity(const double rho)
Set the mass density [g/cm3].
Definition: Medium.cc:144
Medium()
Constructor.
Definition: Medium.cc:60
virtual void SetAtomicWeight(const double a)
Set the effective atomic weight.
Definition: Medium.cc:124
std::string m_className
Definition: Medium.hh:493

◆ ~MediumGaN()

virtual Garfield::MediumGaN::~MediumGaN ( )
inlinevirtual

Destructor.

Definition at line 15 of file MediumGaN.hh.

15{}

Member Function Documentation

◆ ElectronAttachment()

bool Garfield::MediumGaN::ElectronAttachment ( const double  ex,
const double  ey,
const double  ez,
const double  bx,
const double  by,
const double  bz,
double &  eta 
)
overridevirtual

Attachment coefficient [cm-1].

Reimplemented from Garfield::Medium.

Definition at line 108 of file MediumGaN.cc.

111 {
112 eta = 0.;
113 if (!m_eAtt.empty()) {
114 // Interpolation in user table.
115 return Medium::ElectronAttachment(ex, ey, ez, bx, by, bz, eta);
116 }
117 return true;
118}
std::vector< std::vector< std::vector< double > > > m_eAtt
Definition: Medium.hh:547
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].
Definition: Medium.cc:416

◆ ElectronMobility()

double Garfield::MediumGaN::ElectronMobility ( )
inlineoverridevirtual

Low-field mobility [cm2 V-1 ns-1].

Reimplemented from Garfield::Medium.

Definition at line 32 of file MediumGaN.hh.

32{ return m_eMobility; }

◆ ElectronTownsend()

bool Garfield::MediumGaN::ElectronTownsend ( const double  ex,
const double  ey,
const double  ez,
const double  bx,
const double  by,
const double  bz,
double &  alpha 
)
overridevirtual

Ionisation coefficient [cm-1].

Reimplemented from Garfield::Medium.

Definition at line 88 of file MediumGaN.cc.

91 {
92 alpha = 0.;
93 if (m_isChanged) {
94 UpdateTransportParameters();
95 m_isChanged = false;
96 }
97 if (!m_eAlp.empty()) {
98 // Interpolation in user table.
99 return Medium::ElectronTownsend(ex, ey, ez, bx, by, bz, alpha);
100 }
101 const double emag = sqrt(ex * ex + ey * ey + ez * ez);
102 if (emag > Small) {
103 alpha = m_eImpactA * exp(-m_eImpactB / emag);
104 }
105 return true;
106}
std::vector< std::vector< std::vector< double > > > m_eAlp
Definition: Medium.hh:546
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].
Definition: Medium.cc:403
bool m_isChanged
Definition: Medium.hh:527
DoubleAc exp(const DoubleAc &f)
Definition: DoubleAc.cpp:377
DoubleAc sqrt(const DoubleAc &f)
Definition: DoubleAc.cpp:314

◆ ElectronVelocity()

bool Garfield::MediumGaN::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 
)
overridevirtual

Drift velocity [cm / ns].

Reimplemented from Garfield::Medium.

Definition at line 48 of file MediumGaN.cc.

51 {
52 vx = vy = vz = 0.;
53 if (m_isChanged) {
54 UpdateTransportParameters();
55 m_isChanged = false;
56 }
57 if (!m_eVelE.empty()) {
58 // Interpolation in user table.
59 return Medium::ElectronVelocity(ex, ey, ez, bx, by, bz, vx, vy, vz);
60 }
61 // Calculate the mobility.
62 const double emag = sqrt(ex * ex + ey * ey + ez * ez);
63 constexpr double vsat = 1.27e-2;
64 constexpr double ec = 172.e3;
65 const double e0 = emag / ec;
66 const double e1 = pow(e0, 4.19);
67 const double den = 1. + e1 + 3.24 * pow(e0, 0.885);
68 const double mu = -(m_eMobility + vsat * e1 / emag) / den;
69 const double b2 = bx * bx + by * by + bz * bz;
70 if (b2 < Small) {
71 vx = mu * ex;
72 vy = mu * ey;
73 vz = mu * ez;
74 } else {
75 // Hall mobility
76 const double muH = m_eHallFactor * mu;
77 const double mu2 = muH * muH;
78 const double eb = bx * ex + by * ey + bz * ez;
79 const double f = muH / (1. + mu2 * b2);
80 // Compute the drift velocity using the Langevin equation.
81 vx = f * (ex + muH * (ey * bz - ez * by) + mu2 * bx * eb);
82 vy = f * (ey + muH * (ez * bx - ex * bz) + mu2 * by * eb);
83 vz = f * (ez + muH * (ex * by - ey * bx) + mu2 * bz * eb);
84 }
85 return true;
86}
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].
Definition: Medium.cc:379
std::vector< std::vector< std::vector< double > > > m_eVelE
Definition: Medium.hh:541
double den[nEnergySteps]
DoubleAc pow(const DoubleAc &f, double p)
Definition: DoubleAc.cpp:337

◆ GetComponent()

void Garfield::MediumGaN::GetComponent ( const unsigned int  i,
std::string &  label,
double &  f 
)
overridevirtual

Get the name and fraction of a given component.

Reimplemented from Garfield::Medium.

Definition at line 37 of file MediumGaN.cc.

38 {
39 if (i == 0) {
40 label = "Ga";
41 f = 0.5;
42 } else if (i == 1) {
43 label = "N";
44 f = 0.5;
45 }
46}

◆ HoleAttachment()

bool Garfield::MediumGaN::HoleAttachment ( const double  ex,
const double  ey,
const double  ez,
const double  bx,
const double  by,
const double  bz,
double &  eta 
)
overridevirtual

Attachment coefficient [cm-1].

Reimplemented from Garfield::Medium.

Definition at line 178 of file MediumGaN.cc.

180 {
181 eta = 0.;
182 if (!m_hAtt.empty()) {
183 // Interpolation in user table.
184 return Medium::HoleAttachment(ex, ey, ez, bx, by, bz, eta);
185 }
186 return true;
187}
std::vector< std::vector< std::vector< double > > > m_hAtt
Definition: Medium.hh:559
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].
Definition: Medium.cc:547

◆ HoleMobility()

double Garfield::MediumGaN::HoleMobility ( )
inlineoverridevirtual

Low-field mobility [cm2 V-1 ns-1].

Reimplemented from Garfield::Medium.

Definition at line 43 of file MediumGaN.hh.

43{ return m_hMobility; }

◆ HoleTownsend()

bool Garfield::MediumGaN::HoleTownsend ( const double  ex,
const double  ey,
const double  ez,
const double  bx,
const double  by,
const double  bz,
double &  alpha 
)
overridevirtual

Ionisation coefficient [cm-1].

Reimplemented from Garfield::Medium.

Definition at line 159 of file MediumGaN.cc.

161 {
162 alpha = 0.;
163 if (m_isChanged) {
164 UpdateTransportParameters();
165 m_isChanged = false;
166 }
167 if (!m_hAlp.empty()) {
168 // Interpolation in user table.
169 return Medium::HoleTownsend(ex, ey, ez, bx, by, bz, alpha);
170 }
171 const double emag = sqrt(ex * ex + ey * ey + ez * ez);
172 if (emag > Small) {
173 alpha = m_hImpactA * exp(-m_hImpactB / emag);
174 }
175 return true;
176}
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].
Definition: Medium.cc:534
std::vector< std::vector< std::vector< double > > > m_hAlp
Definition: Medium.hh:558

◆ HoleVelocity()

bool Garfield::MediumGaN::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 
)
overridevirtual

Drift velocity [cm / ns].

Reimplemented from Garfield::Medium.

Definition at line 120 of file MediumGaN.cc.

122 {
123 vx = vy = vz = 0.;
124 if (m_isChanged) {
125 UpdateTransportParameters();
126 m_isChanged = false;
127 }
128 if (!m_hVelE.empty()) {
129 // Interpolation in user table.
130 return Medium::HoleVelocity(ex, ey, ez, bx, by, bz, vx, vy, vz);
131 }
132 // Calculate the mobility.
133 const double emag = sqrt(ex * ex + ey * ey + ez * ez);
134 // Values for saturation velocity and exponent from Sentaurus Synopsys.
135 constexpr double vsat = 7.e-3;
136 constexpr double beta = 0.725;
137 constexpr double invbeta = 1. / beta;
138 const double r = m_hMobility * emag / vsat;
139 const double mu = m_hMobility / pow(1. + pow(r, beta), invbeta);
140 const double b2 = bx * bx + by * by + bz * bz;
141 if (b2 < Small) {
142 vx = mu * ex;
143 vy = mu * ey;
144 vz = mu * ez;
145 } else {
146 // Hall mobility
147 const double muH = m_hHallFactor * mu;
148 const double mu2 = muH * muH;
149 const double eb = bx * ex + by * ey + bz * ez;
150 const double f = mu / (1. + mu2 * b2);
151 // Compute the drift velocity using the Langevin equation.
152 vx = f * (ex + muH * (ey * bz - ez * by) + mu2 * bx * eb);
153 vy = f * (ey + muH * (ez * bx - ex * bz) + mu2 * by * eb);
154 vz = f * (ez + muH * (ex * by - ey * bx) + mu2 * bz * eb);
155 }
156 return true;
157}
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].
Definition: Medium.cc:513
std::vector< std::vector< std::vector< double > > > m_hVelE
Definition: Medium.hh:553

◆ IsSemiconductor()

bool Garfield::MediumGaN::IsSemiconductor ( ) const
inlineoverridevirtual

Is this medium a semiconductor?

Reimplemented from Garfield::Medium.

Definition at line 17 of file MediumGaN.hh.

17{ return true; }

◆ SetElectronConcentration()

void Garfield::MediumGaN::SetElectronConcentration ( const double  c)

Set the electron concentration [cm-3].

Definition at line 189 of file MediumGaN.cc.

189 {
190
191 if (c < 0.) {
192 std::cerr << m_className << "::SetElectronConcentration:\n"
193 << " Concentration cannot be negative.\n";
194 return;
195 }
196 m_eDensity = c;
197}

◆ SetLowFieldMobility()

void Garfield::MediumGaN::SetLowFieldMobility ( const double  mue,
const double  muh 
)

Set the low-field mobility values [cm2 / (V ns)] explicitly.

Definition at line 199 of file MediumGaN.cc.

199 {
200
201 if (mue <= 0. || muh <= 0.) {
202 std::cerr << m_className << "::SetLowFieldMobility:\n"
203 << " Mobility must be greater than zero.\n";
204 return;
205 }
206 m_eMobility = mue;
207 m_hMobility = muh;
208 m_userMobility = true;
209 m_isChanged = true;
210}

◆ UnsetLowFieldMobility()

void Garfield::MediumGaN::UnsetLowFieldMobility ( )

Use the default mobility models.

Definition at line 212 of file MediumGaN.cc.

212 {
213 m_userMobility = false;
214 m_isChanged = true;
215}

The documentation for this class was generated from the following files: