sciforge-core 0.0.4

Shared engineering primitives: materials, fasteners, fluids, propulsion taxonomies, std components.
Documentation
use crate::lubrications::Grease;

pub fn hamrock_dowson_central_film_thickness_m(
    effective_radius_m: f64,
    entrainment_velocity_m_s: f64,
    dynamic_viscosity_pa_s: f64,
    pressure_viscosity_coefficient_per_pa: f64,
    effective_modulus_pa: f64,
    normal_load_n: f64,
    ellipticity_k: f64,
) -> f64 {
    let u = dynamic_viscosity_pa_s * entrainment_velocity_m_s
        / (effective_modulus_pa * effective_radius_m);
    let g = pressure_viscosity_coefficient_per_pa * effective_modulus_pa;
    let w = normal_load_n / (effective_modulus_pa * effective_radius_m * effective_radius_m);
    2.69 * effective_radius_m
        * u.powf(0.67)
        * g.powf(0.53)
        * w.powf(-0.067)
        * (1.0 - 0.61 * (-0.73 * ellipticity_k).exp())
}

pub fn hamrock_dowson_minimum_film_thickness_m(
    effective_radius_m: f64,
    entrainment_velocity_m_s: f64,
    dynamic_viscosity_pa_s: f64,
    pressure_viscosity_coefficient_per_pa: f64,
    effective_modulus_pa: f64,
    normal_load_n: f64,
    ellipticity_k: f64,
) -> f64 {
    let u = dynamic_viscosity_pa_s * entrainment_velocity_m_s
        / (effective_modulus_pa * effective_radius_m);
    let g = pressure_viscosity_coefficient_per_pa * effective_modulus_pa;
    let w = normal_load_n / (effective_modulus_pa * effective_radius_m * effective_radius_m);
    3.63 * effective_radius_m
        * u.powf(0.68)
        * g.powf(0.49)
        * w.powf(-0.073)
        * (1.0 - (-0.68 * ellipticity_k).exp())
}

pub fn lambda_film_parameter(
    minimum_film_thickness_m: f64,
    composite_roughness_rms_m: f64,
) -> f64 {
    minimum_film_thickness_m / composite_roughness_rms_m
}

pub fn composite_roughness_m(rq1_m: f64, rq2_m: f64) -> f64 {
    (rq1_m * rq1_m + rq2_m * rq2_m).sqrt()
}

#[derive(Debug, Clone, Copy)]
pub struct EhlContact {
    pub grease: Grease,
    pub effective_radius_m: f64,
    pub entrainment_velocity_m_s: f64,
    pub effective_modulus_pa: f64,
    pub normal_load_n: f64,
    pub pressure_viscosity_coefficient_per_pa: f64,
    pub ellipticity_k: f64,
    pub composite_roughness_rms_m: f64,
}

impl EhlContact {
    pub fn central_film_thickness_m(&self) -> f64 {
        hamrock_dowson_central_film_thickness_m(
            self.effective_radius_m,
            self.entrainment_velocity_m_s,
            self.grease.dynamic_viscosity_pa_s(),
            self.pressure_viscosity_coefficient_per_pa,
            self.effective_modulus_pa,
            self.normal_load_n,
            self.ellipticity_k,
        )
    }

    pub fn minimum_film_thickness_m(&self) -> f64 {
        hamrock_dowson_minimum_film_thickness_m(
            self.effective_radius_m,
            self.entrainment_velocity_m_s,
            self.grease.dynamic_viscosity_pa_s(),
            self.pressure_viscosity_coefficient_per_pa,
            self.effective_modulus_pa,
            self.normal_load_n,
            self.ellipticity_k,
        )
    }

    pub fn lambda_ratio(&self) -> f64 {
        lambda_film_parameter(self.minimum_film_thickness_m(), self.composite_roughness_rms_m)
    }
}