suns 0.0.4

Sun celestial simulation crate for the MilkyWay SolarSystem workspace
Documentation
use sciforge::hub::domain::common::constants::{G, K_B, SIGMA_SB, SOLAR_MASS};
use std::sync::LazyLock;

pub const SOLAR_RADIUS: f64 = 6.9634e8;
pub const SOLAR_LUMINOSITY: f64 = 3.828e26;
pub const SOLAR_EFFECTIVE_TEMP: f64 = 5778.0;
pub const SOLAR_AGE_YR: f64 = 4.603e9;
pub const SOLAR_ROTATION_EQUATORIAL_DAYS: f64 = 25.05;
pub const SOLAR_ROTATION_POLAR_DAYS: f64 = 34.4;
pub const SOLAR_MEAN_DENSITY: f64 = 1408.0;
pub const SOLAR_CORE_TEMP: f64 = 1.57e7;
pub const SOLAR_CORE_DENSITY: f64 = 1.622e5;
pub const SOLAR_CORE_PRESSURE: f64 = 2.477e16;
pub const SOLAR_SURFACE_GRAVITY: f64 = 274.0;
pub const SOLAR_MAGNETIC_FIELD_POLAR_T: f64 = 1e-4;
pub const SOLAR_MAGNETIC_FIELD_SUNSPOT_T: f64 = 0.3;
pub const SOLAR_CYCLE_YEARS: f64 = 11.0;
pub const SOLAR_WIND_SPEED_SLOW: f64 = 4.0e5;
pub const SOLAR_WIND_SPEED_FAST: f64 = 8.0e5;
pub const PROTON_MASS: f64 = 1.6726e-27;
pub const ELECTRON_MASS: f64 = 9.1094e-31;
pub const ELECTRON_CHARGE: f64 = 1.6022e-19;
pub const MU_0: f64 = 1.2566370614e-6;
pub const EPSILON_0: f64 = 8.8541878128e-12;
pub const PLANCK_H: f64 = 6.62607015e-34;
pub const SPEED_OF_LIGHT: f64 = 2.99792458e8;
pub const SECONDS_PER_DAY: f64 = 86400.0;
pub const SECONDS_PER_YEAR: f64 = 3.15576e7;
pub const PP_CHAIN_ENERGY_MEV: f64 = 26.732;
pub const CNO_CYCLE_ENERGY_MEV: f64 = 25.97;
pub const MEV_TO_JOULE: f64 = 1.60218e-13;

pub const PHOTOSPHERE_TEMP_MIN: f64 = 4400.0;
pub const PHOTOSPHERE_TEMP_MAX: f64 = 6600.0;
pub const PHOTOSPHERE_THICKNESS: f64 = 5.0e5;
pub const CHROMOSPHERE_TEMP_MIN: f64 = 4400.0;
pub const CHROMOSPHERE_TEMP_MAX: f64 = 2.5e4;
pub const CHROMOSPHERE_THICKNESS: f64 = 2.0e6;
pub const CORONA_TEMP: f64 = 1.0e6;
pub const CORONA_TEMP_MAX: f64 = 3.0e6;
pub const TRANSITION_REGION_THICKNESS: f64 = 1.0e5;

pub const CORE_RADIUS_FRAC: f64 = 0.25;
pub const RADIATIVE_ZONE_OUTER_FRAC: f64 = 0.70;
pub const CONVECTIVE_ZONE_BASE_FRAC: f64 = 0.70;
pub const TACHOCLINE_THICKNESS: f64 = 2.0e7;

pub const SUNSPOT_UMBRA_TEMP: f64 = 3700.0;
pub const SUNSPOT_PENUMBRA_TEMP: f64 = 4500.0;
pub const FLARE_CLASS_C_FLUX: f64 = 1e-6;
pub const FLARE_CLASS_M_FLUX: f64 = 1e-5;
pub const FLARE_CLASS_X_FLUX: f64 = 1e-4;
pub const CME_SPEED_SLOW: f64 = 2.5e5;
pub const CME_SPEED_FAST: f64 = 3.0e6;
pub const CME_MASS_RANGE_LOW: f64 = 1e12;
pub const CME_MASS_RANGE_HIGH: f64 = 1e13;

pub static SOLAR_ESCAPE_VELOCITY: LazyLock<f64> =
    LazyLock::new(|| (2.0 * G * SOLAR_MASS / SOLAR_RADIUS).sqrt());

pub static SOLAR_SURFACE_FLUX: LazyLock<f64> =
    LazyLock::new(|| SIGMA_SB * SOLAR_EFFECTIVE_TEMP.powi(4));

pub static SOLAR_CORE_THERMAL_ENERGY: LazyLock<f64> = LazyLock::new(|| 1.5 * K_B * SOLAR_CORE_TEMP);

pub static SOLAR_PLASMA_BETA_PHOTOSPHERE: LazyLock<f64> = LazyLock::new(|| {
    let n = SOLAR_MEAN_DENSITY / PROTON_MASS;
    let p_thermal = n * K_B * SOLAR_EFFECTIVE_TEMP;
    let p_magnetic = SOLAR_MAGNETIC_FIELD_POLAR_T.powi(2) / (2.0 * MU_0);
    p_thermal / p_magnetic
});

pub static DEBYE_LENGTH_CORONA: LazyLock<f64> = LazyLock::new(|| {
    let n_e = 1e15;
    (EPSILON_0 * K_B * CORONA_TEMP / (n_e * ELECTRON_CHARGE * ELECTRON_CHARGE)).sqrt()
});

pub static SOLAR_OMEGA_EQUATORIAL: LazyLock<f64> = LazyLock::new(|| {
    2.0 * std::f64::consts::PI / (SOLAR_ROTATION_EQUATORIAL_DAYS * SECONDS_PER_DAY)
});

pub mod events;
pub mod interactions;
pub mod layers;
pub mod physics;
pub mod plasma;
pub mod rendering;