hydro-core 0.1.0

Core types, traits, and evaluation metrics for the multi-model hydrology platform
Documentation
//! Forcing data types shared across all hydrology models.

use serde::{Serialize, Deserialize};

/// Per-timestep meteorological forcing for a sub-basin or grid cell.
#[derive(Clone, Debug, Serialize, Deserialize, Default)]
pub struct Forcing {
    /// Precipitation (mm) for this time-step.
    pub p_mm: f64,
    /// Potential evapotranspiration (mm).
    pub pet_mm: f64,
    /// Air temperature (°C).
    pub t_c: f64,
}

/// Basin / sub-basin metadata shared across models.
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct BasinInfo {
    pub id: String,
    pub name: String,
    /// Basin area in km².
    pub area_km2: f64,
    /// Outlet coordinates (lat, lon).
    pub outlet_lat: f64,
    pub outlet_lon: f64,
}

/// Outlet section descriptor.
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Outlet {
    pub basin_id: String,
    pub name: String,
    /// Stage-discharge relationship (optional, for routing).
    pub rating_curve: Option<Vec<(f64, f64)>>, // (stage_m, discharge_m3s)
}