#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum IoZone {
VolcanicPlains,
SulfurFlows,
MountainRange,
PolarFrost,
LavaLake,
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct SurfaceZone {
pub zone: IoZone,
pub mean_albedo: f64,
pub regolith_depth_m: f64,
}
pub fn zone_from_lat_lon(latitude_deg: f64, longitude_deg: f64) -> SurfaceZone {
if latitude_deg.abs() > 60.0 {
SurfaceZone {
zone: IoZone::PolarFrost,
mean_albedo: 0.75,
regolith_depth_m: 2.0,
}
} else if (250.0..=320.0).contains(&longitude_deg) && (5.0..=25.0).contains(&latitude_deg) {
SurfaceZone {
zone: IoZone::LavaLake,
mean_albedo: 0.10,
regolith_depth_m: 0.5,
}
} else if (250.0..=320.0).contains(&longitude_deg) {
SurfaceZone {
zone: IoZone::VolcanicPlains,
mean_albedo: 0.30,
regolith_depth_m: 3.0,
}
} else if (-30.0..=-15.0).contains(&latitude_deg) && (110.0..=150.0).contains(&longitude_deg) {
SurfaceZone {
zone: IoZone::MountainRange,
mean_albedo: 0.40,
regolith_depth_m: 5.0,
}
} else {
SurfaceZone {
zone: IoZone::SulfurFlows,
mean_albedo: 0.63,
regolith_depth_m: 6.0,
}
}
}