earths 0.0.1

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 CRUST_DENSITY: f64 = 2700.0;
pub const MANTLE_DENSITY: f64 = 3300.0;
pub const YOUNGS_MODULUS_LITHOSPHERE: f64 = 7e10;
pub const POISSONS_RATIO: f64 = 0.25;
pub struct Mountain {
    pub name: &'static str,
    pub peak_elevation_m: f64,
    pub base_elevation_m: f64,
    pub crust_thickness_km: f64,
}
impl Mountain {
    pub fn height(&self) -> f64 {
        self.peak_elevation_m - self.base_elevation_m
    }
    pub fn root_depth_m(&self) -> f64 {
        airy_root(self.height(), CRUST_DENSITY, MANTLE_DENSITY)
    }
    pub fn total_crust_thickness_m(&self) -> f64 {
        self.crust_thickness_km * 1000.0 + self.root_depth_m()
    }
    pub fn isostatic_elevation(&self) -> f64 {
        isostatic_equilibrium(
            self.crust_thickness_km * 1000.0,
            CRUST_DENSITY,
            MANTLE_DENSITY,
        )
    }
}
pub fn everest() -> Mountain {
    Mountain {
        name: "Mount Everest",
        peak_elevation_m: 8848.86,
        base_elevation_m: 5200.0,
        crust_thickness_km: 70.0,
    }
}
pub fn alps_flexural_rigidity() -> f64 {
    flexural_rigidity(
        YOUNGS_MODULUS_LITHOSPHERE,
        crate::LITHOSPHERE_THICKNESS_ALPS,
        POISSONS_RATIO,
    )
}
pub fn himalaya_convergence_rate_m_per_year() -> f64 {
    crate::HIMALAYA_CONVERGENCE_M_YR
}
pub fn orogeny_uplift_rate(convergence_rate_m_yr: f64, angle_deg: f64) -> f64 {
    let angle_rad = angle_deg.to_radians();
    convergence_rate_m_yr * angle_rad.sin()
}