sciforge_lib/constants/physics/optics/
absorption.rs1#[derive(Debug, Clone, Copy)]
2pub struct OpticalAbsorption {
3 pub formula: &'static str,
4 pub wavelength_nm: f64,
5 pub absorption_coeff_per_m: f64,
6 pub extinction_coeff_k: f64,
7}
8
9pub const TABLE: &[OpticalAbsorption] = &[
10 OpticalAbsorption { formula: "Si", wavelength_nm: 500.0, absorption_coeff_per_m: 1.0e6, extinction_coeff_k: 4.0e-2 },
11 OpticalAbsorption { formula: "Si", wavelength_nm: 1000.0, absorption_coeff_per_m: 6.0e3, extinction_coeff_k: 4.0e-4 },
12 OpticalAbsorption { formula: "Ge", wavelength_nm: 1550.0, absorption_coeff_per_m: 5.0e5, extinction_coeff_k: 6.0e-2 },
13 OpticalAbsorption { formula: "GaAs", wavelength_nm: 800.0, absorption_coeff_per_m: 1.0e6, extinction_coeff_k: 6.0e-2 },
14 OpticalAbsorption { formula: "SiO2", wavelength_nm: 633.0, absorption_coeff_per_m: 1.0e-2, extinction_coeff_k: 1.0e-9 },
15 OpticalAbsorption { formula: "SiO2", wavelength_nm: 1550.0, absorption_coeff_per_m: 4.6e-5, extinction_coeff_k: 5.7e-12 },
16 OpticalAbsorption { formula: "H2O", wavelength_nm: 633.0, absorption_coeff_per_m: 0.36, extinction_coeff_k: 1.81e-8 },
17 OpticalAbsorption { formula: "H2O", wavelength_nm: 1450.0, absorption_coeff_per_m: 30.0, extinction_coeff_k: 3.46e-6 },
18 OpticalAbsorption { formula: "Al", wavelength_nm: 550.0, absorption_coeff_per_m: 1.4e8, extinction_coeff_k: 6.10 },
19 OpticalAbsorption { formula: "Au", wavelength_nm: 550.0, absorption_coeff_per_m: 5.0e7, extinction_coeff_k: 2.21 },
20 OpticalAbsorption { formula: "Ag", wavelength_nm: 550.0, absorption_coeff_per_m: 8.0e7, extinction_coeff_k: 3.51 },
21 OpticalAbsorption { formula: "Cu", wavelength_nm: 550.0, absorption_coeff_per_m: 6.0e7, extinction_coeff_k: 2.60 },
22];
23
24pub fn by_formula_wavelength(formula: &str, wavelength_nm: f64) -> Option<&'static OpticalAbsorption> {
25 TABLE.iter()
26 .filter(|a| a.formula == formula)
27 .min_by(|a, b| {
28 (a.wavelength_nm - wavelength_nm).abs()
29 .partial_cmp(&(b.wavelength_nm - wavelength_nm).abs())
30 .unwrap_or(std::cmp::Ordering::Equal)
31 })
32}