sciforge-lib 0.0.4

Scientific computing library — mathematics, physics, chemistry, biology, astronomy, geology, meteorology.
Documentation
use std::f64::consts::PI;

pub fn hertz_sphere_sphere_pressure(force_n: f64, r1_m: f64, r2_m: f64, e_star_pa: f64) -> f64 {
    let r = (r1_m * r2_m) / (r1_m + r2_m);
    let a = (3.0 * force_n * r / (4.0 * e_star_pa)).powf(1.0 / 3.0);
    3.0 * force_n / (2.0 * PI * a * a)
}

pub fn jkr_adhesion_pull_off(work_of_adhesion_j_m2: f64, radius_m: f64) -> f64 {
    1.5 * PI * work_of_adhesion_j_m2 * radius_m
}

pub fn dmt_adhesion_pull_off(work_of_adhesion_j_m2: f64, radius_m: f64) -> f64 {
    2.0 * PI * work_of_adhesion_j_m2 * radius_m
}

pub fn mindlin_tangential(
    tangential_force_n: f64,
    normal_force_n: f64,
    mu: f64,
    contact_radius_m: f64,
    g_star_pa: f64,
) -> f64 {
    let q_max = mu * normal_force_n;
    let ratio = (1.0 - tangential_force_n / q_max).max(0.0);
    3.0 * mu * normal_force_n / (16.0 * g_star_pa * contact_radius_m) * (1.0 - ratio.powf(2.0 / 3.0))
}

pub fn cylinder_cylinder_line_contact(
    force_per_length_n_per_m: f64,
    r1_m: f64,
    r2_m: f64,
    e_star_pa: f64,
) -> f64 {
    let r = (r1_m * r2_m) / (r1_m + r2_m);
    let half_width = (4.0 * force_per_length_n_per_m * r / (PI * e_star_pa)).sqrt();
    2.0 * force_per_length_n_per_m / (PI * half_width)
}

pub fn archard_wear_volume(k: f64, normal_force_n: f64, sliding_distance_m: f64, hardness_pa: f64) -> f64 {
    k * normal_force_n * sliding_distance_m / hardness_pa
}

pub fn effective_modulus_e_star(e1_pa: f64, nu1: f64, e2_pa: f64, nu2: f64) -> f64 {
    1.0 / ((1.0 - nu1 * nu1) / e1_pa + (1.0 - nu2 * nu2) / e2_pa)
}