ViennaSHE 1.3.0
Free open-source semiconductor device simulator using spherical harmonics expansions techniques.
common.hpp
Go to the documentation of this file.
1#ifndef VIENNASHE_SHE_SCATTERING_COMMON_HPP
2#define VIENNASHE_SHE_SCATTERING_COMMON_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
22
23#include "viennashe/log/log.hpp"
25#include "viennashe/config.hpp"
26
31namespace viennashe
32{
33 namespace she
34 {
35
37 {
48 };
49
50
53 {
54 public:
55 scatter_process_descriptor() : initial_energy_(0), final_energy_(0), rate_(0), generation_rate_(0) {}
56 //scatter_process_descriptor(double e, double r, double g = 0) : initial_energy_(e), final_energy_(e), rate_(r), generation_rate_(g) {}
57
58 void initial_energy(double e) { initial_energy_ = e; }
59 double initial_energy() const { return initial_energy_; }
60
61 void final_energy(double e) { final_energy_ = e; }
62 double final_energy() const { return final_energy_; }
63
64 void rate(double r) { rate_ = r; }
65 double rate() const { return rate_; }
66
67 void generation_rate(double r) { generation_rate_ = r; }
68 double generation_rate() const { return generation_rate_; }
69
70
71 private:
72 double initial_energy_;
73 double final_energy_;
74 double rate_;
75 double generation_rate_;
76 };
77
78 template <typename DeviceType>
80 {
81 protected:
82 typedef typename DeviceType::mesh_type MeshType;
83
84 typedef typename viennagrid::result_of::point<MeshType>::type PointType;
85 typedef typename viennagrid::result_of::vertex<MeshType>::type VertexType;
86 typedef typename viennagrid::result_of::facet<MeshType>::type FacetType;
87 typedef typename viennagrid::result_of::cell<MeshType>::type CellType;
88
89 public:
90 typedef std::vector<scatter_process_descriptor> scatter_processes_type;
92
93 scattering_base(DeviceType const & device, viennashe::config const & conf) : device_(device), conf_(conf) {}
94
95 virtual ~scattering_base() {}
96
98 double kinetic_energy,
99 viennashe::carrier_type_id ctype) const = 0;
100
102 double kinetic_energy,
103 viennashe::carrier_type_id ctype) const = 0;
104
105 virtual scatter_process_id id() const = 0;
106
107 protected:
108 DeviceType const & device_;
110 };
111
112
113 } //namespace she
114} //namespace viennashe
115
116#endif
117
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
A simple class returning the scattering rate and the energy of a scattered particle.
Definition: common.hpp:53
scattering_base(DeviceType const &device, viennashe::config const &conf)
Definition: common.hpp:93
std::vector< scatter_process_descriptor > scatter_processes_type
Definition: common.hpp:90
virtual scatter_processes_type operator()(CellType const &elem, double kinetic_energy, viennashe::carrier_type_id ctype) const =0
viennagrid::result_of::cell< MeshType >::type CellType
Definition: common.hpp:87
virtual scatter_process_id id() const =0
DeviceType::mesh_type MeshType
Definition: common.hpp:82
virtual scatter_processes_type operator()(FacetType const &elem, double kinetic_energy, viennashe::carrier_type_id ctype) const =0
viennagrid::result_of::facet< MeshType >::type FacetType
Definition: common.hpp:86
scatter_processes_type value_type
Definition: common.hpp:91
viennagrid::result_of::point< MeshType >::type PointType
Definition: common.hpp:84
viennashe::config const & conf_
Definition: common.hpp:109
viennagrid::result_of::vertex< MeshType >::type VertexType
Definition: common.hpp:85
DeviceType const & device_
Definition: common.hpp:108
The SHE configuration class is defined here.
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
Definition: common.hpp:40
@ TRAPPED_CHARGE_SCATTERING
Definition: common.hpp:47
@ SURFACE_ACOUSTIC_PHONON_SCATTERING
Definition: common.hpp:44
@ IMPACT_IONIZATION_SCATTERING
Definition: common.hpp:41
@ INVALID_SCATTER_PROCESS
Definition: common.hpp:38
@ SURFACE_ROUGHNESS_SCATTERING
Definition: common.hpp:45
@ ACOUSTIC_PHONON_SCATTERING
Definition: common.hpp:39
@ OPTICAL_PHONON_SCATTERING
Definition: common.hpp:43
@ SURFACE_SCATTERING
Definition: common.hpp:46
@ IMPURITY_SCATTERING
Definition: common.hpp:42
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.
Defines the log keys used within the viennashe::she namespace.