sciforge-lib 0.0.4

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

pub fn euler_critical_stress(e_pa: f64, slenderness: f64) -> f64 {
    PI * PI * e_pa / (slenderness * slenderness)
}

pub fn johnson_short_column(sigma_y_pa: f64, e_pa: f64, slenderness: f64) -> f64 {
    let cc = (2.0 * PI * PI * e_pa / sigma_y_pa).sqrt();
    if slenderness >= cc {
        PI * PI * e_pa / (slenderness * slenderness)
    } else {
        sigma_y_pa * (1.0 - sigma_y_pa * (slenderness * slenderness) / (4.0 * PI * PI * e_pa))
    }
}

pub fn effective_length(length_m: f64, end_condition: &str) -> f64 {
    let k = match end_condition {
        "fixed-fixed" => 0.5,
        "fixed-pinned" => 0.7,
        "pinned-pinned" => 1.0,
        "fixed-free" => 2.0,
        _ => 1.0,
    };
    k * length_m
}

pub fn plate_buckling_critical_stress(
    e_pa: f64,
    nu: f64,
    thickness_m: f64,
    width_m: f64,
    k_factor: f64,
) -> f64 {
    k_factor * PI * PI * e_pa / (12.0 * (1.0 - nu * nu)) * (thickness_m / width_m).powi(2)
}

pub fn cylindrical_shell_buckling(
    e_pa: f64,
    thickness_m: f64,
    radius_m: f64,
    nu: f64,
) -> f64 {
    e_pa * thickness_m / (radius_m * (3.0 * (1.0 - nu * nu)).sqrt())
}