darkmatter 0.0.2

Dark matter simulation engine — gravitational fields, particle dynamics, halo stability, and cosmological constants
Documentation
use darkmatter::cosmology::boltzmann::{
    boltzmann_rhs, boltzmann_rhs_decay, coannihilation_effective_sigma_v,
    collision_term_annihilation, comoving_number_density_eq, entropy_injection_ratio,
    freeze_in_relic_density, freeze_in_yield, freeze_out_x_from_solution,
    relic_density_from_solution, solve_boltzmann_freeze_out,
};

#[test]
fn comoving_number_density_decreases() {
    let n_eq = comoving_number_density_eq(20.0, 2.0);
    assert!(n_eq > 0.0);
    let n_eq2 = comoving_number_density_eq(40.0, 2.0);
    assert!(n_eq > n_eq2);
}

#[test]
fn collision_term() {
    let ct = collision_term_annihilation(1e10, 1e8, 3e-26, 1e50);
    assert!(ct < 0.0);
}

#[test]
fn rhs_returns_finite() {
    let dy = boltzmann_rhs(20.0, 1e-10, 100.0, 3e-26, 2.0);
    assert!(dy.is_finite());
}

#[test]
fn solve_freeze_out() {
    let solution = solve_boltzmann_freeze_out(100.0, 3e-26, 2.0, 1.0, 50.0, 5000);
    assert!(solution.len() > 1);

    let (x_last, y_last) = solution.last().copied().unwrap();
    assert!(x_last > 0.0);
    assert!(y_last > 0.0);
}

#[test]
fn relic_density() {
    let solution = solve_boltzmann_freeze_out(100.0, 3e-26, 2.0, 1.0, 50.0, 5000);
    let (x_f, y_f) = solution.last().copied().unwrap();
    let omega = relic_density_from_solution(y_f, 100.0, x_f);
    assert!(omega.is_finite());
    assert!(omega > 0.0);
}

#[test]
fn freeze_out_x() {
    let solution = solve_boltzmann_freeze_out(100.0, 3e-26, 2.0, 1.0, 50.0, 5000);
    let xf = freeze_out_x_from_solution(&solution, 2.0, 100.0);
    assert!(xf > 1.0);
    assert!(xf < 50.0);
}

#[test]
fn coannihilation() {
    let sigma_eff = coannihilation_effective_sigma_v(3e-26, 2e-26, 1e-26, 2.0, 2.0, 0.1, 20.0);
    assert!(sigma_eff > 0.0);
}

#[test]
fn freeze_in_yield_positive() {
    let y = freeze_in_yield(1e-12, 1000.0, 10.0, 1.22e19);
    assert!(y > 0.0);
    assert!(y.is_finite());
}

#[test]
fn freeze_in_relic() {
    let omega = freeze_in_relic_density(1e-12, 1000.0, 10.0);
    assert!(omega > 0.0);
    assert!(omega.is_finite());
}

#[test]
fn rhs_decay_finite() {
    let dy = boltzmann_rhs_decay(5.0, 1e-8, 500.0, 1e-20, 10.0, 1.0);
    assert!(dy.is_finite());
}

#[test]
fn entropy_injection() {
    let ratio = entropy_injection_ratio(1e4, 1e2);
    assert!(ratio >= 1.0);

    let ratio_same = entropy_injection_ratio(1e4, 1e4);
    assert_eq!(ratio_same, 1.0);
}