1#ifndef VIENNASHE_MODELS_TUNNELING_HPP
2#define VIENNASHE_MODELS_TUNNELING_HPP
46 const double C = 4 * std::sqrt(2*m0)/(3*hbar*q0);
47 const double Cs = 2 * std::sqrt(2*m0)/hbar;
49 if (std::abs(F) < 5e6)
52 return std::exp(-Cs*std::sqrt(mtun*(psi_i-E))*x);
56 if (psi_i >= E && psi_t >= E)
58 return std::exp( -C * std::sqrt(mtun)/F * (std::pow((psi_t - E), 1.5) - std::pow((psi_i - E), 1.5)) );
60 else if (psi_t >= E && psi_i <= E)
62 return std::exp( -C * std::sqrt(mtun)/F * (std::pow((psi_t - E), 1.5)));
64 else if (psi_i >= E && psi_t <= E)
66 return std::exp( C * std::sqrt(mtun)/F * (std::pow((psi_i - E), 1.5)));
79 : psi_i_(psi_i), psi_t_(psi_t), x_(x), F_(F) {}
81 void set_x(
double x) { x_ = x; }
82 void set_F(
double F) { F_ = F; }
A functor interface to the WKB tunneling coefficient for oxide barriers.
wkb_oxide_barrier_tunneling(double psi_i, double psi_t, double x, double F=0.0)
double operator()(double E) const
The main user function to get the WKB coefficient |T|^2 ( 0 <= |T|^2 <= 1).
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)
The main ViennaSHE namespace. All functionality resides inside this namespace.
Provides a number of fundamental constants. All constants in SI units.
static const double q
Elementary charge.
static const double hbar
Modified Planck constant.
static const double mass_electron
Electron rest mass.