sciforge-core 0.0.4

Shared engineering primitives: materials, fasteners, fluids, propulsion taxonomies, std components.
Documentation
use crate::moleculars::{Gas, Liquid, Material};
use sciforge_hub::prelude::physics::acoustics::propagation as sf_prop;

impl Gas {
    pub fn wavelength_m(&self, frequency_hz: f64, temperature_k: f64) -> f64 {
        sf_prop::wavelength(self.speed_of_sound_m_s(temperature_k), frequency_hz)
    }

    pub fn acoustic_impedance_pa_s_m(&self, pressure_pa: f64, temperature_k: f64) -> f64 {
        sf_prop::acoustic_impedance(
            self.density_ideal_kg_m3(pressure_pa, temperature_k),
            self.speed_of_sound_m_s(temperature_k),
        )
    }

    pub fn plane_wave_pressure_pa(
        &self,
        particle_velocity_m_s: f64,
        pressure_pa: f64,
        temperature_k: f64,
    ) -> f64 {
        sf_prop::plane_wave_pressure(
            self.density_ideal_kg_m3(pressure_pa, temperature_k),
            self.speed_of_sound_m_s(temperature_k),
            particle_velocity_m_s,
        )
    }

    pub fn sound_pressure_level_db(&self, pressure_pa: f64) -> f64 {
        sf_prop::sound_pressure_level_air(pressure_pa)
    }
}

impl Liquid {
    pub fn wavelength_m(&self, frequency_hz: f64) -> f64 {
        sf_prop::wavelength(self.speed_of_sound_m_s(), frequency_hz)
    }

    pub fn acoustic_impedance_pa_s_m(&self) -> f64 {
        sf_prop::acoustic_impedance(self.density_kg_m3_ref, self.speed_of_sound_m_s())
    }

    pub fn plane_wave_pressure_pa(&self, particle_velocity_m_s: f64) -> f64 {
        sf_prop::plane_wave_pressure(
            self.density_kg_m3_ref,
            self.speed_of_sound_m_s(),
            particle_velocity_m_s,
        )
    }

    pub fn sound_pressure_level_db(&self, pressure_pa: f64) -> f64 {
        sf_prop::sound_pressure_level_water(pressure_pa)
    }
}

impl Material {
    pub fn speed_of_sound_m_s(&self) -> f64 {
        sf_prop::speed_of_sound_solid(self.young_modulus_pa, self.density_kg_m3)
    }

    pub fn longitudinal_speed_m_s(&self) -> f64 {
        sf_prop::speed_of_sound_solid_longitudinal(
            self.young_modulus_pa,
            self.poisson_ratio,
            self.density_kg_m3,
        )
    }

    pub fn shear_speed_m_s(&self) -> f64 {
        sf_prop::speed_of_sound_solid_shear(
            self.young_modulus_pa,
            self.poisson_ratio,
            self.density_kg_m3,
        )
    }

    pub fn wavelength_m(&self, frequency_hz: f64) -> f64 {
        sf_prop::wavelength(self.speed_of_sound_m_s(), frequency_hz)
    }

    pub fn acoustic_impedance_pa_s_m(&self) -> f64 {
        sf_prop::acoustic_impedance(self.density_kg_m3, self.speed_of_sound_m_s())
    }

    pub fn longitudinal_acoustic_impedance_pa_s_m(&self) -> f64 {
        sf_prop::acoustic_impedance(self.density_kg_m3, self.longitudinal_speed_m_s())
    }

    pub fn shear_acoustic_impedance_pa_s_m(&self) -> f64 {
        sf_prop::acoustic_impedance(self.density_kg_m3, self.shear_speed_m_s())
    }

    pub fn plane_wave_pressure_pa(&self, particle_velocity_m_s: f64) -> f64 {
        sf_prop::plane_wave_pressure(
            self.density_kg_m3,
            self.speed_of_sound_m_s(),
            particle_velocity_m_s,
        )
    }
}