1#ifndef VIENNASHE_SHE_SCATTERING_OPTICAL_PHONON_SCATTERING_HPP
2#define VIENNASHE_SHE_SCATTERING_OPTICAL_PHONON_SCATTERING_HPP
44 template <
typename DeviceType>
64 double energy_grid_spacing = 0)
66 params_(conf.scattering().optical_phonon()),
67 hbaromega_(params_.get_phonon_energy())
70 if (energy_grid_spacing > 0)
72 std::size_t grid_steps =
static_cast<std::size_t
>(hbaromega_ / energy_grid_spacing);
73 double error_0 = hbaromega_ - grid_steps * energy_grid_spacing;
74 double error_1 = (grid_steps + 1.0) * energy_grid_spacing - hbaromega_;
75 if (error_1 < error_0)
79 hbaromega_ = grid_steps * energy_grid_spacing;
84 double kinetic_energy,
87 return get(elem, kinetic_energy, ctype);
91 double kinetic_energy,
94 return get(elem, kinetic_energy, ctype);
101 double energy()
const {
return hbaromega_; }
121 template <
typename ElementType>
123 double kinetic_energy,
133 result[0].initial_energy(kinetic_energy);
134 result[0].final_energy(kinetic_energy - hbaromega_);
135 result[0].rate( getScatteringRate(ctype) * (N_op + 1.0) );
136 result[0].generation_rate(0);
138 result[1].initial_energy(kinetic_energy + hbaromega_);
139 result[1].final_energy(kinetic_energy);
140 result[1].rate( getScatteringRate(ctype) * (N_op + 1.0) );
141 result[1].generation_rate(0);
144 result[2].initial_energy(kinetic_energy);
145 result[2].final_energy(kinetic_energy + hbaromega_);
146 result[2].rate( getScatteringRate(ctype) * N_op );
147 result[2].generation_rate(0);
149 result[3].initial_energy(kinetic_energy - hbaromega_);
150 result[3].final_energy(kinetic_energy);
151 result[3].rate( getScatteringRate(ctype) * N_op );
152 result[3].generation_rate(0);
170 const double scattering_rate = pi * DtK * DtK * hbar / (2.0 * rho * hbaromega_);
175 log::debug<log_optical_phonon_scattering>() <<
"optical phonon: " << scattering_rate << std::endl;
181 optical_phonon_scattering_parameters params_;
The main SHE configuration class. To be adjusted by the user for his/her needs.
Defines the physical properties of a device, e.g. doping. This is the implementation for 2d and highe...
double get_mass_density(viennashe::carrier_type_id) const
double get_fit_factor(viennashe::carrier_type_id ctype) const
double get_coupling_constant(viennashe::carrier_type_id) const
Optical phonon scattering process.
base_type::scatter_processes_type scatter_processes_type
scatter_processes_type operator()(FacetType const &elem, double kinetic_energy, viennashe::carrier_type_id ctype) const
double energy() const
Inelastic energy that is either gained or lost at scattering.
scatter_process_id id() const
optical_phonon_scattering(DeviceType const &device, viennashe::config const &conf, double energy_grid_spacing=0)
Constructs the optical phonon scattering object. Takes the phonon energy as parameter.
void energy(double energy)
Modifies/Sets the inelastic scattering energy lost or gained.
scatter_processes_type operator()(CellType const &elem, double kinetic_energy, viennashe::carrier_type_id ctype) const
scatter_processes_type value_type
std::vector< scatter_process_descriptor > scatter_processes_type
viennagrid::result_of::cell< MeshType >::type CellType
viennagrid::result_of::facet< MeshType >::type FacetType
DeviceType const & device_
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.
double get_optical_phonon_number(double eps_optical, double temperature=300.0)
Returns the optical phonon number for use with optical phonon scattering.
@ OPTICAL_PHONON_SCATTERING
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 const double pi
Pi.
static const double hbar
Modified Planck constant.
Defines the log keys used within the viennashe::she namespace.
Common classes for scattering operators.