sciforge_lib/physics/electronics/
emission.rs1use crate::constants::{E_CHARGE, ELECTRON_MASS_KG, H, K_B};
2use std::f64::consts::PI;
3
4pub fn richardson_constant() -> f64 {
5 4.0 * PI * ELECTRON_MASS_KG * E_CHARGE * K_B * K_B / H.powi(3)
6}
7
8pub fn richardson_dushman_current_density(work_function_ev: f64, t_k: f64) -> f64 {
9 let phi_j = work_function_ev * E_CHARGE;
10 richardson_constant() * t_k * t_k * (-phi_j / (K_B * t_k)).exp()
11}
12
13pub fn schottky_effective_work_function(
14 work_function_ev: f64,
15 e_field_v_per_m: f64,
16) -> f64 {
17 let delta_phi_j = (E_CHARGE.powi(3) * e_field_v_per_m
18 / (4.0 * PI * crate::constants::EPSILON_0))
19 .sqrt();
20 work_function_ev - delta_phi_j / E_CHARGE
21}
22
23pub fn schottky_current_density(
24 work_function_ev: f64,
25 t_k: f64,
26 e_field_v_per_m: f64,
27) -> f64 {
28 let phi_eff_ev = schottky_effective_work_function(work_function_ev, e_field_v_per_m);
29 richardson_dushman_current_density(phi_eff_ev, t_k)
30}
31
32pub fn fowler_nordheim_current_density(
33 work_function_ev: f64,
34 e_field_v_per_m: f64,
35) -> f64 {
36 let phi_j = work_function_ev * E_CHARGE;
37 let a_fn = E_CHARGE.powi(3) / (16.0 * PI * PI * crate::constants::HBAR * phi_j);
38 let b_fn = 4.0 / 3.0 * (2.0 * ELECTRON_MASS_KG).sqrt() * phi_j.powf(1.5)
39 / (E_CHARGE * crate::constants::HBAR);
40 a_fn * e_field_v_per_m * e_field_v_per_m * (-b_fn / e_field_v_per_m).exp()
41}
42
43pub fn photoelectric_threshold_wavelength(work_function_ev: f64) -> f64 {
44 let phi_j = work_function_ev * E_CHARGE;
45 H * crate::constants::C / phi_j
46}
47
48pub fn photoelectron_kinetic_energy_ev(photon_energy_ev: f64, work_function_ev: f64) -> f64 {
49 (photon_energy_ev - work_function_ev).max(0.0)
50}
51
52pub fn fowler_photoemission_yield(photon_energy_ev: f64, work_function_ev: f64, t_k: f64) -> f64 {
53 let kt_ev = K_B * t_k / E_CHARGE;
54 let mu = (photon_energy_ev - work_function_ev) / kt_ev;
55 if mu <= 0.0 {
56 let exp_mu = mu.exp();
57 exp_mu - exp_mu.powi(2) / 4.0 + exp_mu.powi(3) / 9.0
58 } else {
59 let pi2_6 = PI * PI / 6.0;
60 pi2_6 + mu * mu / 2.0 - (-mu).exp() + (-2.0 * mu).exp() / 4.0
61 }
62}
63
64pub fn schottky_barrier_height(work_function_metal_ev: f64, electron_affinity_ev: f64) -> f64 {
65 work_function_metal_ev - electron_affinity_ev
66}
67
68pub fn contact_potential(work_function_a_ev: f64, work_function_b_ev: f64) -> f64 {
69 work_function_a_ev - work_function_b_ev
70}
71
72pub fn child_langmuir_current_density(
73 voltage_v: f64,
74 distance_m: f64,
75) -> f64 {
76 let factor = 4.0 / 9.0 * crate::constants::EPSILON_0
77 * (2.0 * E_CHARGE / ELECTRON_MASS_KG).sqrt();
78 factor * voltage_v.powf(1.5) / (distance_m * distance_m)
79}
80
81pub fn thermionic_emission_efficiency(
82 work_function_ev: f64,
83 t_k: f64,
84 voltage_v: f64,
85) -> f64 {
86 let phi = work_function_ev * E_CHARGE;
87 let ev = voltage_v * E_CHARGE;
88 let kt = K_B * t_k;
89 ev / (phi + 2.0 * kt + ev)
90}