1#ifndef VIENNASHE_SHE_SCATTERING_SURFACE_SCATTERING_HPP
2#define VIENNASHE_SHE_SCATTERING_SURFACE_SCATTERING_HPP
32#include "viennagrid/forwards.hpp"
33#include "viennagrid/algorithm/inner_prod.hpp"
34#include "viennagrid/algorithm/norm.hpp"
49 template <
typename DeviceType,
typename ElectricFieldAccessor>
62 ElectricFieldAccessor
const & Efield)
63 :
base_type(
device, conf), params_(conf.scattering().surface()), _Efield(Efield) { }
66 double kinetic_energy,
69 return get(elem, kinetic_energy, ctype);
73 double kinetic_energy,
76 return get(elem, kinetic_energy, ctype);
91 template <
typename ElementType>
93 double kinetic_energy,
99 result[0].initial_energy(kinetic_energy);
100 result[0].final_energy(kinetic_energy);
107 template <
typename ElementType>
109 double kinetic_energy,
112 (void)kinetic_energy;
121 if ( std::abs(rate) < std::numeric_limits<double>::epsilon() ) rate = 0.0;
128 throw std::runtime_error(
"get_charged_trap_density(): TODO");
149 throw std::runtime_error(
"get_charged_trap_density(): TODO");
181 const double prefactor = ( std::sqrt(2.0) / std::pow((2.0*pi),3.0) ) * std::pow(dos_mass, 1.5) * 2.0/std::sqrt(pi);
183 if (Ep <= 0.0)
return 0.0;
186 + params_.
second_factor(ctype) * std::pow(totaldoping, 0.125) * 3.0 / std::pow(Ep, 1.0/3.0) )
196 ElectricFieldAccessor
const & _Efield;
Contains the definition of per-device accessors (read-only!) for various quantities.
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...
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_
double second_factor(viennashe::carrier_type_id) const
double first_factor(viennashe::carrier_type_id) const
double get_fit_factor(viennashe::carrier_type_id ctype) const
double third_factor(viennashe::carrier_type_id) const
Surface scattering process.
double get_electric_field_n(CellType const &) const
double getScatteringRate(ElementType const &elem, double kinetic_energy, viennashe::carrier_type_id ctype) const
double getScatteringRate(const double T, const double totaldoping, const double Ep, 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
surface_scattering(DeviceType const &device, viennashe::config const &conf, ElectricFieldAccessor const &Efield)
scatter_processes_type get(ElementType const &elem, double kinetic_energy, viennashe::carrier_type_id ctype) const
Returns all possible final scattering states for a carrier with initial kinetic energy 'kin_energy' f...
base_type::scatter_processes_type scatter_processes_type
double get_electric_field_n(FacetType const &) const
scatter_processes_type value_type
scatter_processes_type operator()(CellType const &elem, double kinetic_energy, viennashe::carrier_type_id ctype) const
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 dos_effective_mass(viennashe::carrier_type_id ctype)
static const double pi
Pi.
Defines the log keys used within the viennashe::she namespace.
Common classes for scattering operators.