1#ifndef VIENNASHE_FIXED_CHARGE_SCATTERING_HPP
2#define VIENNASHE_FIXED_CHARGE_SCATTERING_HPP
20#include "viennagrid/mesh/coboundary_iteration.hpp"
47 template <
typename DeviceType>
64 double kinetic_energy,
67 return get(elem, kinetic_energy, ctype);
71 double kinetic_energy,
74 return get(elem, kinetic_energy, ctype);
87 template <
typename ElementType>
89 double kinetic_energy,
95 result[0].initial_energy(kinetic_energy);
96 result[0].final_energy(kinetic_energy);
103 template <
typename ElementType>
105 double kinetic_energy,
114 if ( std::abs(rate) < std::numeric_limits<double>::epsilon() ) rate = 0.0;
124 return fixed_charge(vt);
131 typedef typename viennagrid::result_of::const_coboundary_range<typename base_type::MeshType, FacetType, CellType>::type CellOnFacetContainer;
135 CellType const & c1 = *(cells_on_facet.begin());
153 double lambda_sq = 0.0;
154 double scattering_rate = 0.0;
158 if (norm_k <= 0.0 || NI <= 0.0)
return 0.0;
160 const double prefactor = (2.0 * pi * NI * q * q * q * q) / (hbar * eps * eps);
162 lambda_sq = (eps * kB * T) / (q * q * NI) ;
164 const double a = 4.0 * lambda_sq * norm_k * norm_k;
167 * 0.5 * (std::log(1.0 + a) - (a / (1.0 + a)) ) / 4.0 / std::pow(norm_k, 4.0);
169 return scattering_rate;
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.
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...
Accessor for fixed charges.
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)....
double get_fit_factor(viennashe::carrier_type_id ctype) const
Trapped charge scattering process.
scatter_process_id id() const
double getScatteringRate(ElementType 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
double getScatteringRate(double NI, double kinetic_energy, double T, viennashe::carrier_type_id ctype) const
base_type::scatter_processes_type scatter_processes_type
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...
double get_charged_trap_density(FacetType const &facet, viennashe::carrier_type_id ctype) const
fixed_charge_scattering(DeviceType const &device, viennashe::config const &conf)
scatter_processes_type value_type
double get_charged_trap_density(CellType const &vt, viennashe::carrier_type_id) const
scatter_processes_type operator()(CellType const &elem, double kinetic_energy, viennashe::carrier_type_id ctype) 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.
@ FIXED_CHARGE_SCATTERING
CellT const * get_other_cell_of_facet(MeshT const &mesh, FacetT const &facet, CellT const &cell)
Helper function returning a const-pointer to the 'second cell' of a facet, or NULL if there is no sec...
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.