sciforge-core 0.0.4

Shared engineering primitives: materials, fasteners, fluids, propulsion taxonomies, std components.
Documentation
use crate::moleculars::{Gas, Liquid};
use sciforge_hub::prelude::constants::EARTH_GRAVITY;
use sciforge_hub::prelude::physics::fluid_mechanics::flow as sf_flow;

impl Gas {
    pub fn bernoulli_pressure_pa(
        &self,
        v1_m_s: f64,
        p1_pa: f64,
        v2_m_s: f64,
        pressure_pa: f64,
        temperature_k: f64,
    ) -> f64 {
        sf_flow::bernoulli_pressure(
            self.density_ideal_kg_m3(pressure_pa, temperature_k),
            v1_m_s,
            p1_pa,
            v2_m_s,
        )
    }

    pub fn bernoulli_height_m(
        &self,
        v1_m_s: f64,
        p1_pa: f64,
        h1_m: f64,
        v2_m_s: f64,
        p2_pa: f64,
        pressure_pa: f64,
        temperature_k: f64,
    ) -> f64 {
        sf_flow::bernoulli_height(
            self.density_ideal_kg_m3(pressure_pa, temperature_k),
            v1_m_s,
            p1_pa,
            h1_m,
            v2_m_s,
            p2_pa,
            EARTH_GRAVITY,
        )
    }

    pub fn hagen_poiseuille_flow_m3_s(
        &self,
        delta_p_pa: f64,
        radius_m: f64,
        length_m: f64,
        temperature_k: f64,
    ) -> f64 {
        sf_flow::hagen_poiseuille(
            delta_p_pa,
            radius_m,
            length_m,
            self.dynamic_viscosity_pa_s(temperature_k),
        )
    }

    pub fn drag_force_n(
        &self,
        cd: f64,
        velocity_m_s: f64,
        area_m2: f64,
        pressure_pa: f64,
        temperature_k: f64,
    ) -> f64 {
        sf_flow::drag_force(
            cd,
            self.density_ideal_kg_m3(pressure_pa, temperature_k),
            velocity_m_s,
            area_m2,
        )
    }

    pub fn lift_force_n(
        &self,
        cl: f64,
        velocity_m_s: f64,
        area_m2: f64,
        pressure_pa: f64,
        temperature_k: f64,
    ) -> f64 {
        sf_flow::lift_force(
            cl,
            self.density_ideal_kg_m3(pressure_pa, temperature_k),
            velocity_m_s,
            area_m2,
        )
    }

    pub fn stokes_drag_n(&self, radius_m: f64, velocity_m_s: f64, temperature_k: f64) -> f64 {
        sf_flow::stokes_drag(
            self.dynamic_viscosity_pa_s(temperature_k),
            radius_m,
            velocity_m_s,
        )
    }

    pub fn darcy_weisbach_pressure_drop_pa(
        &self,
        friction_factor: f64,
        length_m: f64,
        diameter_m: f64,
        velocity_m_s: f64,
        pressure_pa: f64,
        temperature_k: f64,
    ) -> f64 {
        sf_flow::darcy_weisbach(
            friction_factor,
            length_m,
            diameter_m,
            self.density_ideal_kg_m3(pressure_pa, temperature_k),
            velocity_m_s,
        )
    }
}

impl Liquid {
    pub fn bernoulli_pressure_pa(&self, v1_m_s: f64, p1_pa: f64, v2_m_s: f64) -> f64 {
        sf_flow::bernoulli_pressure(self.density_kg_m3_ref, v1_m_s, p1_pa, v2_m_s)
    }

    pub fn hagen_poiseuille_flow_m3_s(
        &self,
        delta_p_pa: f64,
        radius_m: f64,
        length_m: f64,
    ) -> f64 {
        sf_flow::hagen_poiseuille(
            delta_p_pa,
            radius_m,
            length_m,
            self.dynamic_viscosity_pa_s_ref,
        )
    }

    pub fn drag_force_n(&self, cd: f64, velocity_m_s: f64, area_m2: f64) -> f64 {
        sf_flow::drag_force(cd, self.density_kg_m3_ref, velocity_m_s, area_m2)
    }

    pub fn lift_force_n(&self, cl: f64, velocity_m_s: f64, area_m2: f64) -> f64 {
        sf_flow::lift_force(cl, self.density_kg_m3_ref, velocity_m_s, area_m2)
    }

    pub fn stokes_drag_n(&self, radius_m: f64, velocity_m_s: f64) -> f64 {
        sf_flow::stokes_drag(self.dynamic_viscosity_pa_s_ref, radius_m, velocity_m_s)
    }

    pub fn terminal_velocity_sphere_m_s(
        &self,
        particle_density_kg_m3: f64,
        particle_radius_m: f64,
    ) -> f64 {
        sf_flow::terminal_velocity_sphere(
            particle_density_kg_m3,
            self.density_kg_m3_ref,
            particle_radius_m,
            self.dynamic_viscosity_pa_s_ref,
            EARTH_GRAVITY,
        )
    }

    pub fn darcy_weisbach_pressure_drop_pa(
        &self,
        friction_factor: f64,
        length_m: f64,
        diameter_m: f64,
        velocity_m_s: f64,
    ) -> f64 {
        sf_flow::darcy_weisbach(
            friction_factor,
            length_m,
            diameter_m,
            self.density_kg_m3_ref,
            velocity_m_s,
        )
    }

    pub fn torricelli_velocity_m_s(&self, head_m: f64) -> f64 {
        sf_flow::torricelli(EARTH_GRAVITY, head_m)
    }
}