ViennaSHE 1.3.0
Free open-source semiconductor device simulator using spherical harmonics expansions techniques.
bandgap.hpp
Go to the documentation of this file.
1#ifndef VIENNASHE_MODELS_ALL_BANDGAP_HPP
2#define VIENNASHE_MODELS_ALL_BANDGAP_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 <cmath>
19
20#include "viennashe/forwards.h"
24
29namespace viennashe
30{
31 namespace models
32 {
33
38 {
39 double Eg0;
40 double alpha;
41 double theta;
42 double nu;
43 double Tmin;
44 double Tmax;
45
46 bandgap_model_extended_parameters() : Eg0(0), alpha(0.0), theta(0.0), nu(0.0), Tmin(0), Tmax(0) { }
47 };
48
53 {
54 virtual double operator()(double T) const = 0;
55 virtual ~bandgap_model() {}
56 };
57
62 {
63 public:
64
65 bandgap_model_const(double Eg) : _Eg(Eg) { }
66
67 double operator()(double) const
68 {
69 return _Eg;
70 }
71
72 private:
73 double _Eg;
74
75 };
76
81 {
82 public:
83
84 bandgap_model_extended(const bandgap_model_extended_parameters & params) : _params(params) { }
85
86 double operator()(double TL) const
87 {
88 double T = TL;
89 if ( T < _params.Tmin ) T = this->_params.Tmin;
90 if ( T > _params.Tmax ) T = this->_params.Tmax;
91
92 const double pi = viennashe::math::constants::pi;
93
94 const double prefactor = this->_params.alpha * this->_params.theta * 0.5;
95 const double nu = this->_params.nu;
96 const double theta = this->_params.theta;
97
98 if ( nu < 0.0 )
99 throw viennashe::models::invalid_parameter_exception("bandgap_model_extended: nu must be greater 0.0!", nu);
100 if ( nu == 5.0 )
101 throw viennashe::models::invalid_parameter_exception("bandgap_model_extended: nu must not be 5.0!", nu);
102
103 const double a1 = (5.0 + nu) / 6.0 * std::pow(pi * 0.5, (2.0 + 0.5 * (nu - 1.0)*(nu - 1.0)));
104
105 const double a2 = (1.0 - nu) * 0.5;
106
107 const double a3 = ((5.0 + nu)*(1.0 + nu)*(1.0 + nu)) / (6.0 * nu + 3.0 * nu * nu);
108
109 const double sum = a1 * std::pow(2.0 * T / theta, 1.0 + nu) + a2 * std::pow(2.0 * T / theta, 2.0 + nu) + a3 * std::pow(2.0 * T / theta, 3.0 + nu);
110
111 const double Eg = _params.Eg0 - prefactor * (std::pow(1.0 + sum + std::pow(2.0 * T / theta, 5.0 + nu), 1.0 / (5.0 + nu)) - 1.0);
112
113 return Eg;
114 }
115
116 private:
118
119 };
120
121 /*
122 bool test_bandgap_model_extended()
123 {
124 bandgap_model_extended_parameters params;
125
126 // TEST FOR SILICON
127 // Test according to Roland Pässler doi: 10.1002/pssb.200301752
128 // with Data from: W. Bludau, A. Onton, and W. Heinke doi: 10.1063/1.1663501
129 params.alpha = viennashe::physics::eV_to_joule(3.22 * 1e-4);
130 params.theta = 441.0;
131 params.nu = 1.2;
132 params.Eg0 = 1.17;
133
134 // TODO: test data needed
135
136 return true;
137 }
138 */
139
140
141 } // namespace models
142
143} // namespace viennashe
144
145#endif
146
A simple constant bandgap model. Gets the bandgap and always returns this value.
Definition: bandgap.hpp:62
double operator()(double) const
Definition: bandgap.hpp:67
An elaborate bandgap model, which accounts for the lattice temperature.
Definition: bandgap.hpp:81
double operator()(double TL) const
Definition: bandgap.hpp:86
bandgap_model_extended(const bandgap_model_extended_parameters &params)
Definition: bandgap.hpp:84
Thrown whenever an invalid parameter to a model is given.
Definition: exception.hpp:32
Contains forward declarations and definition of small classes that must be defined at an early stage.
Provides a number of fundamental math constants.
Contains exceptions for viennashe::models.
The main ViennaSHE namespace. All functionality resides inside this namespace.
Definition: accessors.hpp:40
Provides a number of fundamental constants. All constants in SI units.
static const double pi
Pi.
Definition: constants.hpp:34
Plain old datatype (POD) of parameters for the bandgap_model_extended.
Definition: bandgap.hpp:38
Basic bandgap model interface.
Definition: bandgap.hpp:53
virtual double operator()(double T) const =0