ViennaSHE 1.3.0
Free open-source semiconductor device simulator using spherical harmonics expansions techniques.
carrier_mass.hpp
Go to the documentation of this file.
1#ifndef VIENNASHE_MODELS_ALL_CARRIER_MASS_HPP
2#define VIENNASHE_MODELS_ALL_CARRIER_MASS_HPP
3
4/* ============================================================================
5 Copyright (c) 2011-2022, Institute for Microelectronics,
6 Institute for Analysis and Scientific Computing,
7 TU Wien.
8
9 -----------------
10 ViennaSHE - The Vienna Spherical Harmonics Expansion Boltzmann Solver
11 -----------------
12
13 http://viennashe.sourceforge.net/
14
15 License: MIT (X11), see file LICENSE in the base directory
16=============================================================================== */
17
18#include "viennashe/forwards.h"
20
25namespace viennashe
26{
27 namespace models
28 {
29
32 {
33 // The mass of the electron
35 // The mass of the hole
36 double mass_hole;
37
39 };
40
43 {
44 // Taylor series (with lattice temperature) coefficients for the electron mass
46 // Taylor series (with lattice temperature) coefficients for the hole mass
48
51 };
52
53
56 {
62 virtual double operator()(double TL, viennashe::carrier_type_id ctype) const = 0;
64 }; // carrier_mass_model
65
66
69 {
70 protected:
72
73 public:
75
76 double operator()(double TL, viennashe::carrier_type_id ctype) const
77 {
78 (void)TL; //prevent unused parameter warnings
79 if (ctype == viennashe::ELECTRON_TYPE_ID)
81 else if (ctype == viennashe::HOLE_TYPE_ID)
82 return _params.mass_hole;
83 else
84 throw viennashe::carrier_type_not_supported_exception("carrier_mass_simple_model only supports holes and electrons");
85 }
86
87 }; // carrier_mass_simple_model
88
89
92 {
93 protected:
95
96 public:
98 : _params(params) { }
99
100 double operator()(double TL, viennashe::carrier_type_id ctype) const
101 {
102 if (ctype == viennashe::ELECTRON_TYPE_ID)
103 return this->for_electrons(TL);
104 else if (ctype == viennashe::HOLE_TYPE_ID)
105 return this->for_holes(TL);
106 else
107 throw viennashe::carrier_type_not_supported_exception("carrier_mass_simple_model only supports holes and electrons");
108 }
109
110 private:
111
112 double for_electrons(double TL) const
113 {
114 const double TL300 = TL / 300.0;
117 }
118
119 double for_holes(double TL) const
120 {
121 const double TL300 = TL / 300.0;
123 + _params.mass_hole_linear * TL300
124 + _params.mass_hole_quadradic * TL300 * TL300;
125 }
126
127 }; // carrier_mass_full_model
128
129
130
131 } // namespace models
132
133} // namespace viennashe
134
135#endif
136
Exception thrown in the case that any code does not support the given carrier type.
Definition: exception.hpp:154
The full carrier mass model, which uses a Taylor series over lattice temperature.
carrier_mass_full_model(const carrier_mass_full_model_parameters &params)
const carrier_mass_full_model_parameters _params
double operator()(double TL, viennashe::carrier_type_id ctype) const
The functor interface.
The simple (constant) carrier mass model.
double operator()(double TL, viennashe::carrier_type_id ctype) const
The functor interface.
carrier_mass_simple_model(const carrier_mass_simple_model_parameters &params)
const carrier_mass_simple_model_parameters _params
Provides the exceptions used in the main viennashe namespace.
Contains forward declarations and definition of small classes that must be defined at an early stage.
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
@ HOLE_TYPE_ID
Definition: forwards.h:188
@ ELECTRON_TYPE_ID
Definition: forwards.h:187
POD with parameters for the full model.
The carrier mass model interface.
virtual double operator()(double TL, viennashe::carrier_type_id ctype) const =0
The functor interface.
POD with parameters for the simple carrier mass model (constant value model)