A framework built on PyTorch for eco-hydrological modeling
Project description
EcoHydroModel
EcoHydroModel is a framework built on PyTorch and PyTorch Geometric for eco-hydrological modeling. It combines process-based updaters with deep learning modules (GNN) to support watershed DEM extraction, graph construction, state evolution simulation, visualization, and training.
The framework is particularly suited for hydrological and biogeochemical processes (e.g., soil water storage, evapotranspiration, nitrification) and parameter inversion, and can be extended to various graph-structured process models.
✨ Modules
- Updaters: Supports hydrological balance, nitrogen cycle, MLP approximation, and can be flexibly extended
- DataManager: Extract watershed from DEM, build directed graph, and manage forcings, states, and references in a unified way
- Trainer: Provides training, checkpointing, parameter constraints, and best parameter tracking
- Visualizer: Supports grid/graph visualization, similarity metrics (NSE/KGE), and time series comparison
👉 To customize your own updater, see Updater Specification.md
📦 Installation
pip install ecohydromodel
🔑 Core Components
1. Updater Base Class
- Provides an
updatemethod to be implemented by subclasses - Supports parallel / layer / converge / max_depth update modes
- Includes parameter management, graph aggregation, and iterative convergence utilities
2. DataManager
load_dem(): Extract sub-basin from DEM and build graph structureload_csv()/save_csv(): Load/save states and reference datacoarse(): Graph coarsening using gracluschunk_data(): Split time series into chunks for training
3. Trainer
train(): Train model with options for target variables, checkpointing, and parameter constraints- Automatically saves and restores best parameters
4. Visualizer
plot(): Spatial visualization (grid or graph)plot_similarity(): NSE/KGE-based similarity visualizationplot_timeseries(): Node-level time series comparison
5. Process Modules (Modules.py)
- BucketUpdater: Implements simple Bucket Model with Hamon (1961) evapotranspiration equations
- NitriUpdater: Implements Del Grosso / Parton nitrification equations
- MLPUpdater: Predicts nitrification rate using soil embedding and MLP
🚀 Example Usage (example_basic.py)
This example demonstrates how to use EcoHydroModel for data loading, model setup, training, and visualization.
The workflow is divided into five parts: Environment & Dependencies, Data Preparation, Model Construction, Training, and Evaluation & Visualization.
1. Data Preparation
data = DataManager(device)
dem = 'data/dem.asc'
data.load_dem(dem, outx=38, outy=54)
ref = {'storage': 'data/ref_storage.csv'}
data.load_csv(ref, target='ref', time_index=[1, 365])
forcing = {'RAIN': 'data/ref_RAIN.csv', 'TEMP': 'data/ref_TEMP.csv'}
data.load_csv(forcing, target='forcing', time_index=[1, 365])
state = {'storage': 'data/ref_storage_bucket.csv'}
data.load_csv(state, target='state', time_index=0)
- Initialize the
DataManagerto store and manage input/ref data. - Load the DEM and resample to the specified grid size.
- Load reference data (
ref), forcing data (RAIN,TEMP), and initial state. time_indexcan be used to specify a range or a single timestep (if omitted, all timesteps are used).
2. Model Construction
bucket = BucketUpdater().to(device)
model = EcoHydroModel({'bucket': bucket}, device=device)
var = 'storage'
- Define a simple process module (
BucketUpdater). - Construct the
EcoHydroModelwith the module dictionary. - Specify the target variable (
storage) for training and evaluation.
3. Test Run
model.eval()
with torch.no_grad():
out = model(data)
Visualizer.plot(out[var], pos=data.pos)
Visualizer.plot_similarity(out[var], data.ref[var], pos=data.pos)
Visualizer.plot_timeseries(out[var], data.ref[var], node_idx=0)
- Run the model with default setting in evaluation mode to generate predictions.
- Visualize spatial patterns, similarity with reference data, and node-level time series.
4. Training
print("Start training...")
final_params = Trainer(model).train(
data, epochs=100, lr=1e-2, chunk_size=1, target_keys=[var]
)
print('Final params:', final_params)
- Train the model with the given dataset for 100 epochs.
- Use a simple trainer with learning rate
1e-2and chunk size of 1. - Print the final optimized parameters after training.
5. Evaluation & Visualization
model.eval()
with torch.no_grad():
out = model(data)
Visualizer.plot(out[var], pos=data.pos)
Visualizer.plot_similarity(out[var], data.ref[var], pos=data.pos)
Visualizer.plot_timeseries(out[var], data.ref[var], node_idx=0)
- Evaluate the trained model.
- Generate the same set of visualizations as in the reference run, enabling a direct comparison between model predictions and reference data.
🔧 Advanced Usage (example_full.py)
This example shows graph coarsening, multi-module wiring, and constrained parameter tuning.
For a full step-by-step description, see the detailed manual of example.
Highlights
- Graph coarsening to switch between resolutions
- Multiple updaters (e.g.,
NitriUpdater,MLPUpdater) - Parameter range constraints during training
- Targeted training on selected variables/time windows
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ecohydromodel-0.1.0.post0.tar.gz.
File metadata
- Download URL: ecohydromodel-0.1.0.post0.tar.gz
- Upload date:
- Size: 13.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9da6e24763fc70f6c249b42c1f31782ee924323c0480aa9b9692b88f8d435db5
|
|
| MD5 |
86984b4ff44e76eb4f99e67618c35f43
|
|
| BLAKE2b-256 |
859a99a0b3a80358e25ff37ab7999b4a5455960f7162f7db74c62277e7e029ca
|
File details
Details for the file ecohydromodel-0.1.0.post0-py3-none-any.whl.
File metadata
- Download URL: ecohydromodel-0.1.0.post0-py3-none-any.whl
- Upload date:
- Size: 13.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
32247b26ca9d3992d35f7489210de4d37fa13940e4e166c8067fd01897984099
|
|
| MD5 |
55e40f006c2a8aae101a1e17eeaff00c
|
|
| BLAKE2b-256 |
12efca17b95ad42c1ad8aaf16fb3c3d3f9df613115b493f267fcf4a647acc8d8
|