sciforge 0.0.3

A comprehensive scientific computing library in pure Rust with zero dependencies
Documentation
pub fn cubic_volume(a: f64) -> f64 {
    a.powi(3)
}

pub fn tetragonal_volume(a: f64, c: f64) -> f64 {
    a * a * c
}

pub fn orthorhombic_volume(a: f64, b: f64, c: f64) -> f64 {
    a * b * c
}

pub fn hexagonal_volume(a: f64, c: f64) -> f64 {
    3.0_f64.sqrt() / 2.0 * a * a * c
}

pub fn packing_fraction_simple_cubic() -> f64 {
    std::f64::consts::PI / 6.0
}

pub fn packing_fraction_bcc() -> f64 {
    std::f64::consts::PI * 3.0_f64.sqrt() / 8.0
}

pub fn packing_fraction_fcc() -> f64 {
    std::f64::consts::PI * 2.0_f64.sqrt() / 6.0
}

pub fn density_from_unit_cell(z: u32, molar_mass: f64, volume: f64, avogadro: f64) -> f64 {
    z as f64 * molar_mass / (avogadro * volume).max(1e-30)
}

pub fn miller_to_direction_cosines(h: i32, k: i32, l: i32) -> (f64, f64, f64) {
    let norm = ((h * h + k * k + l * l) as f64).sqrt().max(1e-30);
    (h as f64 / norm, k as f64 / norm, l as f64 / norm)
}

pub fn reciprocal_lattice_vector(a: f64) -> f64 {
    2.0 * std::f64::consts::PI / a.max(1e-30)
}