Storages are used to hold water for varying periods. They include dams and other reservoirs; weir pools; urban detention, retention or retarding basins; and natural lakes. In regulated river systems, storages control the supply of water to consumptive and non-consumptive users, and may also provide flood mitigation and environmental services. Typically, inflows to storages include stream flow from upstream catchments, rainfall over the storage surface area, recharge from groundwater, and runoff from the local catchment surrounding the storage. Outflows from storages include controlled releases and spills. Losses from storages include evaporation from the storage surface area and seepage to groundwater.
...
Source uses an implicit (backward) Eulerian approach for link storage routing. It assumes that the flux averages over a time step are a function of the state at the end of the time step:
Equation 1 |
We also use the same approach for reservoir routing. Source assumes that all reservoir variables are a piecewise linear function of the reservoir's volume. For a time step the usual applies:
Equation 2 |
Where Out consists of a number of components:
...
Release and spill are the sum of the water flowing downstream in all of the outflow paths. For each path we have two relationships:
Equation 3 |
Equation 4 |
So the flow down each path will be:
Equation 5 |
The nett evaporation is:
Equation 6 |
Equation 7 |
Seepage:
Equation 8 |
Combined this gives us the mass balance equation:
Equation 9 |
Parameterisation
The geometry of the storage is specified by user provided piecewise linear relationship between
...
The following explains how the mass balance equation (Equation 9). As all of the functions are piecewise-linear we can construct a table with entries for each unique value of volume that appears in the functions:
Equation 10 |
The corresponding values of the min/max release, seepage and area are then calculated by interpolating the user specified values.
Table 1. Example of pre-computed solution table
These values stay the same for the length of the model run and can then be used at each time step. Using the current value of Ordersj and Edepth we can calculate the corresponding value of ε for each table row (V):
Equation 11 |
At which point storage routing becomes a table lookup and interpolation exercise where we find the value of V that give a ϵ value of zero. Obviously we don't have to calculate the entire table but just use a standard search technique.
...
- Solving the current time step using the above method.
- Check to see if the resulting reservoir volume is outside the range allowed (otherwise the solution from step 1 is acceptable and we can stop).
- If it is outside of the range allowed then see if it is possible to get back into the acceptable range by either:
- If initial solution is below the minimum target then recompute the time step assuming that there are no downstream orders
- If initial solution is above the maximum target then recompute the time step assuming that the downstream orders are the greater of the current order and the maximum flow rate allowed on each outlet path for releasing above target water (the safe release).
- If the resulting answer from step 3 is still outside the allowed range the result obtained at step 3 becomes the final answer for this time step.
- Compute a total release from: TotRelease=Starget-St-1+In-Edepth×fareaStarget+fseepStarget
Where Starget is the appropriate minimum or maximum target volume (are you trying to cut back releases to stop the reservoir dropping below the minimum or increasing releases to stop it going over the maximum). - To calculate the corresponding release rates for the solution obtained at step 5 we have to scale up or down the orders so when we evaluate equation (5) we'll get the required results. The two cases are:
- If the initial solution (step 1) fell below the minimum target volume then we are cutting back and Starget at step 5 was Smin. We cut back each path in proportion to how far their order is above fjminSmin.
- Calculate the sum of current demands in excess of the path minimum capacity (limiting to the maximum outlet capacity at the minimum target volume): TotD=j=1mmaxminfjmaxSmin,Orderj-fjminSmin,0
- Calculate the release cutback required: cut=TotD-TotRelease-j=1mfjminSmin
- Scale back the orders: Orderj=minfjmaxSmin,Orderj-maxOrderj-fjminSmin,0TotDcut
- Calculate the sum of current demands in excess of the path minimum capacity (limiting to the maximum outlet capacity at the minimum target volume): TotD=j=1mmaxminfjmaxSmin,Orderj-fjminSmin,0
- If the initial solution (step 1) fell above the maximum target volume then we are ramping up the releases and Starget at step 5 was Smax. We add onto each path in proportion to how much remaining release capacity each path has.
- Calculate maximum we can currently send down each path: MaxQj=minmaxOrderj,AllowedQj,fjmaxSmax
Where AllowedQj is the maximum permitted release down path j for above target water. - the flow that's already going to go down path j: Dj=minmaxOrderj,fjminSmax,MaxQj
- the remaining release capacity: SurpQj=MaxQj-Dj
- The required increase in release is then: Ramp= TotRelease-j=1mDj
- Modified orders are then calculated from: Orderj=Dj+SurpQjj=1mSurpQjRamp
- Calculate maximum we can currently send down each path: MaxQj=minmaxOrderj,AllowedQj,fjmaxSmax
- If the initial solution (step 1) fell below the minimum target volume then we are cutting back and Starget at step 5 was Smin. We cut back each path in proportion to how far their order is above fjminSmin.