sciforge 0.0.3

A comprehensive scientific computing library in pure Rust with zero dependencies
Documentation
pub fn vegf_diffusion_concentration(
    source_concentration: f64,
    distance: f64,
    diffusion_length: f64,
) -> f64 {
    source_concentration * (-distance / diffusion_length).exp()
}

pub fn sprouting_probability(vegf_concentration: f64, threshold: f64, hill_n: f64) -> f64 {
    let v = vegf_concentration.powf(hill_n);
    let t = threshold.powf(hill_n);
    v / (t + v)
}

pub fn vessel_spacing_optimal(
    oxygen_diffusion_coeff: f64,
    consumption_rate: f64,
    po2_arterial: f64,
) -> f64 {
    2.0 * (2.0 * oxygen_diffusion_coeff * po2_arterial / consumption_rate).sqrt()
}

pub fn krogh_cylinder_po2(
    po2_arterial: f64,
    consumption_rate: f64,
    diff_coeff: f64,
    r: f64,
    r_capillary: f64,
) -> f64 {
    po2_arterial
        - consumption_rate / (4.0 * diff_coeff)
            * (r * r
                - r_capillary * r_capillary
                - 2.0 * r_capillary * r_capillary * (r / r_capillary).ln())
}

pub fn angiogenic_switch_balance(pro_angiogenic: f64, anti_angiogenic: f64) -> f64 {
    pro_angiogenic - anti_angiogenic
}

pub fn capillary_density(num_capillaries: f64, tissue_area_mm2: f64) -> f64 {
    num_capillaries / tissue_area_mm2
}

pub fn endothelial_migration_speed(
    chemotactic_gradient: f64,
    sensitivity: f64,
    max_speed: f64,
) -> f64 {
    max_speed * chemotactic_gradient / (sensitivity + chemotactic_gradient)
}

pub fn prevascularization_survival(distance_to_vessel_um: f64, max_diffusion_distance: f64) -> f64 {
    if distance_to_vessel_um <= max_diffusion_distance {
        1.0
    } else {
        (-(distance_to_vessel_um - max_diffusion_distance) / max_diffusion_distance).exp()
    }
}

pub fn microvessel_wall_shear_stress(viscosity: f64, flow_rate: f64, radius: f64) -> f64 {
    4.0 * viscosity * flow_rate / (std::f64::consts::PI * radius.powi(3))
}