36 std::cerr <<
m_className <<
"::GetComponent: Index out of range.\n";
41 const double ez,
const double bx,
42 const double by,
const double bz,
double& vx,
43 double& vy,
double& vz) {
46 UpdateTransportParameters();
54 const double mu = -m_eMobility;
55 const double b2 = bx * bx + by * by + bz * bz;
62 const double muH = m_eHallFactor * mu;
63 const double muH2 = muH * muH;
64 const double eb = bx * ex + by * ey + bz * ez;
65 const double f = mu / (1. + muH2 * b2);
67 vx = f * (ex + muH * (ey * bz - ez * by) + muH2 * bx * eb);
68 vy = f * (ey + muH * (ez * bx - ex * bz) + muH2 * by * eb);
69 vz = f * (ez + muH * (ex * by - ey * bx) + muH2 * bz * eb);
75 const double ez,
const double bx,
76 const double by,
const double bz,
87 const double ez,
const double bx,
88 const double by,
const double bz,
99 const double bx,
const double by,
const double bz,
100 double& vx,
double& vy,
double& vz) {
103 UpdateTransportParameters();
111 const double mu = m_hMobility;
112 const double b2 = bx * bx + by * by + bz * bz;
119 const double muH = m_hHallFactor * mu;
120 const double muH2 = muH * muH;
121 const double eb = bx * ex + by * ey + bz * ez;
122 const double f = muH / (1. + muH2 * b2);
124 vx = f * (ex + muH * (ey * bz - ez * by) + muH2 * bx * eb);
125 vy = f * (ey + muH * (ez * bx - ex * bz) + muH2 * by * eb);
126 vz = f * (ez + muH * (ex * by - ey * bx) + muH2 * bz * eb);
132 const double bx,
const double by,
const double bz,
143 const double ez,
const double bx,
144 const double by,
const double bz,
double& eta) {
154 if (mue <= 0. || muh <= 0.) {
155 std::cerr <<
m_className <<
"::SetLowFieldMobility:\n"
156 <<
" Mobility must be greater than zero.\n";
161 m_userMobility =
true;
166 m_userMobility =
false;
170void MediumCdTe::UpdateTransportParameters() {
172 if (!m_userMobility) {
174 m_eMobility = 1.05e-6 * pow(t, -1.7);
175 m_hMobility = 0.1e-6 * pow(t, 1.67);
void UnsetLowFieldMobility()
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].
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 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 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 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 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].
void SetLowFieldMobility(const double mue, const double muh)
void GetComponent(const unsigned int i, std::string &label, double &f) override
Get the name and fraction of a given component.
Abstract base class for media.
void SetTemperature(const double t)
Set the temperature [K].
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 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].
std::vector< std::vector< std::vector< double > > > m_eAlp
std::vector< std::vector< std::vector< double > > > m_hAlp
virtual void EnableDrift(const bool on=true)
Switch electron/ion/hole on/off.
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 void EnablePrimaryIonisation(const bool on=true)
Make the medium ionisable or non-ionisable.
virtual void SetAtomicNumber(const double z)
Set the effective atomic number.
std::vector< std::vector< std::vector< double > > > m_eVelE
void SetDielectricConstant(const double eps)
Set the relative static dielectric constant.
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].
std::vector< std::vector< std::vector< double > > > m_eAtt
virtual void SetMassDensity(const double rho)
Set the mass density [g/cm3].
std::vector< std::vector< std::vector< double > > > m_hVelE
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].
std::vector< std::vector< std::vector< double > > > m_hAtt
virtual void SetAtomicWeight(const double a)
Set the effective atomic weight.
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].