sciforge-core 0.0.4

Shared engineering primitives: materials, fasteners, fluids, propulsion taxonomies, std components.
Documentation
use crate::moleculars::Material;
use sciforge_hub::prelude::constants::physics::solid_mechanics::fatigue;
use sciforge_hub::prelude::physics::solid_mechanics::fatigue as sf_fat;

impl Material {
    pub fn fatigue_sigma_f_prime_pa(&self) -> Option<f64> {
        fatigue::by_formula(self.formula).map(|f| f.sigma_f_prime_pa)
    }

    pub fn fatigue_basquin_b(&self) -> Option<f64> {
        fatigue::by_formula(self.formula).map(|f| f.basquin_b)
    }

    pub fn fatigue_epsilon_f_prime(&self) -> Option<f64> {
        fatigue::by_formula(self.formula).map(|f| f.epsilon_f_prime)
    }

    pub fn fatigue_coffin_manson_c(&self) -> Option<f64> {
        fatigue::by_formula(self.formula).map(|f| f.coffin_manson_c)
    }

    pub fn endurance_limit_pa(&self) -> Option<f64> {
        fatigue::by_formula(self.formula).map(|f| f.endurance_limit_pa)
    }

    pub fn fatigue_ultimate_pa(&self) -> Option<f64> {
        fatigue::by_formula(self.formula).map(|f| f.ultimate_pa)
    }

    pub fn goodman_safety_factor(&self, sigma_a_pa: f64, sigma_m_pa: f64) -> Option<f64> {
        let f = fatigue::by_formula(self.formula)?;
        Some(sf_fat::goodman_criterion(
            sigma_a_pa,
            sigma_m_pa,
            f.endurance_limit_pa,
            f.ultimate_pa,
        ))
    }

    pub fn soderberg_safety_factor(&self, sigma_a_pa: f64, sigma_m_pa: f64) -> Option<f64> {
        let f = fatigue::by_formula(self.formula)?;
        Some(sf_fat::soderberg_criterion(
            sigma_a_pa,
            sigma_m_pa,
            f.endurance_limit_pa,
            self.yield_strength_pa,
        ))
    }

    pub fn gerber_safety_factor(&self, sigma_a_pa: f64, sigma_m_pa: f64) -> Option<f64> {
        let f = fatigue::by_formula(self.formula)?;
        Some(sf_fat::gerber_criterion(
            sigma_a_pa,
            sigma_m_pa,
            f.endurance_limit_pa,
            f.ultimate_pa,
        ))
    }

    pub fn morrow_corrected_amplitude_pa(&self, sigma_a_pa: f64, sigma_m_pa: f64) -> Option<f64> {
        let f = fatigue::by_formula(self.formula)?;
        Some(sf_fat::morrow_correction(
            sigma_a_pa,
            sigma_m_pa,
            f.sigma_f_prime_pa,
        ))
    }

    pub fn smith_watson_topper_parameter(
        &self,
        sigma_max_pa: f64,
        epsilon_a: f64,
    ) -> f64 {
        sf_fat::swt_parameter(sigma_max_pa, epsilon_a, self.young_modulus_pa)
    }

    pub fn walker_corrected_amplitude_pa(
        &self,
        sigma_a_pa: f64,
        sigma_max_pa: f64,
        gamma: f64,
    ) -> f64 {
        sf_fat::walker_correction(sigma_a_pa, sigma_max_pa, gamma)
    }

    pub fn fatigue_life_basquin_cycles(&self, sigma_a_pa: f64) -> Option<f64> {
        let f = fatigue::by_formula(self.formula)?;
        Some(sf_fat::sn_curve_basquin_inverse(
            sigma_a_pa,
            f.sigma_f_prime_pa,
            f.basquin_b,
        ))
    }

    pub fn marin_endurance_factor(
        &self,
        k_load: f64,
        k_size: f64,
        k_surface: f64,
        k_temperature: f64,
        k_reliability: f64,
        k_misc: f64,
    ) -> f64 {
        sf_fat::endurance_factor_marin(
            k_load,
            k_size,
            k_surface,
            k_temperature,
            k_reliability,
            k_misc,
        )
    }
}