sciforge-lib 0.0.4

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

pub fn impact_velocity_drop(height_m: f64, g: f64) -> f64 {
    (2.0 * g * height_m).sqrt()
}

pub fn restitution_velocity(v_in: f64, e: f64) -> f64 {
    -e * v_in
}

pub fn hertz_impact_max_force(
    mass_kg: f64,
    velocity_m_per_s: f64,
    r_eq_m: f64,
    e_star_pa: f64,
) -> f64 {
    let k = (4.0 / 3.0) * e_star_pa * r_eq_m.sqrt();
    let f_max_pow = mass_kg * velocity_m_per_s.powi(2) * k.powf(2.0 / 5.0);
    1.139 * (f_max_pow).powf(3.0 / 5.0)
}

pub fn hertz_impact_duration(
    mass_kg: f64,
    velocity_m_per_s: f64,
    r_eq_m: f64,
    e_star_pa: f64,
) -> f64 {
    let k = (4.0 / 3.0) * e_star_pa * r_eq_m.sqrt();
    2.94 * (5.0 * mass_kg / (4.0 * k)).powf(2.0 / 5.0) * velocity_m_per_s.powf(-1.0 / 5.0)
}

pub fn charpy_energy_to_toughness(charpy_j: f64, area_m2: f64) -> f64 {
    charpy_j / area_m2
}

pub fn elastic_collision_velocities(
    m1: f64,
    v1: f64,
    m2: f64,
    v2: f64,
) -> (f64, f64) {
    let v1_p = ((m1 - m2) * v1 + 2.0 * m2 * v2) / (m1 + m2);
    let v2_p = ((m2 - m1) * v2 + 2.0 * m1 * v1) / (m1 + m2);
    (v1_p, v2_p)
}

pub fn inelastic_collision_velocity(m1: f64, v1: f64, m2: f64, v2: f64) -> f64 {
    (m1 * v1 + m2 * v2) / (m1 + m2)
}

pub fn restitution_kinetic_energy_lost(m1: f64, m2: f64, v_rel: f64, e: f64) -> f64 {
    0.5 * (m1 * m2) / (m1 + m2) * (1.0 - e * e) * v_rel * v_rel
}

pub fn split_hopkinson_strain_rate(c0: f64, gauge_strain: f64, length_m: f64) -> f64 {
    -2.0 * c0 * gauge_strain / length_m
}

pub fn pressure_wave_amplitude(rho: f64, c: f64, particle_velocity: f64) -> f64 {
    rho * c * particle_velocity
}

pub fn natural_frequency_lumped(k_n_per_m: f64, mass_kg: f64) -> f64 {
    (1.0 / (2.0 * PI)) * (k_n_per_m / mass_kg).sqrt()
}