44 const double ez,
const double bx,
45 const double by,
const double bz,
double& vx,
46 double& vy,
double& vz) {
49 UpdateTransportParameters();
59 const double e2 = ex * ex + ey * ey + ez * ez;
61 constexpr double r = 1. / 4000.;
62 constexpr double r4 = r * r * r * r;
63 const double er4 = e2 * e2 * r4;
64 const double mu = -(m_eMobility + er4 * m_eSatVel / sqrt(e2)) / (1. + er4);
65 const double bmag = sqrt(bx * bx + by * by + bz * bz);
72 const double muH = m_eHallFactor * mu;
73 const double mu2 = muH * muH;
74 const double eb = bx * ex + by * ey + bz * ez;
75 const double f = muH / (1. + mu2 * bmag * bmag);
77 vx = f * (ex + muH * (ey * bz - ez * by) + mu2 * bx * eb);
78 vy = f * (ey + muH * (ez * bx - ex * bz) + mu2 * by * eb);
79 vz = f * (ez + muH * (ex * by - ey * bx) + mu2 * bz * eb);
85 const double ez,
const double bx,
86 const double by,
const double bz,
90 UpdateTransportParameters();
97 const double emag = sqrt(ex * ex + ey * ey + ez * ez);
99 alpha = m_eImpactA * exp(-pow(m_eImpactB / emag, 1.82));
105 const double ez,
const double bx,
106 const double by,
const double bz,
117 const double bx,
const double by,
const double bz,
118 double& vx,
double& vy,
double& vz) {
121 UpdateTransportParameters();
131 const double emag = sqrt(ex * ex + ey * ey + ez * ez);
133 constexpr double r = 1. / 4000.;
134 const double mu = (m_hMobility + m_hSatVel * r) / (1. + emag * r);
135 const double bmag = sqrt(bx * bx + by * by + bz * bz);
142 const double muH = m_hHallFactor * mu;
143 const double mu2 = muH * muH;
144 const double eb = bx * ex + by * ey + bz * ez;
145 const double f = mu / (1. + mu2 * bmag * bmag);
147 vx = f * (ex + muH * (ey * bz - ez * by) + mu2 * bx * eb);
148 vy = f * (ey + muH * (ez * bx - ex * bz) + mu2 * by * eb);
149 vz = f * (ez + muH * (ex * by - ey * bx) + mu2 * bz * eb);
155 const double bx,
const double by,
const double bz,
159 UpdateTransportParameters();
166 const double emag = sqrt(ex * ex + ey * ey + ez * ez);
169 alpha = m_hImpactA * exp(-pow(m_hImpactB / emag, 1.75));
175 const double ez,
const double bx,
176 const double by,
const double bz,
double& eta) {
187 if (mue <= 0. || muh <= 0.) {
188 std::cerr <<
m_className <<
"::SetLowFieldMobility:\n"
189 <<
" Mobility must be greater than zero.\n";
194 m_userMobility =
true;
199 m_userMobility =
false;
203void MediumGaAs::UpdateTransportParameters() {
207 if (!m_userMobility) {
209 constexpr double eMu0 = 8.0e-6;
210 constexpr double hMu0 = 0.4e-6;
211 m_eMobility = eMu0 / t;
212 m_hMobility = hMu0 * pow(t, -2.1);
221 m_eSatVel = std::max(1.13e-2 - 3.6e-3 * t, 5.e-4);
222 m_hSatVel = std::max(1.13e-2 - 3.6e-3 * t, 5.e-4);
226 m_eImpactA = 1.889e5 * (1. + 0.588 * (t - 1));
227 m_hImpactA = 2.215e5 * (1. + 0.588 * (t - 1));
228 m_eImpactB = 5.75e5 * (1. + 0.248 * (t - 1));
229 m_hImpactB = 6.57e5 * (1. + 0.248 * (t - 1));
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 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 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].
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 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)
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].