1#ifndef VIENNASHE_SHE_SCATTERING_IMPURITY_SCATTERING_HPP
2#define VIENNASHE_SHE_SCATTERING_IMPURITY_SCATTERING_HPP
43 template <
typename DeviceType>
58 double kinetic_energy,
61 return this->get(elem, kinetic_energy, ctype);
65 double kinetic_energy,
68 return this->get(elem, kinetic_energy, ctype);
83 template <
typename ElementType>
85 double kinetic_energy,
91 result[0].initial_energy(kinetic_energy);
92 result[0].final_energy(kinetic_energy);
93 result[0].rate( getScatteringRate(elem, kinetic_energy, ctype) );
94 result[0].generation_rate(0);
100 template <
typename ElementType>
101 double getScatteringRate(ElementType
const & elem,
102 double kinetic_energy,
111 return getScatteringRate(NI, kinetic_energy, temp, ctype);
114 double getScatteringRate(
double NI,
123 const double prefactor = (2.0 * pi * NI * q * q * q * q) / (hbar * eps * eps);
131 const double lambda_sq = (eps * kB * T) / (q * q * NI );
132 const double a = 4.0 * lambda_sq * norm_k * norm_k;
134 const double scattering_rate = prefactor
135 * 0.5 * (std::log(1.0 + a) - (a / (1.0 + a)) ) / 4.0 / std::pow(norm_k, 4.0);
137 if (scattering_rate < 0.0)
140 return scattering_rate;
143 ionized_impurity_scattering_parameters params_;
The main SHE configuration class. To be adjusted by the user for his/her needs.
viennashe::physics::dispersion_proxy dispersion_relation(viennashe::carrier_type_id ctype) const
Returns the dispersion relation for electrons.
Defines the physical properties of a device, e.g. doping. This is the implementation for 2d and highe...
double norm_k(double ekin, double theta=0, double phi=0) const
Returns the norm of the k-vector as a function of energy (and angles, eventually)....
Ionized impurity scattering process.
base_type::scatter_processes_type scatter_processes_type
ionized_impurity_scattering(DeviceType const &device, viennashe::config const &conf)
scatter_processes_type value_type
scatter_processes_type operator()(CellType const &elem, double kinetic_energy, viennashe::carrier_type_id ctype) const
scatter_processes_type operator()(FacetType const &elem, double kinetic_energy, viennashe::carrier_type_id ctype) const
scatter_process_id id() const
std::vector< scatter_process_descriptor > scatter_processes_type
viennagrid::result_of::cell< MeshType >::type CellType
viennagrid::result_of::facet< MeshType >::type FacetType
viennashe::config const & conf_
DeviceType const & device_
Contains the dispersion relations for different materials and different polarities.
A logging facility providing fine-grained control over logging in ViennaSHE.
A very simple material database. Needs to be replaced by something more versatile soon.
Provides a number of fundamental math constants.
The main ViennaSHE namespace. All functionality resides inside this namespace.
carrier_type_id
Enumeration type for selecting the carrier type.
Provides a number of fundamental constants. All constants in SI units.
Returns a few helper routines for computing physical quantities. To be replaced in the future.
static double permittivity()
static const double pi
Pi.
static const double q
Elementary charge.
static const double kB
Boltzmann constant.
static const double hbar
Modified Planck constant.
Defines the log keys used within the viennashe::she namespace.
Common classes for scattering operators.