Skip to main content

sciforge_core/dynamics/electro/
waveguide.rs

1use sciforge_hub::prelude::physics::electrodynamics::waves as sf_waves;
2
3#[derive(Debug, Clone, Copy)]
4pub struct RectangularWaveguide {
5    pub width_a_m: f64,
6    pub height_b_m: f64,
7}
8
9impl RectangularWaveguide {
10    pub fn new(width_a_m: f64, height_b_m: f64) -> Self {
11        Self { width_a_m, height_b_m }
12    }
13
14    pub fn cutoff_frequency_te_hz(&self, m: u32, n: u32) -> f64 {
15        sf_waves::waveguide_cutoff_te(m, n, self.width_a_m, self.height_b_m)
16    }
17
18    pub fn cutoff_frequency_te10_hz(&self) -> f64 {
19        self.cutoff_frequency_te_hz(1, 0)
20    }
21
22    pub fn is_propagating(&self, frequency_hz: f64, m: u32, n: u32) -> bool {
23        frequency_hz > self.cutoff_frequency_te_hz(m, n)
24    }
25
26    pub fn guide_wavelength_m(&self, frequency_hz: f64, m: u32, n: u32) -> Option<f64> {
27        let fc = self.cutoff_frequency_te_hz(m, n);
28        if frequency_hz <= fc {
29            return None;
30        }
31        let lambda_0 = sf_waves::wavelength(frequency_hz);
32        Some(lambda_0 / (1.0 - (fc / frequency_hz).powi(2)).sqrt())
33    }
34}