sciforge_core/dynamics/electro/
waveguide.rs1use 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}