sciforge-core 0.0.4

Shared engineering primitives: materials, fasteners, fluids, propulsion taxonomies, std components.
Documentation
pub mod mixing;
pub mod processes;

pub use mixing::*;
pub use processes::*;

use crate::moleculars::Gas;

pub struct GasState<'a> {
    pub gas: &'a Gas,
    pub pressure_pa: f64,
    pub temperature_k: f64,
}

impl<'a> GasState<'a> {
    pub fn new(gas: &'a Gas, pressure_pa: f64, temperature_k: f64) -> Self {
        Self { gas, pressure_pa, temperature_k }
    }

    pub fn density_kg_m3(&self) -> f64 {
        self.gas.density_ideal_kg_m3(self.pressure_pa, self.temperature_k)
    }

    pub fn specific_volume_m3_kg(&self) -> f64 {
        1.0 / self.density_kg_m3()
    }

    pub fn enthalpy_j_kg(&self, t_ref_k: f64) -> f64 {
        self.gas.cp_j_kgk_ref * (self.temperature_k - t_ref_k)
    }

    pub fn internal_energy_j_kg(&self, t_ref_k: f64) -> f64 {
        self.gas.cv_j_kgk_ref * (self.temperature_k - t_ref_k)
    }

    pub fn entropy_j_kgk(&self, p_ref_pa: f64, t_ref_k: f64) -> f64 {
        let r = self.gas.specific_gas_constant_j_kgk();
        self.gas.cp_j_kgk_ref * (self.temperature_k / t_ref_k).ln()
            - r * (self.pressure_pa / p_ref_pa).ln()
    }

    pub fn mach_number(&self, velocity_m_s: f64) -> f64 {
        velocity_m_s / self.gas.speed_of_sound_m_s(self.temperature_k)
    }

    pub fn dynamic_viscosity_pa_s(&self) -> f64 {
        self.gas.dynamic_viscosity_pa_s(self.temperature_k)
    }

    pub fn kinematic_viscosity_m2_s(&self) -> f64 {
        self.dynamic_viscosity_pa_s() / self.density_kg_m3()
    }
}