use sagittariusas::config::parameters::*;
use sagittariusas::engine::accretion_disk::{AccretionDisk, DiskModel};
use sagittariusas::observables::radiation::AccretionRadiation;
use sagittariusas::utils::math::log_range;
use std::f64::consts::PI;
use std::process;
fn main() {
let mdot = 1e-9 * SOLAR_MASS / (365.25 * 86400.0);
let ss = AccretionDisk::new(SGR_A_MASS, mdot);
let adaf = AccretionDisk::new(SGR_A_MASS, mdot)
.with_model(DiskModel::Adaf)
.with_alpha(0.3);
let radii = log_range(ss.inner_radius, ss.outer_radius, 200);
let integrate_lum = |disk: &AccretionDisk| -> f64 {
radii
.windows(2)
.map(|w| {
let r = 0.5 * (w[0] + w[1]);
let dr = w[1] - w[0];
SIGMA_SB * disk.temperature_profile(r).powi(4) * 4.0 * PI * r * dr
})
.sum()
};
let lum_ss = integrate_lum(&ss);
let lum_adaf = integrate_lum(&adaf);
let accr = AccretionRadiation::new(SGR_A_MASS, mdot);
let chandra_lum = 2e26_f64;
let t_peak = ss
.radial_profile(10)
.iter()
.map(|(_, t)| *t)
.fold(0.0_f64, f64::max);
let valid = accr.eddington_ratio() < 1.0
&& lum_ss / chandra_lum > 0.0
&& lum_adaf < lum_ss
&& t_peak > 0.0;
process::exit(if valid { 0 } else { 1 });
}