Adding a Dam (Reservoir)

1. Difference between storage and reservoir nodes

Please note that there are two nodes in WaterStrategy and Pywr that represent reservoirs. The first is a storage node and the second is a reservoir node.

Both nodes store water. The reservoir node works just like a storage node, however it has built-in parameters allowing evaporation and precipitation to be directly represented on the node. To represent evaporation and precipitation with a storage node, a catchment node connected to the storage node is used to represent precipitation and output node drawing water from the storage node is is used to represent evaporation.

This tutorial will use reservoir nodes to build the reservoir system model.

2. Build the example reservoir system model

2.1 Click the network created in last section and open it

Open the created network

2.2 Find a river on the map

This tutorial has a recommended location, but it doesn't matter if you cannot find the exact location, just find another location with a river.

Recommended location for this example
The river used in this example

2.3 Add the following nodes to the network

  • Place a reservoir node to the river.

Reservoir node

###Notice: make sure you use the 'Reservoir' node: and not the 'Storage' node: .

Adding a reservoir node
  • Place a catchment node upstream of the reservoir. The catchment node represents the river flowing into the reservoir.

Adding a catchment node
  • Place an output node downstream of the reservoir. The output node in this case represents the river outlet.

Adding an output node
  • Place two link nodes between the reservoir and output nodes (as shown below). In this case, these link nodes represent the (1) reservoir releases and (2) spill.

Adding link nodes

The upper link node representing the reservoir release represents flow that leaves the reservoir as a result of any release rules or to meet downstream allocations. Release rules would generally be specified on this node. Reservoir release rules defined on this node are usually represented by a parameter defined on the nodes max_flow attribute.

The lower link node represents the spill from the reservoir. The spill is used if reservoir release rules are defined constraining how much water can be released via this node and additional water needs to be released than is allowed by the release rules (for example if the reservoir is over capacity). As the spill is generally used only when the reservoir is over capacity, this node generally has a highly positive allocation penalty.

Connect the nodes with edges which are commonly referred to links.

###Notice: remember to connect the nodes by clicking first on the upstream node and then the downstream node.

You can view how to add edges in the video below.

Guidance on how to add edges

The reservoir system should look like the figure below.

The example reservoir system

2.4 Set up the time step and and time horizon

Set up the time step and and time horizon

2.5 Rename the nodes to names that make sense with their contexts

  • the Catchment node to 'Example catchment',

  • the Reservoir node to 'Example reservoir'

  • the Output node to 'Example outlet'.

  • the Link nodes to 'Release' and the other one 'Spill'.

The figure below shows where to click to rename the catchment node. The same process can be repeated for all the other nodes.

Rename the catchment node

2.6 Inputing data into the Catchment node

Please go to the following link to find the time series data for this step.

https://docs.google.com/spreadsheets/d/1MR1Xxk77gFzcY3J3r6c6g38UB8pd1HMY/edit?usp=sharing&ouid=103362449956532179397&rtpof=true&sd=true

  • Click on the Catchment node and follow the clicks (red arrows shown in the sequence of figures below.

Click on the catchment node and then the edit button for the Flow attribute.
The type of parameter to be used for the flow parameter should be set to PYWR Dataframe which is a time-series.
Click 'OK' to accept the parameter type change.
  • In the Excel link you will have a time series. Please copy the first (or only time series if there is only one). Make sure to copy the dates as well.

  • Paste the time series into cell A1 in the Dataframe tab

Paste inflow data
  • You should have a time series as shown below. Click Save.

Save inflow data

2.7 Inputing data into the Example reservoir node

  • Click on the Example reservoir node

  • Set the max_volume to 25 Mm3. This is the maximum capacity for the dam in this tutorial.

  • Set the initial_volume to 15 Mm3. This is the storage level that the simulation starts with on the first time step.

  • Set the allocation penalty to -200. Often reservoirs have a negative allocation penalty. Allocation penalties are often used to balance reservoir or other water source use in multi-reservoir and multi-source systems.

The attributes on the reservoir should look like those below:

Reservoir data
  • On the Spill link node set the 'Allocation penalty' to 1000

Spill allocation penalty setting
  • The Release link node should not have any data input.

Release link setting

2.9 Run the model

Run the model
Run the model

2.10 See the calculated results

  • View the 'simulated_volume' of the reservoir node to see the reservoir storage volume over time.

Get calculated results
  • Click on the 'Plot' view.

View the reservoir volume

The reservoir is seen to fill and remain full for most of the time horizon. This is the case becaues there is no demand on the reservoir nor are there any evaporation losses defined.

To see a video on how to run the model and view outputs click here.

Last updated

Was this helpful?