use metrology::{C, G};
pub const GW170817_LOW_SPIN: (f64, f64) = (70.0, 720.0);
pub const GW170817_HIGH_SPIN_MAX: f64 = 630.0;
pub fn lambda(k2: f64, radius: f64, mass: f64) -> f64 {
2.0 / 3.0 * k2 * (C * C * radius / (G * mass)).powi(5)
}
pub fn lambda_tilde(m1: f64, m2: f64, l1: f64, l2: f64) -> f64 {
16.0 / 13.0 * ((m1 + 12.0 * m2) * m1.powi(4) * l1 + (m2 + 12.0 * m1) * m2.powi(4) * l2) / (m1 + m2).powi(5)
}
#[cfg(test)]
mod tests {
use super::*;
use core::f64::consts::PI;
use metrology::SOLAR_MASS;
#[test]
fn the_injections_of_table_vi() {
for (m1, m2, l1, l2, want) in [(1.38, 1.37, 275.0, 309.0, 292.0), (1.68, 1.13, 77.0, 973.0, 303.0), (1.38, 1.37, 1018.0, 1063.0, 1040.0)] {
let got = lambda_tilde(m1, m2, l1, l2);
assert!((got - want).abs() < 0.5, "({m1}, {m2}): {got}");
}
assert!((lambda_tilde(1.4, 1.4, 190.0, 190.0) - 190.0).abs() < 1e-12);
assert!((lambda_tilde(1.4, 1.2, 190.0, 500.0) - lambda_tilde(1.2, 1.4, 500.0, 190.0)).abs() < 1e-12);
}
#[test]
fn a_star_deforms_as_its_compactness_to_the_minus_fifth() {
let k2 = (15.0 - PI * PI) / (2.0 * PI * PI);
assert!((k2 - 0.25991).abs() < 5e-6);
let (m, r) = (1.4 * SOLAR_MASS, 12e3);
let c = G * m / (C * C * r);
assert!((lambda(k2, r, m) * c.powi(5) - 2.0 / 3.0 * k2).abs() < 1e-15);
assert!((lambda(k2, 2.5 * r, m) / lambda(k2, r, m) - 2.5f64.powi(5)).abs() < 1e-9);
}
}