sciforge 0.0.3

A comprehensive scientific computing library in pure Rust with zero dependencies
Documentation
pub fn membrane_bending_energy(kappa: f64, curvature: f64, spontaneous_curvature: f64) -> f64 {
    0.5 * kappa * (curvature - spontaneous_curvature).powi(2)
}

pub fn helfrich_energy(kappa: f64, kappa_bar: f64, c1: f64, c2: f64, c0: f64) -> f64 {
    0.5 * kappa * (c1 + c2 - c0).powi(2) + kappa_bar * c1 * c2
}

pub fn membrane_tension(area_strain: f64, stretch_modulus: f64) -> f64 {
    stretch_modulus * area_strain
}

pub fn lipid_diffusion_saffman_delbruck(
    viscosity_membrane: f64,
    viscosity_water: f64,
    membrane_thickness: f64,
    radius: f64,
    t: f64,
) -> f64 {
    use crate::constants::K_B;
    let eta_ratio = viscosity_membrane * membrane_thickness / (viscosity_water * radius);
    K_B * t / (4.0 * std::f64::consts::PI * viscosity_membrane * membrane_thickness)
        * (eta_ratio.ln() - 0.5772)
}

pub fn osmotic_lysis_threshold(
    internal_osmolarity: f64,
    membrane_tension_max: f64,
    radius: f64,
) -> f64 {
    let t = 310.0;
    let pressure_max = 2.0 * membrane_tension_max / radius;
    let delta_c = pressure_max / (crate::constants::N_A * crate::constants::K_B * t);
    internal_osmolarity - delta_c
}

pub fn vesicle_budding_energy(kappa: f64, radius: f64) -> f64 {
    8.0 * std::f64::consts::PI * kappa + 4.0 * std::f64::consts::PI * kappa / radius
}

pub fn flip_flop_rate(activation_energy: f64, t: f64) -> f64 {
    use crate::constants::K_B;
    let k0 = 1e12;
    k0 * (-activation_energy / (K_B * t)).exp()
}

pub fn lateral_pressure_profile(
    depth: f64,
    head_pressure: f64,
    tail_pressure: f64,
    thickness: f64,
) -> f64 {
    let mid = thickness / 2.0;
    if depth < mid {
        head_pressure * (1.0 - depth / mid)
    } else {
        -tail_pressure * (depth - mid) / mid
    }
}

pub fn line_tension_domain(length: f64, lambda: f64) -> f64 {
    lambda * length
}