Skip to main content

Differentiable river routing library for hydrological modeling

Project description

dRoute: Differentiable River Routing Library

Build Status PyPI version Python Versions License: MIT

A differentiable river routing library for hydrological modeling. dRoute implements multiple routing methods with automatic differentiation support, enabling gradient-based parameter optimization and integration with machine learning workflows.

Note dRoute is in active development - expect experimental code

Features

  • 6 Routing Methods: From simple lag routing to Saint-Venant equations
  • Dual AD Backends: CoDiPack (tape-based) and Enzyme (source-to-source)
  • Network Topology: Full support for river networks with tributaries and confluences
  • PyTorch Integration: Use dRoute gradients in ML training loops

Routing Methods

Method Class Physics Speed Use Case
Muskingum-Cunge MuskingumCungeRouter Kinematic + diffusion approx ~4,500/s Production routing
Lag LagRouter Time delay buffer ~20,000/s Baseline comparison
IRF IRFRouter Gamma unit hydrograph ~1,000/s Fast calibration
KWT-Soft SoftGatedKWT Kinematic wave tracking ~4,000/s Differentiable Lagrangian
Diffusive Wave DiffusiveWaveIFT Diffusion wave PDE ~3,000/s Flood wave attenuation
Saint-Venant SaintVenantRouter Full shallow water eqs ~100/s High-fidelity benchmark

Quick Start

Build requirements: CMake 3.15+, a C++17 compiler, and Python development headers. Optional features (NetCDF, Enzyme, SUNDIALS) require those libraries installed.

Build Options

CMake Options

Option Default Description
DMC_BUILD_PYTHON OFF Build Python bindings
DMC_USE_CODIPACK ON Enable CoDiPack AD
DMC_ENABLE_ENZYME OFF Enable Enzyme AD backend
DMC_ENABLE_SUNDIALS OFF Enable SUNDIALS for SVE solver
DMC_ENABLE_NETCDF OFF Enable NetCDF topology I/O
DMC_ENABLE_OPENMP OFF Enable OpenMP parallelization
DMC_BUILD_TESTS ON Build C++ test suite

Build with All Features

cmake -S . -B build \
    -DDMC_BUILD_PYTHON=ON \
    -DDMC_ENABLE_ENZYME=ON \
    -DDMC_ENABLE_SUNDIALS=ON \
    -DSUNDIALS_ROOT=/path/to/sundials/install \
    -DDMC_ENABLE_NETCDF=ON
    -DMC_ENABLE_OPENMP=ON

cmake --build build -j4

macOS (Apple Silicon)

brew install cmake netcdf sundials

cmake -S . -B build -DDMC_BUILD_PYTHON=ON -DDMC_ENABLE_SUNDIALS=ON
cmake --build build -j$(sysctl -n hw.ncpu)

Python installation

git clone https://github.com/DarriEy/dRoute.git
cd dRoute
pip install -e .

# Or use PyPi

pip install droute

Data

Download Sample Data

The example dataset is hosted as a GitHub release asset (v0.5.0).

python scripts/download_data.py

Run with Sample Data

# Forward pass comparison (all methods)
python python/test_routing_with_data.py --data-dir data

# Fast optimization with Enzyme kernels (30 epochs in ~30s)
python python/test_routing_with_data.py --data-dir data --optimize --fast

# Include Saint-Venant high-fidelity benchmark
python python/test_routing_with_data.py --data-dir data --sve

Architecture

dRoute/
├── include/dmc/
│   ├── router.hpp              # MuskingumCungeRouter with CoDiPack AD
│   ├── advanced_routing.hpp    # IRF, KWT, Diffusive routers  
│   ├── kernels_enzyme.hpp      # Enzyme-compatible kernels (all 5 methods)
│   ├── unified_router.hpp      # EnzymeRouter wrapper
│   ├── saint_venant_router.hpp # Full SVE with SUNDIALS CVODES
│   ├── network.hpp             # Network topology
│   └── types.hpp               # AD type definitions
├── python/
│   ├── bindings.cpp            # pybind11 bindings
│   └── test_routing_with_data.py
├── tests/                      # C++ test suite
└── CMakeLists.txt

Requirements

  • C++17 compiler (GCC 7+, Clang 5+, MSVC 2019+)
  • CMake 3.15+
  • pybind11 (auto-downloaded if not found)
  • CoDiPack (auto-downloaded)
  • Optional: Enzyme, SUNDIALS, NetCDF-C, OpenMP

Citation

@software{dRoute2025,
  title={dRoute: Differentiable River Routing Library},
  author={Eythorsson, Darri},
  year={2024},
  url={https://github.com/DarriEy/dRoute}
}

License

MIT License - see LICENSE for details.

Acknowledgments

  • CoDiPack - Tape-based automatic differentiation
  • Enzyme - Source-to-source AD compiler plugin
  • SUNDIALS - Implicit ODE solvers
  • SUMMA & mizuRoute - Hydrological modeling inspiration

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

droute-0.6.1.tar.gz (197.9 kB view details)

Uploaded Source

File details

Details for the file droute-0.6.1.tar.gz.

File metadata

  • Download URL: droute-0.6.1.tar.gz
  • Upload date:
  • Size: 197.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for droute-0.6.1.tar.gz
Algorithm Hash digest
SHA256 1c1bb3bf7461f7370f9f617a584aca366b935258f064a0aaaddb09d04488c860
MD5 963e0acf9d036da591332a839d645673
BLAKE2b-256 bb5a5bf7c9e82f2af1b3f65d73a30af99b544223e26202390690004d94bdae8c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page