sciforge 0.0.3

A comprehensive scientific computing library in pure Rust with zero dependencies
Documentation
pub fn degree_of_unsaturation(c: u32, h: u32, n: u32, halogens: u32) -> f64 {
    (2.0 * c as f64 + 2.0 + n as f64 - h as f64 - halogens as f64) / 2.0
}

pub fn molecular_formula_mass(c: u32, h: u32, o: u32, n: u32, s: u32) -> f64 {
    c as f64 * 12.011 + h as f64 * 1.008 + o as f64 * 15.999 + n as f64 * 14.007 + s as f64 * 32.06
}

pub fn alkane_boiling_point_estimate(carbon_count: u32) -> f64 {
    if carbon_count == 0 {
        return -161.5;
    }
    -161.5 + 30.0 * (carbon_count as f64 - 1.0) - 0.3 * (carbon_count as f64 - 1.0).powi(2)
}

pub fn huckel_energy_linear(n_atoms: usize, alpha: f64, beta: f64) -> Vec<f64> {
    (0..n_atoms)
        .map(|k| {
            alpha
                + 2.0 * beta * (std::f64::consts::PI * (k + 1) as f64 / (n_atoms + 1) as f64).cos()
        })
        .collect()
}

pub fn huckel_energy_cyclic(n_atoms: usize, alpha: f64, beta: f64) -> Vec<f64> {
    (0..n_atoms)
        .map(|k| {
            alpha + 2.0 * beta * (2.0 * std::f64::consts::PI * k as f64 / n_atoms as f64).cos()
        })
        .collect()
}

pub fn delocalization_energy(total_pi_energy: f64, isolated_energy: f64) -> f64 {
    total_pi_energy - isolated_energy
}

pub fn resonance_stabilization(n_structures: usize) -> f64 {
    if n_structures <= 1 {
        return 0.0;
    }
    (n_structures as f64).ln() * 10.0
}