sciforge 0.0.3

A comprehensive scientific computing library in pure Rust with zero dependencies
Documentation
use crate::constants::R_GAS;

pub fn van_der_waals_pressure(n: f64, t: f64, v: f64, a: f64, b: f64) -> f64 {
    n * R_GAS * t / (v - n * b).max(1e-30) - a * n * n / (v * v).max(1e-30)
}

pub fn redlich_kwong_pressure(n: f64, t: f64, v: f64, a: f64, b: f64) -> f64 {
    let vm = v / n.max(1e-30);
    R_GAS * t / (vm - b).max(1e-30) - a / (t.sqrt() * vm * (vm + b)).max(1e-30)
}

pub fn compressibility_factor(p: f64, v: f64, n: f64, t: f64) -> f64 {
    p * v / (n * R_GAS * t).max(1e-30)
}

pub fn virial_equation_b(p: f64, t: f64, b: f64) -> f64 {
    R_GAS * t / p.max(1e-30) * (1.0 + b * p / (R_GAS * t))
}

pub fn boyle_temperature(a: f64, b: f64) -> f64 {
    a / (R_GAS * b).max(1e-30)
}

pub fn critical_temperature(a: f64, b: f64) -> f64 {
    8.0 * a / (27.0 * R_GAS * b).max(1e-30)
}

pub fn critical_pressure(a: f64, b: f64) -> f64 {
    a / (27.0 * b * b).max(1e-30)
}

pub fn critical_volume(b: f64) -> f64 {
    3.0 * b
}

pub fn reduced_temperature(t: f64, tc: f64) -> f64 {
    t / tc.max(1e-30)
}

pub fn reduced_pressure(p: f64, pc: f64) -> f64 {
    p / pc.max(1e-30)
}

pub fn peng_robinson_pressure(t: f64, vm: f64, a: f64, b: f64) -> f64 {
    R_GAS * t / (vm - b).max(1e-30) - a / (vm * (vm + b) + b * (vm - b)).max(1e-30)
}

pub fn fugacity_coefficient(z: f64, b_prime: f64, p: f64) -> f64 {
    ((z - 1.0) - (z - b_prime * p).max(1e-30).ln()).exp()
}

pub fn acentric_factor(p_sat: f64, pc: f64) -> f64 {
    -1.0 - (p_sat / pc.max(1e-30)).max(1e-30).log10()
}