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(),
]
}