ViennaSHE 1.3.0
Free open-source semiconductor device simulator using spherical harmonics expansions techniques.
acoustic_phonon_scattering.hpp
Go to the documentation of this file.
1#ifndef VIENNASHE_SHE_SCATTERING_ACOUSTIC_PHONON_HPP
2#define VIENNASHE_SHE_SCATTERING_ACOUSTIC_PHONON_HPP
3/* ============================================================================
4 Copyright (c) 2011-2022, Institute for Microelectronics,
5 Institute for Analysis and Scientific Computing,
6 TU Wien.
7
8 -----------------
9 ViennaSHE - The Vienna Spherical Harmonics Expansion Boltzmann Solver
10 -----------------
11
12 http://viennashe.sourceforge.net/
13
14 License: MIT (X11), see file LICENSE in the base directory
15=============================================================================== */
16
17// viennashe
23
24#include "viennashe/log/log.hpp"
26
27
32namespace viennashe
33{
34 namespace she
35 {
36
41 template <typename DeviceType>
43 {
45 typedef typename base_type::FacetType FacetType;
46 typedef typename base_type::CellType CellType;
47
48 public:
51
52 explicit acoustic_phonon_scattering(DeviceType const & device,
53 viennashe::config const & conf) : base_type(device, conf), params_(conf.scattering().acoustic_phonon()) { }
54
55 scatter_processes_type operator()(CellType const & elem,
56 double kinetic_energy,
58 {
59 return get(elem, kinetic_energy, ctype);
60 }
61
62 scatter_processes_type operator()(FacetType const & elem,
63 double kinetic_energy,
65 {
66 return get(elem, kinetic_energy, ctype);
67 }
68
70
71 private:
72
82 template <typename ElementType>
83 scatter_processes_type get(ElementType const & elem,
84 double kinetic_energy,
86 {
87 scatter_processes_type result(1);
88
89 // Final energy is always equal to initial energy:
90 result[0].initial_energy(kinetic_energy);
91 result[0].final_energy(kinetic_energy);
92 result[0].rate( getScatteringRate(base_type::device_.get_lattice_temperature(elem), ctype) );
93 result[0].generation_rate(0);
94
95 return result;
96 }
97
98 double getScatteringRate(const double T, viennashe::carrier_type_id ctype) const
99 {
100 const double kB = viennashe::physics::constants::kB;
101 const double hbar = viennashe::physics::constants::hbar;
102 const double ul = params_.get_longitudinal_sound_velocity(ctype);
103 const double rho = params_.get_mass_density(ctype);
104 const double E1 = params_.get_deformation_potential(ctype);
105 const double pi = viennashe::math::constants::pi;
106
107 const double scattering_rate = 2.0 * pi * kB * T * E1 * E1 / (hbar * ul * ul * rho);
108
110 log::debug<log_acoustic_phonon_scattering>() << "acoustical phonon: " << scattering_rate << std::endl;
111
112 //MUST NOT include density of states and/or N_op
113 return params_.get_fit_factor(ctype) * scattering_rate; //_params.get_fit_factor(ctype) * scattering_rate;
114 }
115
116 acoustic_phonon_scattering_parameters params_;
117 };
118
119 } //namespace she
120} //namespace viennashe
121
122#endif
123
The main SHE configuration class. To be adjusted by the user for his/her needs.
Definition: config.hpp:124
Defines the physical properties of a device, e.g. doping. This is the implementation for 2d and highe...
Definition: device.hpp:818
double get_fit_factor(viennashe::carrier_type_id ctype) const
Definition: config.hpp:67
double get_mass_density(viennashe::carrier_type_id) const
Definition: config.hpp:57
double get_longitudinal_sound_velocity(viennashe::carrier_type_id) const
Definition: config.hpp:58
double get_deformation_potential(viennashe::carrier_type_id ctype) const
Definition: config.hpp:59
scatter_processes_type operator()(CellType const &elem, double kinetic_energy, viennashe::carrier_type_id ctype) const
acoustic_phonon_scattering(DeviceType const &device, viennashe::config const &conf)
base_type::scatter_processes_type scatter_processes_type
scatter_processes_type operator()(FacetType const &elem, double kinetic_energy, viennashe::carrier_type_id ctype) const
std::vector< scatter_process_descriptor > scatter_processes_type
Definition: common.hpp:90
viennagrid::result_of::cell< MeshType >::type CellType
Definition: common.hpp:87
viennagrid::result_of::facet< MeshType >::type FacetType
Definition: common.hpp:86
DeviceType const & device_
Definition: common.hpp:108
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.
@ ACOUSTIC_PHONON_SCATTERING
Definition: common.hpp:39
The main ViennaSHE namespace. All functionality resides inside this namespace.
Definition: accessors.hpp:40
carrier_type_id
Enumeration type for selecting the carrier type.
Definition: forwards.h:185
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.
Definition: constants.hpp:34
static const double kB
Boltzmann constant.
Definition: constants.hpp:46
static const double hbar
Modified Planck constant.
Definition: constants.hpp:50
Defines the log keys used within the viennashe::she namespace.
Common classes for scattering operators.