ViennaSHE 1.3.0
Free open-source semiconductor device simulator using spherical harmonics expansions techniques.
tunneling.hpp
Go to the documentation of this file.
1#ifndef VIENNASHE_MODELS_TUNNELING_HPP
2#define VIENNASHE_MODELS_TUNNELING_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
21#include <cmath>
22
23// viennashe
24#include "viennashe/forwards.h"
25
26// exceptions
28
30
31
32namespace viennashe
33{
34 namespace models
35 {
36
37 namespace detail
38 {
39 double wkb_tunneling_impl(double E, double psi_i, double psi_t, double x, double F,
40 double mtun = 0.33)
41 {
43 const double hbar = viennashe::physics::constants::hbar;
44 const double q0 = viennashe::physics::constants::q;
45
46 const double C = 4 * std::sqrt(2*m0)/(3*hbar*q0);
47 const double Cs = 2 * std::sqrt(2*m0)/hbar;
48
49 if (std::abs(F) < 5e6)
50 {
51 if (psi_i > E)
52 return std::exp(-Cs*std::sqrt(mtun*(psi_i-E))*x);
53 return 1.0;
54 }
55
56 if (psi_i >= E && psi_t >= E)
57 {
58 return std::exp( -C * std::sqrt(mtun)/F * (std::pow((psi_t - E), 1.5) - std::pow((psi_i - E), 1.5)) );
59 }
60 else if (psi_t >= E && psi_i <= E)
61 {
62 return std::exp( -C * std::sqrt(mtun)/F * (std::pow((psi_t - E), 1.5)));
63 }
64 else if (psi_i >= E && psi_t <= E)
65 {
66 return std::exp( C * std::sqrt(mtun)/F * (std::pow((psi_i - E), 1.5)));
67 }
68
69 return 1.0;
70 }
71 } // namespace detail
72
75 {
76 public:
77
78 wkb_oxide_barrier_tunneling(double psi_i, double psi_t, double x, double F = 0.0)
79 : psi_i_(psi_i), psi_t_(psi_t), x_(x), F_(F) {}
80
81 void set_x(double x) { x_ = x; }
82 void set_F(double F) { F_ = F; }
83
89 double operator()(double E) const
90 {
91 return viennashe::models::detail::wkb_tunneling_impl(E, psi_i_, psi_t_, x_, F_);
92 }
93
94 private:
95 double psi_i_; // Hight of the barrier in Joule from the band edge on the far side of the barrier wrspt. the trap
96 double psi_t_; // Hight of the barrier in Joule from the band edge on the side of the trap
97 double x_; // The thickness of the tunneling barrier (meter)
98 double F_; // The electric field at the (most probable) origin of the carrier (V/m)
99 };
100
101
102 } // namespace models
103} // namespace viennashe
104
105#endif /* VIENNASHE_MODELS_TUNNELING_HPP */
106
A functor interface to the WKB tunneling coefficient for oxide barriers.
Definition: tunneling.hpp:75
wkb_oxide_barrier_tunneling(double psi_i, double psi_t, double x, double F=0.0)
Definition: tunneling.hpp:78
double operator()(double E) const
The main user function to get the WKB coefficient |T|^2 ( 0 <= |T|^2 <= 1).
Definition: tunneling.hpp:89
Contains forward declarations and definition of small classes that must be defined at an early stage.
Contains exceptions for viennashe::models.
double wkb_tunneling_impl(double E, double psi_i, double psi_t, double x, double F, double mtun=0.33)
Definition: tunneling.hpp:39
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 q
Elementary charge.
Definition: constants.hpp:44
static const double hbar
Modified Planck constant.
Definition: constants.hpp:50
static const double mass_electron
Electron rest mass.
Definition: constants.hpp:42