use crate::constants::physical::{C, G};
use std::f64::consts::PI;
pub fn filament_linear_density(m_per_length: f64) -> f64 {
m_per_length
}
pub fn critical_linear_density(cs: f64) -> f64 {
2.0 * cs * cs / G
}
pub fn filament_radius_isothermal(sigma_v: f64, rho_central: f64) -> f64 {
sigma_v / (4.0 * PI * G * rho_central).sqrt()
}
pub fn filament_overdensity_profile(rho_0: f64, r: f64, r_0: f64) -> f64 {
rho_0 / (1.0 + (r / r_0).powi(2))
}
pub fn filament_dm_mass_enclosed(rho_0: f64, r_0: f64, r: f64, length: f64) -> f64 {
PI * rho_0 * r_0 * r_0 * ((1.0 + (r / r_0).powi(2)).ln()) * length
}
pub fn lyman_alpha_optical_depth(n_hi: f64, sigma_lya: f64, path_length: f64) -> f64 {
n_hi * sigma_lya * path_length
}
pub fn lyman_alpha_flux_decrement(tau: f64) -> f64 {
1.0 - (-tau).exp()
}
pub fn gunn_peterson_tau(n_hi_mean: f64, z: f64) -> f64 {
let sigma_lya = 4.48e-18;
let h0 = 2.2e-18;
sigma_lya * n_hi_mean * C / (h0 * (1.0 + z).powf(1.5))
}
pub fn igm_temperature_density_relation(t_0: f64, delta: f64, gamma_minus_1: f64) -> f64 {
t_0 * delta.powf(gamma_minus_1)
}
pub const WARM_HOT_IGM_FRACTION: f64 = 0.40;
pub const WHIM_TEMPERATURE_RANGE_KELVIN: (f64, f64) = (1e5, 1e7);
pub const BARYON_CENSUS_FILAMENTS: f64 = 0.29;
pub fn dispersion_measure_intergalactic(n_e_mean: f64, distance_mpc: f64) -> f64 {
let mpc = 3.0857e22;
n_e_mean * distance_mpc * mpc * 1e-2
}
pub const COSMIC_WEB_DENSITY_THRESHOLD: f64 = 5.0;
pub fn spine_density_contrast(rho_filament: f64, rho_mean: f64) -> f64 {
rho_filament / rho_mean
}