pub fn coriolis_parameter(latitude_deg: f64) -> f64 {
let lat_rad = latitude_deg.to_radians();
2.0 * crate::OMEGA_MARS * lat_rad.sin()
}
pub fn geostrophic_wind_speed(pressure_gradient_pa_per_m: f64, latitude_deg: f64) -> f64 {
let f = coriolis_parameter(latitude_deg);
if f.abs() < 1e-10 {
return f64::INFINITY;
}
let rho = crate::SURFACE_AIR_DENSITY;
pressure_gradient_pa_per_m / (rho * f.abs())
}
pub fn thermal_tide_amplitude(surface_temp_swing_k: f64) -> f64 {
let r_s = crate::R_SPECIFIC;
let circumference = 2.0 * std::f64::consts::PI * crate::MARS_RADIUS;
r_s * surface_temp_swing_k / (circumference * crate::OMEGA_MARS)
}
pub fn saltation_threshold_m_s() -> f64 {
25.0
}
pub fn mean_surface_wind_speed() -> f64 {
5.0
}
pub fn max_gust_speed_estimate() -> f64 {
40.0
}
pub fn polar_jet_speed_m_s() -> f64 {
170.0
}
pub fn co2_condensation_flow_m_s(latitude_deg: f64) -> f64 {
if latitude_deg.abs() < 60.0 {
return 0.0;
}
30.0 * ((latitude_deg.abs() - 60.0) / 30.0).min(1.0)
}