sciforge-lib 0.0.4

Scientific computing library — mathematics, physics, chemistry, biology, astronomy, geology, meteorology.
Documentation
pub fn paschen_voltage(
    a_coefficient: f64,
    b_coefficient: f64,
    pressure_pa: f64,
    distance_m: f64,
    gamma_se: f64,
) -> f64 {
    let pd = pressure_pa * distance_m;
    let term = (1.0 + 1.0 / gamma_se).ln();
    b_coefficient * pd / ((a_coefficient * pd / term).ln())
}

pub fn paschen_minimum_pd(
    a_coefficient: f64,
    gamma_se: f64,
) -> f64 {
    let term = (1.0 + 1.0 / gamma_se).ln();
    std::f64::consts::E * term / a_coefficient
}

pub fn paschen_minimum_voltage(
    b_coefficient: f64,
    a_coefficient: f64,
    gamma_se: f64,
) -> f64 {
    let term = (1.0 + 1.0 / gamma_se).ln();
    b_coefficient * std::f64::consts::E * term / a_coefficient
}

pub fn townsend_first_coefficient(
    a_coefficient: f64,
    b_coefficient: f64,
    pressure_pa: f64,
    e_field_v_per_m: f64,
) -> f64 {
    a_coefficient * pressure_pa * (-b_coefficient * pressure_pa / e_field_v_per_m).exp()
}

pub fn townsend_breakdown_condition(
    alpha_per_m: f64,
    distance_m: f64,
    gamma_se: f64,
) -> f64 {
    gamma_se * ((alpha_per_m * distance_m).exp() - 1.0)
}

pub fn townsend_breakdown_distance(alpha_per_m: f64, gamma_se: f64) -> f64 {
    (1.0 + 1.0 / gamma_se).ln() / alpha_per_m
}

pub fn dielectric_breakdown_voltage(strength_v_per_m: f64, thickness_m: f64) -> f64 {
    strength_v_per_m * thickness_m
}

pub fn dielectric_breakdown_thickness(strength_v_per_m: f64, voltage_v: f64) -> f64 {
    voltage_v / strength_v_per_m
}

pub fn streamer_criterion_meek(
    alpha_per_m: f64,
    distance_m: f64,
    threshold: f64,
) -> bool {
    alpha_per_m * distance_m >= threshold
}

pub fn corona_onset_field_peek(
    radius_m: f64,
    relative_density: f64,
    surface_factor: f64,
) -> f64 {
    let e0 = 3.04e6;
    e0 * relative_density * surface_factor
        * (1.0 + 0.0301 / (relative_density * radius_m).sqrt())
}

pub fn ionization_rate_density(
    electron_density_per_m3: f64,
    drift_velocity_m_per_s: f64,
    alpha_per_m: f64,
) -> f64 {
    electron_density_per_m3 * drift_velocity_m_per_s * alpha_per_m
}

pub fn breakdown_field_pd_scaling(
    e_ref_v_per_m: f64,
    pd_ref: f64,
    pd: f64,
) -> f64 {
    e_ref_v_per_m * (pd_ref / pd).sqrt()
}