use sciforge::hub::domain::geology::tectonics::{
airy_root, flexural_rigidity, isostatic_equilibrium,
};
pub const CRUSTDENSITY: f64 = 2700.0;
pub const MANTLEDENSITY: f64 = 3300.0;
pub const YOUNGSMODULUSLITHOSPHERE: f64 = 7e10;
pub const POISSONSRATIO: f64 = 0.25;
pub struct Mountain {
pub name: &'static str,
pub peakelevationm: f64,
pub baseelevationm: f64,
pub crustthicknesskm: f64,
}
impl Mountain {
pub fn height(&self) -> f64 {
self.peakelevationm - self.baseelevationm
}
pub fn rootdepthm(&self) -> f64 {
airy_root(self.height(), CRUSTDENSITY, MANTLEDENSITY)
}
pub fn totalcrustthicknessm(&self) -> f64 {
self.crustthicknesskm * 1000.0 + self.rootdepthm()
}
pub fn isostaticelevation(&self) -> f64 {
isostatic_equilibrium(self.crustthicknesskm * 1000.0, CRUSTDENSITY, MANTLEDENSITY)
}
}
pub fn everest() -> Mountain {
Mountain {
name: "Mount Everest",
peakelevationm: 8848.86,
baseelevationm: 5200.0,
crustthicknesskm: 70.0,
}
}
pub fn alpsflexuralrigidity() -> f64 {
flexural_rigidity(
YOUNGSMODULUSLITHOSPHERE,
crate::LITHOSPHERETHICKNESSALPS,
POISSONSRATIO,
)
}
pub fn himalayaconvergenceratemperyear() -> f64 {
crate::HIMALAYACONVERGENCEMYR
}
pub fn orogenyupliftrate(convergenceratemyr: f64, angledeg: f64) -> f64 {
let anglerad = angledeg.to_radians();
convergenceratemyr * anglerad.sin()
}