cometsfactory 0.0.3

Comet factory — classify, build and catalogue comets of any type: short-period, long-period, Halley-type, sungrazer, interstellar, main-belt comet, centaur-transition, and extinct.
Documentation
use cometsfactory::engine::coma;
use cometsfactory::observables::photometry;
use cometsfactory::observables::tail;
use cometsfactory::physics::sublimation;

fn main() {
    let nucleus_radius = 1000.0;
    let active_fraction = 0.05;
    let albedo = 0.04;
    let r_au = 1.5;
    let delta_au = 1.2;

    let q_gas = sublimation::gas_production_rate(nucleus_radius, active_fraction, r_au, albedo);
    assert!(q_gas > 0.0);

    let h_t = photometry::absolute_total_magnitude(8.0, delta_au, r_au, 4.0);
    let m_app = photometry::apparent_total_magnitude(h_t, delta_au, r_au, 4.0);
    assert!((m_app - 8.0).abs() < 1e-6);

    let h_nuc = photometry::nuclear_magnitude(nucleus_radius, albedo);
    assert!(h_nuc > 0.0);

    let phase_corr = photometry::phase_correction(30.0, 0.04);
    assert!(phase_corr > 0.0);

    let dust_to_gas = 1.0;
    let bv = photometry::color_index_bv(dust_to_gas);
    assert!(bv > 0.6);

    let afrho_val = coma::afrho(1.0e6, r_au);
    assert!(afrho_val > 0.0);

    let coma_cs = photometry::coma_cross_section(afrho_val, 10000.0);
    assert!(coma_cs > 0.0);

    let coma_r = coma::coma_radius(q_gas, r_au, albedo);
    assert!(coma_r > 0.0);

    let v_gas = sublimation::thermal_gas_velocity(r_au, albedo);
    assert!(v_gas > 0.0);

    let beta = 0.5;
    let v_orbit = 29784.0 / r_au.sqrt();
    let dust_len = coma::dust_tail_length(beta, r_au, v_orbit);
    assert!(dust_len > 0.0);

    let ion_len = coma::ion_tail_length(q_gas, r_au);
    assert!(ion_len > 0.0);

    let dust_angle = tail::dust_tail_angle(beta, r_au);
    assert!(dust_angle > 0.0);

    let sw = 400_000.0;
    let ion_aberr = tail::ion_tail_aberration(r_au, sw);
    assert!(ion_aberr > 0.0);

    let striae = tail::striae_spacing(50.0, 3600.0);
    assert!((striae - 180000.0).abs() < 1.0);

    let app_len = tail::apparent_tail_length_deg(dust_len, delta_au);
    assert!(app_len > 0.0);

    let surf_bright = tail::tail_surface_brightness(afrho_val, r_au, delta_au);
    assert!(surf_bright > 0.0);

    let disc_prob = tail::disconnection_probability(sw, q_gas);
    assert!((0.0..=1.0).contains(&disc_prob));

    let anti = tail::anti_tail_angle(10.0, 2.0);
    assert!(anti >= 0.0);

    let jet = tail::jet_feature_extent(100.0, 500.0);
    assert!(jet > 0.0);
}