sciforge 0.0.3

A comprehensive scientific computing library in pure Rust with zero dependencies
Documentation
use crate::constants::{
    CRATER_DENSITY_EXPONENT, CRATER_GRAVITY_EXPONENT, CRATER_PROJECTILE_EXPONENT,
    CRATER_SCALING_COEFF, CRATER_VELOCITY_EXPONENT, FIREBALL_ENERGY_EXPONENT,
    FIREBALL_RADIUS_COEFF,
};

pub fn crater_diameter(rho_i: f64, d_p: f64, v: f64, g: f64, rho_t: f64) -> f64 {
    let density_ratio = rho_i / rho_t;
    CRATER_SCALING_COEFF
        * density_ratio.powf(CRATER_DENSITY_EXPONENT)
        * d_p.powf(CRATER_PROJECTILE_EXPONENT)
        * v.powf(CRATER_VELOCITY_EXPONENT)
        * g.powf(CRATER_GRAVITY_EXPONENT)
}

pub fn fireball_radius(e_kt: f64) -> f64 {
    FIREBALL_RADIUS_COEFF * e_kt.powf(FIREBALL_ENERGY_EXPONENT)
}

pub fn ejecta_volume(d: f64, depth: f64) -> f64 {
    std::f64::consts::PI / 6.0 * d.powi(2) * depth
}

pub fn impact_velocity(v_inf: f64, v_esc: f64) -> f64 {
    (v_inf.powi(2) + v_esc.powi(2)).sqrt()
}

pub fn ejecta_escape_fraction(v_esc: f64, v_ejecta: f64) -> f64 {
    if v_ejecta <= v_esc {
        return 0.0;
    }
    (1.0 - (v_esc / v_ejecta).powi(2)).max(0.0)
}