marss 0.0.3

Mars celestial simulation crate for the MilkyWay SolarSystem workspace
Documentation
use sciforge::hub::domain::geology::tectonics::airy_root;

pub struct MarsFeature {
    pub name: &'static str,
    pub peak_elevation_m: f64,
    pub base_elevation_m: f64,
    pub diameter_km: f64,
}

impl MarsFeature {
    pub fn height(&self) -> f64 {
        self.peak_elevation_m - self.base_elevation_m
    }

    pub fn root_depth_m(&self) -> f64 {
        airy_root(self.height(), crate::CRUST_DENSITY, crate::MANTLE_DENSITY)
    }
}

pub fn olympus_mons() -> MarsFeature {
    MarsFeature {
        name: "Olympus Mons",
        peak_elevation_m: 21_900.0,
        base_elevation_m: 0.0,
        diameter_km: 624.0,
    }
}

pub fn ascraeus_mons() -> MarsFeature {
    MarsFeature {
        name: "Ascraeus Mons",
        peak_elevation_m: 18_100.0,
        base_elevation_m: 0.0,
        diameter_km: 460.0,
    }
}

pub fn elysium_mons() -> MarsFeature {
    MarsFeature {
        name: "Elysium Mons",
        peak_elevation_m: 14_100.0,
        base_elevation_m: 0.0,
        diameter_km: 240.0,
    }
}

pub fn hellas_planitia() -> MarsFeature {
    MarsFeature {
        name: "Hellas Planitia",
        peak_elevation_m: -3_000.0,
        base_elevation_m: -7_152.0,
        diameter_km: 2_300.0,
    }
}

pub fn valles_marineris() -> MarsFeature {
    MarsFeature {
        name: "Valles Marineris",
        peak_elevation_m: 0.0,
        base_elevation_m: -7_000.0,
        diameter_km: 200.0,
    }
}

pub fn valles_marineris_length_km() -> f64 {
    4_000.0
}

pub fn total_relief_m() -> f64 {
    crate::OLYMPUS_MONS_HEIGHT_M + crate::HELLAS_DEPTH_M
}

pub fn tharsis_bulge_height_m() -> f64 {
    10_000.0
}

pub fn major_features() -> Vec<MarsFeature> {
    vec![
        olympus_mons(),
        ascraeus_mons(),
        elysium_mons(),
        hellas_planitia(),
        valles_marineris(),
    ]
}