I build research software that turns complex environmental data into usable models, methods, and analysis-ready products. The work ranges from new river-network algorithms and data platforms to end-to-end hydrologic modeling frameworks.

Most projects are geospatial, reproducible, and automation-heavy. Except for Pydro, I have been the primary developer of each project shown here, with ideas, knowledge, and code contributed by many friends and collaborators.

Three projects that best represent the range of my current work: decision-making with AI, river-network algorithms, and global-scale data fusion.

Aerial view of Navajo Reservoir in New Mexico Reservoir operations + reinforcement learning

Open source · In active development

DeepReservoir-Navajo

A deep reinforcement learning framework for optimizing reservoir operations in a virtual hydropower-reservoir environment. Scenario-driven rules, constraints, and objectives make it possible to test alternative operational strategies quickly.

  • Python
  • stable-baselines3
  • Simulation environments

Navajo Reservoir photo: U.S. Bureau of Reclamation (public domain)

RivGraph branching river-network logo

Open source · Published

RivGraph

Extracts river and delta channel-network topology from georeferenced masks, assigns link directionality, and computes reproducible topologic and morphologic metrics.

  • Python
  • Image processing
  • Graph analysis
VotE, Veins of the Earth

Research platform · Source release planned

VotE (Veins of the Earth)

A river-centric data platform and API for rapidly querying, modeling, and visualizing data across global river networks.

  • Python + SQL
  • PostgreSQL / PostGIS
  • Geospatial data fusion
About VotE

VotE is a first step toward fusing global hydrologic data into a common, AI-ready platform—something in the direction of a hydrologic digital twin. Its schema and workflows bring hydrography, dams, and river attributes into one consistent, queryable system.

The source currently includes build scripts and the API, but not the data or database. It is being prepared for a public release.

More software

Focused tools and modeling efforts. Open a card for a workflow figure or additional context.

Open source · Published

rabpro

Delineates watershed basins and computes river profiles, slopes, and contributing-basin statistics at global scale.

  • Python
  • Google Earth Engine
  • Raster statistics
Workflow example

rabpro connects user-defined locations to basin-scale context and can compute statistics for arbitrary raster inputs such as topography, precipitation, and vegetation through Google Earth Engine.

rabpro basin delineation and zonal statistics workflow
rabpro automates basin delineation and zonal statistics using Google Earth Engine.

Open source

dapper

Curates, samples, and formats the datasets needed to run DOE’s E3SM Land Model across flexible grid-cell definitions.

  • Python
  • Google Earth Engine
  • netCDF / xarray
What it automates

dapper (Data PreParation for ELM Runs) automates meteorological forcings, parameters, and related inputs. It leans on Google Earth Engine and other APIs to make sampling scalable for polygons such as watersheds as well as rectangular grids.

RivMAP

Open source · Published

A Matlab toolbox for extracting planform river morphodynamics from binary channel masks, including widths, migration rates, and cutoff events.

  • Matlab
  • Image processing
  • Landsat workflows
Example outputs
RivMAP centerline, bankline, width, migration, and cutoff outputs
Ecopop units around Toronto

Open source · R&D 100–recognized team effort

Ecopopper

Generates flexible “ecopop units” that bridge scale mismatches between Earth System Model grids and local ecological or population models.

  • Python
  • Spatial clustering
  • Scale bridging
Example application

The units shown for metropolitan Toronto provide higher resolution where either human density or mosquito-habitat potential is high. Ecopopper contributed to a larger LANL team effort that received two 2025 R&D 100 Awards.

In development · Available by request

Pydro

A differentiable runoff-and-routing modeling effort for hybrid physics/AI learning, designed to remain trainable end to end while retaining physically meaningful structure.

  • Python
  • Differentiable modeling
  • Hydrology
Current work

Work to date includes development of an unreleased global wildfire-hydrology dataset for training and validation.

Hillsloper terrain partition example

Available by request

hillsloper

Partitions digital elevation models into connected hillslopes for high-resolution terrestrial simulations while preserving hillslope-channel connectivity.

  • Python
  • DEM analysis
  • Hydrologic connectivity
Modeling context

hillsloper creates vector-based terrain representations and characterizations suitable for the Advanced Terrestrial Simulator (ATS).

Satellite and water-quality observation alignment

Available by request · Published

satval

Matches multispectral satellite pixels with in-situ water-quality observations in space and time to build analysis-ready validation datasets.

  • Python
  • Google Earth Engine
  • Remote sensing
Example application

More than 50 million Chesapeake Bay water-quality observations were aligned in space and time with MODIS pixels in the cloud to create a statistical model.

RiverMUSE population-dynamics model

Model available · Published

RiverMUSE

Simulates freshwater mussel population dynamics under changing suspended-sediment and flow regimes at reach scale.

  • Matlab
  • Ecohydrology
  • Scenario simulation
Model context

The model was a collaboration among coauthors; I implemented it in code. A relatively simple interaction model produced rich dynamics and remained tractable for formal nonlinear-dynamics analysis.