Model description

The AWASH model describes the connections between water supply and water demand and the spatial and temporal decisions around them. The broad goals of the model are to understand cross-basin connections in the US, the price of water and tradeoffs, and the future landscape of water.

Within the model, water supply can come from river network runoff, groundwater with seepage, and reservoirs with storage. Water demand is driven by agriculture and livestock, industry, urban demands, and thermoelectric plants. The transporation and selling of agricultural products is also modeled, and the model can decide the optimal arrangement of agricultural production, irrigation, and trade to maximize profits to farmers, under a variety of constraints and planning.

The model is also configurable, so it can run with different timesteps, from a month to years, and for the whole contiguous US or for a single state. It is also straight-forward to turn off or bipass whole sectors.

Simulation and optimization

The model can be run in simulation mode or optimization mode. For simulation mode, we have collected inputs that describe the situation in the United States in recent history, and in 2010 in particular, and the model produces results from this, such as total agricultural production and market outputs. Under optimization mode, a variety of decision variables are selected to optimize the benefits produced by water.

Optimization results

This is from an optimization done in March, optimizing agricultural output through the spatial arrangement of rainfed and irrigated areas in a single year. Irrigated aggriculture draws from rivers, only constrained by exogenous urban demands and the requirement that rivers never run dry. Agricultural output is monetized by assuming one set of prices for a limited domestic demand and another for an unlimited international demand.

International sales Irrigated areas

Water withdrawal, relative to potential runoff

More figures are in the result document.

Simulation results

We can also use the model to compare datasets and the outcomes of water demand assumptions to datasets. This is shown in the compare-simulate notebook.

Combining optimization and simulation

The model can also be run using a mix of simulation and optimization, selecting some parameters to be fed by data and others by optimization. You can also generate decisions with the optimization mode under one set of assumptions, and then simulate it with another set, for example if the water managers understand only part of the full water system.

As an example, consider the "surface optimization" performed to generate inputs to the simulation model. Since we do not have records of exactly where water is drawn from the river, we need to infer it. These are the steps involved:

  1. Surface water demands for domestic consumption, industrial and mining, agriculture and livestock, and thermoelectric power are collected from the USGS for 2010.
  2. We perform an US-wide optimization of point withdrawals, point returns, and reservoir management under the following constraints:
    • $Withdrawal \le River Flow$: Rivers never run dry.
    • $SW Demand \le SW Supply$: All surface water requirements are accounted for.
    • $Return Flow \le Withdrawal - Consumption$: Return flows cannot exceed consumption ratios.
    • $Reservoir Minima \le Storage \le Reservoir Maxima$: Reservoir constraints are respected.
  3. These values are saved and used for simulations, from which we can get river flow, agricultural production, and trade.

See the optimize-surface notebook for an example run.

Recent improvements

Since our March 24 workshop, we've gotten the full optimization and simulation models working. Hereafter is a non-exhaustive task of what has been accomplished since then. Please refer to the various notebooks for more details.

Surface water

  • optimization of withdrawals
  • reservoir model
  • missing canals/inter-counties water facilities
  • return flows
  • input from VIC (baseflow and runoff)


  • deep confined layer
  • 5 main aquifers represented
  • Analysis of head change and lateral flow

Urban demand

  • national urban water regression model
  • regional models under development


  • agriculture model for 10 crops
  • current situation (rain-fed and irrigated areas)

Exogenous demands

  • industrial demand
  • mining demand
  • urban demand


  • first current situation simulations
  • first optimisation results
  • configuration file to facilitate parameter changes
  • faster matrix generator
  • Jupyter notebook documentation for each of the components
  • units are added to all components

Plans for the future

The model is at a stage where there are a ton of experiments and analyses it can be used for. The Progress document lays out future tasks:

Broadly, tasks for the future fall into three categories: Validation, Extensions, and Analyses.

Validation Exercises

Internal consistency

  • Check that optimization matrix matches the numerical derivative of simulation code
  • Automated testing of components

Component operation

  • Historical agricultural yields
  • Transportation under port-based international sales


Policy Extensions

  • Minimal environmental flow requirements
  • Inter-state compacts


  • Agricultural growing seasons lasting multiple periods
  • Sending electricity on the high-voltage grid
  • Biofuels

Structural changes

  • Capacity expansion
  • Migration and changes to domestic consumption


Comparison to optimal

  • Current situation vs. optimal usage
  • Optimization under uncertain climate
  • Reservoir release policies

Value of water

  • Determinants of the shadow price
  • Value of buffering capacity of reservoirs

Changing climate

  • Optimization under paleo climate inputs
  • Optimization under future climate
  • Optimization under uncertain climate


  • Sensitivity analysis to parameters/uncertainty propagation

How to get involved

We hope that the model is fairly easy to run, modify, and contribute to. It's written in Julia, which is very similar to Matlab. It's based on components, so you can modify one sector without worrying about others. And you can see it in use it the documentation notebooks.

We are looking for people who want to use and expand the model:

  • Helping with validation
  • Adding new policies and components
  • Running experiments and analyses

The only user interface is with Jupyter Notebooks, so working with the model means running and modify code. But we are happy to help you get going. To get started, follow the running the model tutorial and try it out!

In [ ]: