pub struct Paleolake {
pub name: &'static str,
pub crater_name: &'static str,
pub estimated_area_km2: f64,
pub estimated_depth_m: f64,
pub latitude_deg: f64,
}
impl Paleolake {
pub fn volume_km3(&self) -> f64 {
self.estimated_area_km2 * self.estimated_depth_m / 1000.0 * 0.5
}
pub fn is_open_basin(&self) -> bool {
true
}
pub fn residence_time_years(&self, estimated_inflow_m3_s: f64) -> f64 {
let vol_m3 = self.volume_km3() * 1e9;
vol_m3 / (estimated_inflow_m3_s * crate::SECONDS_PER_YEAR)
}
}
pub fn gale_crater_lake() -> Paleolake {
Paleolake {
name: "Gale Crater Lake",
crater_name: "Gale",
estimated_area_km2: 7_800.0,
estimated_depth_m: 700.0,
latitude_deg: -5.4,
}
}
pub fn jezero_crater_lake() -> Paleolake {
Paleolake {
name: "Jezero Crater Lake",
crater_name: "Jezero",
estimated_area_km2: 900.0,
estimated_depth_m: 250.0,
latitude_deg: 18.4,
}
}
pub fn eridania_lake() -> Paleolake {
Paleolake {
name: "Eridania Lake",
crater_name: "Eridania Basin",
estimated_area_km2: 1_100_000.0,
estimated_depth_m: 2_400.0,
latitude_deg: -35.0,
}
}
pub fn total_paleolake_count() -> u32 {
500
}
pub fn major_paleolakes() -> Vec<Paleolake> {
vec![gale_crater_lake(), jezero_crater_lake(), eridania_lake()]
}