Skip to main content

sciforge_core/quantum/
tunneling.rs

1use sciforge_hub::prelude::physics::quantum as q;
2
3#[derive(Debug, Clone, Copy)]
4pub struct RectangularBarrier {
5    pub height_j: f64,
6    pub width_m: f64,
7    pub mass_kg: f64,
8}
9
10impl RectangularBarrier {
11    pub fn new(height_j: f64, width_m: f64, mass_kg: f64) -> Self {
12        Self {
13            height_j,
14            width_m,
15            mass_kg,
16        }
17    }
18
19    pub fn transmission(&self, energy_j: f64) -> f64 {
20        q::tunneling_coefficient(energy_j, self.height_j, self.width_m, self.mass_kg)
21    }
22}
23
24pub fn wkb_phase<F: Fn(f64) -> f64>(
25    potential: F,
26    energy_j: f64,
27    x1_m: f64,
28    x2_m: f64,
29    mass_kg: f64,
30) -> f64 {
31    q::wkb_phase(potential, energy_j, x1_m, x2_m, mass_kg)
32}
33
34pub fn wkb_transmission<F: Fn(f64) -> f64>(
35    potential: F,
36    energy_j: f64,
37    x1_m: f64,
38    x2_m: f64,
39    mass_kg: f64,
40) -> f64 {
41    q::wkb_transmission(potential, energy_j, x1_m, x2_m, mass_kg)
42}