earths 0.0.3

High-fidelity Earth simulation engine — orbit, atmosphere, geology, hydrology, biosphere, terrain, lighting, rendering, satellites, and temporal systems with full scientific coupling
Documentation
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()
}