pub struct AeolianErosion {
pub threshold_m_s: f64,
}
impl AeolianErosion {
pub fn typical() -> Self {
Self { threshold_m_s: 1.0 }
}
pub fn transport_rate(&self, wind_speed_m_s: f64) -> f64 {
if wind_speed_m_s < self.threshold_m_s {
return 0.0;
}
0.5 * crate::SURFACE_AIR_DENSITY / crate::SURFACE_GRAVITY
* (wind_speed_m_s - self.threshold_m_s).powi(2)
}
}
pub fn thermal_fatigue_crack_growth_rate(temp_amplitude_k: f64, rock_toughness: f64) -> f64 {
let stress = 1e6 * temp_amplitude_k;
if stress < rock_toughness {
0.0
} else {
1e-12 * (stress / rock_toughness).powi(3)
}
}
pub fn chemical_weathering_rate(temperature_k: f64, acid_activity: f64) -> f64 {
let arrhenius = (-(60_000.0) / (8.314 * temperature_k)).exp();
arrhenius * acid_activity
}