marss 0.0.3

Mars celestial simulation crate for the MilkyWay SolarSystem workspace
Documentation
use sciforge::hub::domain::geology::tectonics::{airy_root, heat_flow, isostatic_equilibrium};

pub struct MarsInterior {
    pub core_radius_m: f64,
    pub mantle_thickness_m: f64,
    pub crust_thickness_m: f64,
}

impl Default for MarsInterior {
    fn default() -> Self {
        Self::new()
    }
}

impl MarsInterior {
    pub fn new() -> Self {
        let core_r = crate::CORE_RADIUS_M;
        let total_r = crate::MARS_RADIUS;
        let crust = crate::CRUST_THICKNESS_M;
        Self {
            core_radius_m: core_r,
            mantle_thickness_m: total_r - core_r - crust,
            crust_thickness_m: crust,
        }
    }

    pub fn core_mass_fraction(&self) -> f64 {
        let r_ratio = self.core_radius_m / crate::MARS_RADIUS;
        let vol_frac = r_ratio.powi(3);
        vol_frac * crate::CORE_DENSITY / 3933.0
    }

    pub fn is_tectonically_active(&self) -> bool {
        false
    }

    pub fn elastic_lithosphere_thickness(&self) -> f64 {
        300_000.0
    }

    pub fn mantle_rayleigh_number(&self) -> f64 {
        let rho = crate::MANTLE_DENSITY;
        let g = crate::SURFACE_GRAVITY;
        let alpha = 3e-5;
        let dt = 1500.0;
        let h = self.mantle_thickness_m;
        let kappa = 1e-6;
        let eta = 1e21;
        rho * g * alpha * dt * h.powi(3) / (kappa * eta)
    }
}

pub fn crustal_root_depth(elevation_m: f64) -> f64 {
    airy_root(elevation_m, crate::CRUST_DENSITY, crate::MANTLE_DENSITY)
}

pub fn isostatic_balance(crust_thickness: f64) -> f64 {
    isostatic_equilibrium(crust_thickness, crate::CRUST_DENSITY, crate::MANTLE_DENSITY)
}

pub fn surface_heat_flow_w_m2(conductivity: f64, temp_gradient: f64) -> f64 {
    heat_flow(conductivity, temp_gradient)
}

pub fn mean_heat_flux_mw_m2() -> f64 {
    crate::SURFACE_HEAT_FLUX_MW_M2
}

pub fn northern_crust_thickness_m() -> f64 {
    32_000.0
}

pub fn southern_crust_thickness_m() -> f64 {
    58_000.0
}