34 std::cerr <<
m_className <<
"::GetComponent: Index out of range.\n";
39 const double ex,
const double ey,
const double ez,
40 const double bx,
const double by,
const double bz,
41 double& vx,
double& vy,
double& vz) {
44 UpdateTransportParameters();
52 const double emag = sqrt(ex * ex + ey * ey + ez * ez);
53 const double mu = -m_eMobility / (1. + m_eMobility * emag / m_eSatVel);
54 const double b2 = bx * bx + by * by + bz * bz;
60 Langevin(ex, ey, ez, bx, by, bz, mu, m_eHallFactor * mu, vx, vy, vz);
66 const double ex,
const double ey,
const double ez,
67 const double bx,
const double by,
const double bz,
double& alpha) {
77 const double ex,
const double ey,
const double ez,
78 const double bx,
const double by,
const double bz,
double& eta) {
88 const double ex,
const double ey,
const double ez,
89 const double bx,
const double by,
const double bz,
90 double& vx,
double& vy,
double& vz) {
93 UpdateTransportParameters();
101 const double emag = sqrt(ex * ex + ey * ey + ez * ez);
102 const double mu = m_hMobility / (1. + m_hMobility * emag / m_hSatVel);
103 const double b2 = bx * bx + by * by + bz * bz;
109 Langevin(ex, ey, ez, bx, by, bz, mu, m_hHallFactor * mu, vx, vy, vz);
115 const double ex,
const double ey,
const double ez,
116 const double bx,
const double by,
const double bz,
double& alpha) {
126 const double ex,
const double ey,
const double ez,
127 const double bx,
const double by,
const double bz,
double& eta) {
137 if (mue <= 0. || muh <= 0.) {
138 std::cerr <<
m_className <<
"::SetLowFieldMobility:\n"
139 <<
" Mobility must be greater than zero.\n";
144 m_userMobility =
true;
149 m_userMobility =
false;
154 const double vsath) {
155 std::lock_guard<std::mutex> guard(m_mutex);
156 if (vsate <= 0. || vsath <= 0.) {
157 std::cerr <<
m_className <<
"::SetSaturationVelocity:\n"
158 <<
" Velocity must be greater than zero.\n";
166 std::lock_guard<std::mutex> guard(m_mutex);
171void MediumDiamond::UpdateTransportParameters() {
172 std::lock_guard<std::mutex> guard(m_mutex);
179 if (!m_userMobility) {
181 m_eMobility = 4.551e-6 * pow(t, -1.5);
182 m_hMobility = 2.750e-6 * pow(t, -1.5);
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].
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 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 UnsetSaturationVelocity()
void SetSaturationVelocity(const double vsate, const double vsath)
void UnsetLowFieldMobility()
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].
void GetComponent(const unsigned int i, std::string &label, double &f) override
Get the name and fraction of a given component.
MediumDiamond()
Constructor.
void SetLowFieldMobility(const double mue, const double muh)
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 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 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].
static void Langevin(const double ex, const double ey, const double ez, double bx, double by, double bz, const double mu, double &vx, double &vy, double &vz)