skip to main content
Pumped Storage Reservoir
Objects and Methods
Pumped Storage Reservoir
Used to model a reservoir that can release water for power production and/or use a pumping system to increase storage.
See “Reservoir Convergence” for details on the convergence algorithm used in the Pumped Storage Reservoir.
General Slots
Available Pumps
Type: Table Series
Units: NONE vs. NONE
Description: pump unit vs. availability of that unit
Information: Availability is a positive value no greater than 1.0 indicating the decimal fraction of the capacity of the unit for the entire run time.
I/O: Required input
Convergence Percentage
Type: Table
Units: NONE
Description: A percentage value ranging from 0 to 1 used for convergence in all iterative calculations
Information: See “Reservoir Convergence” for more information on the convergence algorithm
I/O: Optional; defaults to 0.0001 if not input.
Diversion
Type: Series
Units: FLOW
Description: flow from the reservoir to a diverting object
Information: If not linked or input it is set to zero.
I/O: Optional; may be input or linked or neither
Diversion Capacity
Type: Scalar Slot
Units: FLOW
Description: used to hold the maximum diversion physically possible from the reservoir
Information: This slot is used in the accounting system for allocation purposes and can be used in Rulebased Simulation
I/O: Input only
Elevation Volume Table
Type: Table
Units: LENGTH vs. VOLUME
Description: Reservoir Pool Elevation vs. Reservoir Storage
Information:  
I/O: Required input
Energy
Type: Series Slot
Units: ENERGY
Description: product of the power generated by flow through the turbines and the length of the timestep
Information: This slot may also take the BEST_EFFICIENCY or MAX_CAPACITY flags, which allow Energy to act as input for dispatching, but solve for the value of energy assuming the generators are operating at best efficiency or maximum capacity.
I/O: Optional; if not input by the user, Energy is computed in the power calculations.
Head vs Pump Flow
Type: Table
Units: LENGTH vs. FLOW
Description: operating head vs. maximum flow for each pump type
Information:  
I/O: Required input
Head vs Pump Power
Type: Table
Units: LENGTH vs. POWER
Description: operating head vs. maximum pumping power for each pump type
Information:  
I/O: Required input
Hours Utilized
Type: Table Series
Units: TIME, TIME
Description: hours of the timestep spent generating energy and pumping, respectively
Information:  
I/O: Output only
Inflow
Type: Multi Slot
Units: FLOW
Description: inflow into the reservoir from upstream
Information:  
I/O: Optional; if not input by the user, it is set through either mass balance computations or the propagation of values across the link.
Max Iterations
Type: Table
Units: NOUNITS
Description: maximum number of allowable iterations for iterative loops in the solution algorithms
Information: Used in conjunction with Convergence Percentage as a stopping criterion for iterative calculations.
I/O: Optional; defaults to 100 if not input.
Operating Head
Type: Series Slot
Units: LENGTH
Description: elevation difference between the average Pool Elevation and the average Tailwater Elevation during a timestep
Information:  
I/O: Output only
Outflow
Type: Series Slot
Units: FLOW
Description: outflow from reservoir through the turbines
Information: Outflow is the sum of the Turbine Release and Spill
I/O: Optional; if not input by the user, it is set through mass balance computations.
Pool Elevation
Type: Series Slot
Units: LENGTH
Description: elevation of the water surface of the Reservoir
Information: There must be an initial value for either Storage or Pool Elevation given by the user for the first timestep.
I/O: Optional; if not input by the user, it is solved by the mass balance computations. It may take a TARGET flag indicated by the user for target operation solution.
Power
Type: Series Slot
Units: POWER
Description: power generated by flow through the turbines
Information: Calculated by the power methods and cannot be input by the user.
I/O: Output only
Pump Capacity
Type: Series Slot
Units: POWER
Description: maximum pumping capacity
Information:  
I/O: Output only
Pump Energy
Type: Series Slot
Units: ENERGY
Description: energy required to run the pumps for the timestep
Information:  
I/O: Can be input or solved for by the dispatch methods
Pumped Flow
Type: Series
Units: FLOW
Description: flow into the reservoir by pumping
Information:  
I/O: Optional; can be input or solved for
Pump Power
Type: Series Slot
Units: POWER
Description: power required to run the pumps
Information:  
I/O: Output only
Pump Unit Types
Type: Table
Units: NONE vs. NONE
Description: pump unit number vs. type identification number of all pump units
Information:  
I/O: Required input
Pumps Used
Type: Series
Units: NONE
Description: the number of pumps used during the timestep
Information: Specific pumps cannot be designated. Pumps will always be added in the best efficiency order.
I/O: Optional; input or output
Return Flow
Type: Multi Slot
Units: FLOW
Description: flow returning from a diverting object
Information:  
I/O: Optional; defaults to zero if not linked or input.
Spill
Type: Series Slot
Units: FLOW
Description: sum of the regulated and unregulated spills and bypass
Information: May be input or solved for by RiverWare (see spill calculation methods).
I/O: Optional; may be input or solved for by RiverWare (see spill calculation methods).
Storage
Type: Series Slot
Units: VOLUME
Description: volume of water stored in the reservoir
Information: May be flagged as a TARGET Storage value by the user. There must be an initial value for either Storage or Pool Elevation given by the user for the first timestep. If flagged as a TARGET, a target operation solution is used.
I/O: Optional; if not input by the user, it is set through mass balance computations.
Tailwater Elevation
Type: Series
Units: LENGTH
Description: water surface elevation on the downstream side of the dam
Information: It can be linked to the Pool Elevation or Backwater Elevation of a downstream reservoir if the Linked or Input method is selected for the Tailwater category. Otherwise, it is calculated by the user method selected. It is used to compute the Operating Head used in the power calculations.
I/O: Optional; can be input, linked or calculated.
Total Inflows
Type: Series
Units: Flow
Description: Summary slot displaying the flows into and out of the reservoir excluding the flows through the outlet works
Information: Total Inflows is calculated using the following equation. Any component that is not in use or is not valid defaults to zero.
I/O: Output only
Inflow Sum
Type: Series
Units: Flow
Description: Sum of the total flows entering the reservoir at each timestep
Information: Inflow Sum is calculated using the following equation:
I/O: Output only
Turbine Release
Type: Series Slot
Units: FLOW
Description: flow through the turbines of a power reservoir (excluding spill)
Information:  
I/O: Optional; solved for if not input.
User Methods
Power
The methods in this category can be used on all types of power reservoir objects. See “Power”.
Power Release
The methods in this category can be used on all types of power reservoir objects. See “Power Release”.
Power Unit Information
The methods in this category can be used on all types of power reservoir objects. See “Power Unit Information”.
Input Energy Adjustment
The methods in this category can be used on all types of power reservoir objects. See “Input Energy Adjustment”.
Power Plant Failure
The methods in this category can be used on all types of power reservoir objects. See “Power Plant Failure”.
Energy in Storage
The methods in this category can be used on all types of reservoir objects. See “Energy in Storage”.
Tailwater
The Tailwater methods (available in the Tailwater category of the User Selectable Methods) calculate the Tailwater Elevation of a Level Power Reservoir. The Tailwater Elevation represents the water surface elevation immediately downstream of the Power Plant. This parameter is required to calculate the Operating Head of the Power Reservoir which is used to calculate either the Energy or Turbine Release of that Reservoir. The Tailwater methods are dependent upon the Reservoir being a Pumped Storage Reservoir and a valid Power method (available in the Power category of the User Selectable Methods) being selected. These methods require a valid Outflow to perform their calculations.
* None
This is the default method in the Tailwater category. This method performs no calculations. There are no slots specifically associated with this method.
Slots Specific to This Method
None
* Linked or Input
The Linked or Input method allows the user to either input values for the Tailwater Elevation or link the Tailwater Base Value to a slot (Pool Elevation or Backwater Elevation) on a downstream Reservoir. If the Tailwater Base Value is linked, the Tailwater Elevation cannot be input by the user. If the Tailwater Base Value is not linked, the Tailwater Elevation must be input by the user. The Tailwater Elevation is determined by following procedure if it is not input (i.e. the Tailwater Base Value is linked).
Slots Specific to This Method
Tailwater Base Value
Type: Series
Units: LENGTH
Description: elevation of tailwater or base elevation used to compute elevation of tailwater
Information:  
I/O: Optional; may be input or set by a link.
The Linked or Input user method does not perform any calculations intrinsically. There are however many logical evaluations performed in this method. The Linked or Input method is discussed below.
If a value for the Tailwater Base Value has been calculated by another user method or propagated through a link, the temporary value for the Tailwater Base Value (TWBaseValueTemp) is set equal to the calculated or linked Tailwater Base Value.
• If the Tailwater Base Value is linked to another slot, the following steps are performed.
1. If the Tailwater Elevation is input, a RiverWare error is flagged and the run is aborted.
2. If TWBaseValueTemp is known, the Tailwater Elevation is set equal to the TWBaseValueTemp.
3. If TWBaseValueTemp is not known, but the previous timestep’s Tailwater Elevation is known, the Tailwater Elevation is set equal to the previous timestep’s Tailwater Elevation.
4. If neither the TWBaseValueTemp nor the previous timestep’s Tailwater Elevation is known and the previous timestep was the initial timestep of the simulation, a RiverWare error is flagged and the simulation run is aborted.
5. If neither the TWBaseValueTemp nor the previous timestep’s Tailwater Elevation is known and the previous timestep was not the initial timestep, the method is exited and waits for more information.
• If the Tailwater Base Value is not linked to another slot, Tailwater Elevation must be input. If the Tailwater Elevation is not input, a RiverWare error is flagged and the simulation run is aborted.
* Base Value Only
The Base Value Only method is similar to the Linked or Input method. If this method is selected, the user must either input values directly into the Tailwater Base Value slot or link the Tailwater Base Value slot to either the Pool Elevation slot or the Backwater Elevation slot of the downstream Reservoir. Either the initial Tailwater Elevation or the initial Tailwater Base Value must be input by the user for this method to execute successfully. The Tailwater Elevation for any timestep is computed as the average Tailwater Base Value over the timestep.
Slots Specific to This Method
Tailwater Base Value
Type: Series
Units: LENGTH
Description: elevation of tailwater or base elevation of tailwater is used to compute the tailwater elevation
Information:  
I/O: Optional; may be input or linked.
This method is based on logic similar to that of the Linked or Input method. The Base Value Only user method performs many logical evaluations to set the Tailwater Elevation. This method is described below.
The temporary Tailwater Base Value (TWBaseValueTemp) is set equal to the Tailwater Base Value if the Tailwater Base Value was calculated by another user method or set via a link.
• If the Tailwater Base Value is linked to another slot, the following steps are performed.
1. If the previous timestep’s Tailwater Base Value is not known, and both the previous timestep’s Tailwater Elevation and TWBaseValueTemp are known, the Tailwater Elevation is calculated using the following formula:
Where Tailwater Elevation (-1) is the previous timestep’s Tailwater Elevation.
2. If neither the previous timestep’s Tailwater Base Value nor the TWBaseValueTemp is known but the previous timestep’s Tailwater Elevation is known, the current timestep is set equal to the previous timestep’s Tailwater Elevation.
3. If neither the previous timestep’s Tailwater Base Value nor the previous timestep’s Tailwater Elevation is known and the previous timestep is the initial timestep, a RiverWare error is posted and the simulation run is aborted.
4. If neither the previous timestep’s Tailwater Base Value nor the previous timestep’s Tailwater Elevation is known and the previous timestep is not the initial timestep, more information must be known. The method is exited and waits for more information to be known.
5. If both the previous timestep’s Tailwater Base Value and the TWBaseValueTemp are known, the Tailwater Elevation is calculated using the following equation:
6. If the previous timestep’s Tailwater Base Value is known but TWBaseValueTemp is not known, Tailwater Elevation is set equal to the previous timestep’s Tailwater Base Value.
• If the Tailwater Base Value is not linked, the following steps are performed.
1. If the Tailwater Elevation is not known and the TWBaseValueTemp is known, the Tailwater Elevation is set equal to the TWBaseValueTemp.
2. If neither the Tailwater Elevation nor the TWBaseValueTemp are known, a RiverWare error is flagged and the simulation run is aborted.
* Base Value Plus Lookup Table
The Base Value Plus Lookup Table method computes the Tailwater Elevation. This is done by adding the average Tailwater Base Value (over the timestep) to a function of Outflow determined by the Tailwater Table. The Outflow value used to find the corresponding Tailwater value on the Tailwater Table is either the value of the local variable Flow or the value of the Outflow slot. The Tailwater Base Value may be input by the user or linked to either the Pool Elevation slot or the Backwater Elevation slot of a downstream Reservoir. If the Tailwater Base Value is neither input nor linked, it is assumed to be zero.
Slots Specific to This Method
Tailwater Base Value
Type: Series
Units: LENGTH
Description: the base elevation of the tailwater
Information:  
I/O: Optional; can be input or linked.
Tailwater Table
Type: Table
Units: FLOW vs. LENGTH
Description: reservoir outflow vs. either the tailwater elevation or the tailwater elevation increment
Information: If the Tailwater Base Value is non-zero, the Tailwater Table gives values of incremental increase in Tailwater Elevation over the Base value. Otherwise, the table gives the Tailwater Elevation values.
I/O: Required input
This method is based on logic similar to that of the Linked or Input method. The Base Value Plus Lookup Table user method performs many logical evaluations to set the Tailwater Elevation. This method is as follows.
1. The temporary Tailwater Base Value (TWBaseValueTemp) is set equal to the Tailwater Base Value if the Tailwater Base Value was calculated by another user method or set via a link.
2. If the Local Info variable Flow is known, the local variable, tempflow, is set equal to Flow. If the Local Info variable Flow is not known, but the Outflow is known, tempflow is set equal to Outflow.
3. If the tempflow value is known, the following steps are taken to determine the Tailwater Elevation.
– If the Tailwater Base Value is linked (and tempflow is known), the following steps are performed.
1. If both TWBaseValueTemp and the previous timestep’s Tailwater Base Value are known, TWTemp (a local variable) is obtained from a table interpolation performed on the Tailwater Table using tempflow. The Tailwater Elevation is then calculated using the following equation.
2. If TWBaseValueTemp is known but the previous timestep’s Tailwater Base Value is known, but the previous timestep’s Tailwater Basic Value is not known. TWTemp is obtained from a table interpolation performed on the Tailwater Table using tempflow. The Tailwater Elevation is then calculated using the following equation:
3. If TWBaseValueTemp is not known but the previous timestep’s Tailwater Base Value is known, TWTemp is obtained from a table interpolation performed on the Tailwater Table using tempflow. The Tailwater Elevation is then calculated using the following equation:
4. If neither TWBaseValueTemp nor the previous timestep’s Tailwater Base Value are known but the previous timestep’s Tailwater Elevation is known, the current timestep’s Tailwater Elevation is set equal to the previous timestep’s Tailwater Elevation.
5. If neither TWBaseValueTemp nor the previous timestep’s Tailwater Base Value is known and the previous timestep is the initial timestep of the run, a RiverWare error is posted and the run is aborted.
6. If neither the TWBaseValueTemp nor the previous timestep’s Tailwater Base Value is known and the previous timestep is not the initial timestep of the run, the method is exited and waits for more information.
– If the Tailwater Base Value is not linked (and tempflow is known), the following steps are performed.
1. If TWBaseValueTemp is known, TWTemp is obtained from a table interpolation performed on the Tailwater Table using tempflow. The Tailwater Elevation is then calculated using the following equation:
2. If TWBaseValueTemp is not known, the Tailwater Elevation is obtained from a table interpolation performed on the Tailwater Table using tempflow.
4. The only case where tempflow is not known is when Outflow is not known. This scenario only occurs at the first timestep in one of the three given Energy dispatch methods. The following steps are performed to determine the Tailwater Elevation if tempflow is not known.
– If the Tailwater Base Value is linked (and tempflow is not known), the following steps are taken.
1. If TWBaseValueTemp and the previous timestep’s Tailwater Elevation are known, the Tailwater Elevation is calculated using the following equation:
2. If both TWBaseValueTemp and the previous timestep’s Tailwater Base Value are known but the previous timestep’s Tailwater Elevation is not known, Tailwater Elevation is calculated using the following equation:
3. If TWBaseValueTemp is known, but neither the previous timestep’s Tailwater Elevation nor the previous timestep’s Tailwater Base Value are known, Tailwater Elevation is set equal to TWBaseValueTemp.
4. If TWBaseValueTemp is not known but the previous timestep’s Tailwater Elevation is known, the current timestep’s Tailwater Elevation is set equal to the previous timestep’s Tailwater Elevation.
5. If neither TWBaseValueTemp nor the previous timestep’s Tailwater Elevation are known, but the previous timestep’s Tailwater Base Value is known, Tailwater Elevation is set equal to the previous timestep’s Tailwater BaseValue.
6. If the previous timestep is the initial timestep of the run, and none of the following are known: TWBaseValueTemp, the previous timestep’s Tailwater Base Value, and the previous timestep’s Tailwater Elevation, a RiverWare error is posted and the simulation run is aborted.
7. If the previous timestep is NOT the initial timestep of the run, and none of the following are known: TWBaseValueTemp, the previous timestep’s Tailwater Base Value, and the previous timestep’s Tailwater Elevation, the method is exited and waits for more information to execute.
– If the Tailwater Base Value is not linked (and tempflow is NOT known), the following procedures are performed.
1. If the Tailwater Elevation is known, the method is exited because no calculations need to be performed.
2. If the Tailwater Elevation is NOT known, and TWBaseValueTemp is NOT equal to zero, Tailwater Elevation is set equal to TWBaseValueTemp.
3. If the Tailwater Elevation is NOT known and either the temporary Tailwater Base Value is NOT known or equal to zero or both, Tailwater Elevation is set equal to the elevation corresponding to zero on the Tailwater Table.
Following are definitions of some of the terms used in these equations.
TWBaseValueTemp
A temporary value for the Tailwater Base Value. This value may be determined from another method or propagated across a link.
tempflow
A local variable used as the outflow from the Reservoir.
TWTemp
A local variable used to represent the incremental increase in the Tailwater Elevation over the Tailwater Base Value.
Tailwater Elevation (-1)
The Tailwater Elevation at the previous timestep.
Tailwater Base Value (-1)
The Tailwater Base Value at the previous timestep.
* Stage Flow Lookup Table
The TWstageFlowLookupTable method is similar to the other methods for determining Tailwater Elevation. The Tailwater Elevation is obtained from a three-dimensional table relating Outflow, Downstream Stage, and the corresponding Tailwater Elevation for most cases. The data in this table must be input by the user. The value for Downstream Stage that is used in this method is the larger of the Tailwater Reference Elevation or the Tailwater Base Value if the Tailwater Base Value is linked to a downstream elevation. If the Tailwater Base Value is not linked, the temporary Tailwater Base Value is used as the Downstream Stage. An average value for the Tailwater Elevation over the timestep is used whenever possible.
Slots Specific to This Method
Stage Flow Tailwater Table
Type: Table
Units: FLOW vs. LENGTH vs. LENGTH
Description: Reservoir Outflow vs. Downstream Elevation (Tailwater Base Value) vs. Tailwater Elevation
Information: Data must be entered into the table in increasing blocks of the same Outflow value for the 3-dimensional table interpolator to work correctly. For every block of same Outflows in column 1, Stages should be listed in increasing order in column 2, and the corresponding Tailwater Elevations in column 3.
 
Outflow
Downstream Stage
TW Elevation
100
500
510
100
550
560
100
600
610
200
500
520
200
550
570
200
600
620
300
500
530
300
550
580
300
600
630
I/O: Required input
Tailwater Base Value
Type: Series
Units: LENGTH
Description: base elevation of the tailwater
Information:  
I/O: Optional; can be input or set by a link.
Tailwater Reference Elevation
Type: Table
Units: LENGTH
Description: lowest Reservoir discharge Elevation when there are no backwater effects from a downstream pool (reservoir)
Information: If this slot has input data, the greater of the Tailwater Reference Elevation or the linked lower reservoir’s Pool or Backwater Elevation is used to calculate the Tailwater Base Value. If the Tailwater Base Value is linked to a downstream elevation, this value must be specified by the user. If the Tailwater Base Value is not linked, this value is not used, even if specified.
I/O: Required input
The TWstageFlowLookupTable user method performs many logical tests to determine the Tailwater Elevation. This method is described below.
1. The first step in this method is to check and see if the Tailwater Reference Elevation is known. If the Tailwater Reference Elevation is not known, a RiverWare error is posted and the run is aborted.
2. The temporary Tailwater Base Value (TWBaseValueTemp) is set equal to the Tailwater Base Value if the Tailwater Base Value was calculated by another user method or set via a link.
3. If the local variable Flow is known, the local variable tempflow is set equal to Flow If the local variable Flow is not known, but the Outflow is known, if the Local Info variable Flow is not known but Outflow is known, tempflow is set equal to Outflow.
4. If the tempflow value is known, the following steps are taken to determine the Tailwater Elevation.
– If the Tailwater Base Value is linked (and tempflow is known), the following steps are performed.
1. If both TWBaseValueTemp and the previous timestep’s Tailwater Base Value are known, downstreamStage is computed as the average of the previous timestep’s Tailwater Base Value and either the Tail Water Reference Elevation or TWBaseValueTemp (whichever is greater). A table interpolation is performed to determine the Tailwater Elevation using the downstreamStage, tempflow, and the Stage Flow Tailwater Table.
2. If TWBaseValueTemp is known but the previous timestep’s Tailwater Base Value is NOT known, downstreamStage is set equal to either the Tail Water Reference Elevation or TWBaseValueTemp (whichever is greater). A table interpolation is performed to determine the Tailwater Elevation using the downstreamStage, tempflow, and the Stage Flow Tailwater Table.
3. If the previous timestep’s Tailwater Base Value is known but TWBaseValueTemp is NOT known, downstreamStage is set equal to the previous timestep’s Tailwater Base Value. A table interpolation is performed to determine the Tailwater Elevation using the downstreamStage, tempflow, and the Stage Flow Tailwater Table.
4. If neither TWBaseValueTemp nor the previous timestep’s Tailwater Base Value are known, but the previous timestep’s Tailwater Elevation is known, the current timestep’s Tailwater Elevation is set equal to the previous timestep’s Tailwater Elevation.
5. If the previous timestep was the initial timestep and none of the following are known: TWBaseValueTemp, the previous timestep’s Tailwater Base Value, and the previous timestep’s Tailwater Elevation, a RiverWare error is posted and the run is aborted.
6. If the previous timestep was NOT the initial timestep, and none of the following are known: the temporary TWBaseValueTemp, the previous timestep’s Tailwater Base Value, and the previous timestep’s Tailwater Elevation, the method is exited and waits for more information.
– If the Tailwater Base Value is not linked (and tempflow is known), the following steps are performed.
1. If TWBaseValueTemp is known, downstreamStage is set equal to TWBaseValueTemp. A table interpolation is performed to determine the Tailwater Elevation using the downstreamStage, tempflow, and the Stage Flow Tailwater Table.
2. If TWBaseValueTemp is NOT known, a RiverWare error is posted and the run is aborted.
5. The only case where tempflow is not known is when Outflow is not known. This scenario only occurs at the first timestep in one of the three given Energy dispatch methods. The following steps are performed to determine the Tailwater Elevation if tempflow is not known.
– If the Tailwater Base Value is linked (and tempflow is not known), the following steps are performed.
1. If both TWBaseValueTemp and the previous timestep’s Tailwater Elevation are known, the Tailwater Elevation is calculated using the following equation:
2. If both TWBaseValueTemp and the previous timestep’s Tailwater Base Value are known but the previous timestep’s Tailwater Elevation is not known, Tailwater Elevation is computed using the following equation:
3. If TWBaseValueTemp is known but neither the previous timestep’s Tailwater Elevation nor the previous timestep’s Tailwater Base Value are known, Tailwater Elevation is set equal to TWBaseValueTemp.
4. If TWBaseValueTemp is not known but the previous timestep’s Tailwater Elevation is known, the current timestep’s Tailwater Elevation is set equal to the previous timestep’s Tailwater Elevation.
5. If neither TWBaseValueTemp nor the previous timestep’s Tailwater Elevation is known, but the previous timestep’s Tailwater Base Value is known, Tailwater Elevation is set equal to the previous timestep’s Tailwater Base Value.
6. If the previous timestep is the initial timestep of the run, and none of the following are known: TWBaseValueTemp, the previous timestep’s Tailwater Base Value, and the previous timestep’s Tailwater Elevation, a RiverWare error is posted, and the run is aborted.
7. If the previous timestep is NOT the initial timestep of the run and none of the following are known: TWBaseValueTemp, the previous timestep’s Tailwater Base Value, and the previous timestep’s Tailwater Elevation, the method is exited and waits for more information.
– If the Tailwater Base Value is not linked (and tempflow is not known) the following procedures are performed.
1. If the Tailwater Elevation is known, the method is exited because no calculations need to be performed.
2. If the Tailwater Elevation is NOT known and the TWBaseValueTemp is NOT equal to zero, Tailwater Elevation is set equal to TWBaseValueTemp.
3. If the Tailwater Elevation is NOT known and either the temporary Tailwater Base Value is NOT known or equal to zero or both, Tailwater Elevation is set equal to the elevation corresponding to zero on the Tailwater Table.
Following are definitions of some terms used in these equations.
TWBaseValueTemp
A temporary value for the Tailwater Base Value. This value may be determined from another method or propagated across a link.
tempflow
A local variable used as the outflow from the Reservoir.
downstreamStage
A local variable used to hold the value of the downstream stage elevation.
Tailwater Elevation (-1)
The Tailwater Elevation at the previous timestep.
Tailwater Base Value (-1)
The Tailwater Base Value at the previous timestep.
* Compare to Avg Base Value
The Compare to Avg Base Value method uses similar methodology as the Base Value Plus Lookup Table and TWstageFlowLookupTable methods. The only difference between this method and the others is that a new local variable, TWCompare, is used. The value for TWCompare is compared with a table lookup value for the Tailwater Elevation. The larger of the two values is used as the Tailwater Elevation. An average Tailwater Elevation over the timestep is calculated whenever possible.
Slots Specific to This Method
Tailwater Base Value
Type: Series
Units: LENGTH
Description: base elevation of the tailwater
Information:  
I/O: Optional; can be input of set by a link.
Tailwater Table
Type: Table
Units: FLOW vs. LENGTH
Description: Reservoir Outflow vs. either the Tailwater Elevation or the tailwater elevation increment
Information: If the Tailwater Base Value is non-zero, the Tailwater Table holds values of incremental increase in Tailwater Elevation over the Base value. Otherwise, the table holds the Tailwater Elevation values.
I/O: Required input
The Compare to Avg Base Value user method performs many logical evaluations to determine the Tailwater Elevation. This method is performs as follows.
1. The temporary Tailwater Base Value (TWBaseValueTemp) is set equal to the Tailwater Base Value is the Tailwater was calculated by another user method or set via a link. For the Tailwater Compare Method, the Tailwater Base Value must be linked to another object. Otherwise there would be no reason to compare values. If the Tailwater Base Value is not linked, a RiverWare error is posted and the simulation run is aborted.
2. If the Local Info variable Flow is known, the local variable tempflow is set equal to Flow.
3. If the local variable Flow is not known, but Outflow is known, tempflow is set equal to Outflow.
4. If the tempflow value is known, the following steps are taken to determine the Tailwater Elevation.
a. If both TWBaseValueTemp and the previous timestep’s Tailwater Base Value are known, TWCompare is set.
b. If TWBaseValueTemp is known but the previous timestep’s Tailwater Base Value is NOT known, TWCompare is set equal to TWBaseValueTemp.
c. If TWBaseValueTemp is not known but the previous timestep’s Tailwater Base Value is known, TWCompare is set equal to the previous timestep’s Tailwater Base Value.
d. If neither TWBaseValueTemp nor the previous timestep’s Tailwater Base Value are known and the previous timestep is the initial timestep, a RiverWare error is posted and the run is aborted.
e. If neither TWBaseValueTemp nor the previous timestep’s Tailwater Base Value are known and the previous timestep is NOT the initial timestep, the method is exited and waits for more information.
5. Once the TWCompare value has been determined, a table interpolation is performed using the Tailwater Table to obtain the tailwater elevation corresponding to the tempflow value. The tailwater elevation value obtained from this interpolation is then compared to TWCompare. The largest of the two values is used to set the Tailwater Elevation.
6. The only case where tempflow is not known is when Outflow is not known. This scenario only occurs at the first timestep in one of the three given Energy dispatch methods. The following steps are performed to determine the Tailwater Elevation if tempflow is not known.
a. If both TWBaseValueTemp and the previous timestep’s Tailwater Elevation are known, Tailwater Elevation is set.
b. If both TWBaseValueTemp and the previous timestep’s Tailwater Base Value are known but the previous timestep’s Tailwater Elevation is not known, Tailwater Elevation is set.
c. If TWBaseValueTemp is linked and the temporary Tailwater Base Value is known but neither the previous timestep’s Tailwater Elevation nor the previous timestep’s Tailwater Base Value are known, the Tailwater Elevation is set equal to TWBaseValueTemp.
d. If TWBaseValueTemp is not known but the previous timestep’s Tailwater Elevation is known, the current timestep’s Tailwater Elevation is set equal to the previous timestep’s Tailwater Elevation.
e. If neither TWBaseValueTemp nor the previous timestep’s Tailwater Elevation are known, but the previous timestep’s Tailwater Base Value is known, the current timestep’s Tailwater Elevation is set equal to the previous timestep’s Tailwater Base Value.
f. If the previous timestep is the initial timestep of the run, and none of the following are known: TWBaseValueTemp, the previous timestep’s Tailwater Base Value, and the previous timestep’s Tailwater Elevation, a RiverWare error is posted and the simulation is aborted.
g. If the previous timestep is NOT the initial timestep of the run and none of the following are known: TWBaseValueTemp, the previous timestep’s Tailwater Base Value, and the previous timestep’s Tailwater Elevation, the method is exited and waits for more information.
Following are definitions of some terms used in these equations.
TWBaseValueTemp
A temporary value for the Tailwater Base Value. This value may be determined from another method or propagated across a link.
tempflow
A local variable used as the outflow from the Reservoir.
TWCompare
A local variable used to hold a value that is compared to the Tailwater Elevation obtained by table interpolation.
Tailwater Elevation (-1)
The Tailwater Elevation at the previous timestep.
Tailwater Base Value (-1)
The Tailwater Base Value at the previous timestep.
* Coefficients Table
The Coefficients Table method multiplies Outflow, Tailwater Base Value, and Tailwater Elevation at the current and/or previous timestep by coefficients that are stored on a table. These products are added together along with constants to compute the Tailwater Elevation.
Slots Specific to This Method
Tailwater Base Value
Type: Series
Units: Length
Description: base elevation of the tailwater
Information:  
I/O: Optional; can be input or set by a link.
Tailwater Coefficients
Type: Table
Units: Length, Length/Flow, None, None
Description: This table contains the coefficients used in the calculation. The columns are as follows: Constant, Outflow, TW Base Val, TW Elev. The first row (t) represents the value to multiply by the current timestep’s value. The second row (t-1) represents the value to multiply by the previous timestep’s value.
Information: Not every cell will have a value, but there must be at least one value in the table. In addition, the coefficient for TW Elev at t cannot be non-zero or an error will be issued. (Tailwater Elevation at the current timestep is the value being computed, so it is not possible to use it in the calculation). If any coefficients are specified (non-zero) for t-1 for Outflow, TW Base Val, or TW Elev, then the initial timestep value of those slots must also be specified.
I/O: Input only
At the beginning of the run, the Tailwater Coefficients table is verified for valid coefficients as described in the slot information above. Not every coefficient has to be specified.
Following is the calculation performed when the tailwater method is executed.
Each coefficient and each series value are checked for validity before including in the total.
In the preceding equation, the values for flow and TailwaterBaseValueTemp are based on the known information, as follows:
• The flow variable represents the outflow passed into the method if valid, or the value on the Outflow slot if not passed in. If neither is valid, Tailwater Elevation is set to the previous Tailwater Elevation. If that is not valid, the method exits and waits for a flow value to become valid.
• TailwaterBaseValueTemp is either the base value passed into the method or the value on the Tailwater Base Value slot. If neither is known, the previous Tailwater Base Value is used. If that is not valid, the method executes to wait for more information.
* Hoover Tailwater
The Hoover Tailwater method was developed by the U.S. Bureau of Reclamation for use on Lake Mead. This method uses a table of empirically derived constants.
Slots Specific to This Method
Tailwater Base Value
Type: Series
Units: LENGTH
Description: base elevation of the tailwater
Information:  
I/O: Optional; can be input or set by a link.
Tailwater Table
Type: Table
Units: FLOW vs. LENGTH
Description: Reservoir Outflow vs. either the Tailwater Elevation or the tailwater elevation increment
Information: If the Tailwater Base Value is non-zero, the Tailwater Table holds values of incremental increase in Tailwater Elevation over the Base value. Otherwise, the table holds the Tailwater Elevation values.
I/O: Required input
Hoover Tailwater Table
Type: Table
Units: NO UNITS
Description: constants for equation that calculates the Tailwater Elevation
Information: This method was developed by the USBR for use on Lake Mead. Column 1 is the TWaverage in feet, column 2 is hte5, column 3 is coeff1.
I/O: Required input
The Hoover Tailwater user method performs calculations to determine the Tailwater Elevation. Following is a description of this method.
1. The first step of this method is to set the temporary Tailwater Base Value (TWBaseValueTemp). TWBaseValueTemp is set equal to the Tailwater Base Value if the Tailwater Base Value was calculated by another user method or set via a link.
2. Then the previous timestep’s Tailwater Base Value is checked. If the previous timestep’s Tailwater Base Value is not known, a RiverWare error is posted and the run is aborted.
3. The TWaverage, a local variable, is then calculated using the following steps.
a. If TWBaseValueTemp is known, TWaverage is set as follows:
b. If the temporary TWBaseValueTemp is NOT known, the TWaverage is set equal to the previous timestep’s Tailwater Base Value.
4. Once the TWaverage has been calculated, it is used to interpolate the empirical constants for the following equation from the Hoover Tailwater Table.
5. Finally:
6. Tailwater Elevation is then set equal to TELEFT (which is converted into internal units).
Following are definitions of some terms used in the these equations.
TWBaseValueTemp
Temporary value for the Tailwater Base Value. This value may be determined from another method or propagated across a link.
Tailwater Base Value (-1)
The Tailwater Base Value at the previous timestep.
TWaverage
A local variable that is used as the average of the Tailwater Elevation over the timestep.
TELEFT
The Tailwater Elevation in feet as determined by the equation given above.
hte5
An empirical constant developed by the USBR.
Qcfs
The flow in cfs.
coeff1
An empirical constant developed by the USBR.
Pump Power
Used to calculated flow, power, and pump efficiency.
* None
This is the default method. It performs no calculations and has no slots associated with it. This method is not a valid method and an error is flagged if the user has selected it.
* Unit Pump Power
Calculates pump power and pumped flow. First, the efficiency of all the different pump types is determined. Then flow and power are calculated based on the properties that are given. There are no slots specifically associated with this method.
1. The first step in the method is to determine the Operating Head. Operating head is calculated by the user method selected in the Tailwater category. Then, the efficiencies of all pump types at the given Operating Head are calculated. Efficiency is calculated as power divided by flow where power and flow are determined from interpolation of the Head vs Pump Power and Head vs Pump Flow tables, respectively, for each pump type.
2. To solve for Pump Power and Inflow, different sets of calculations are performed depending upon the slots input by the user.
– If Pumps Used is given, the following calculations are performed (pumps are added in the best efficiency order):
1. For each pump used, the flow and power are calculated from the Head vs Pump Flow and Head vs Pump Power tables.
2. Pumped Flow is set as the sum of the flows through each pump. Pump Power is set as the sum of the power used by each pump.
3. Pump Energy is calculated as the product of Pump Power and the length of the timestep.
– If Pumped Flow is given, the following calculations are performed:
1. Pump types are added (in the order of most efficient to least efficient) until the Pumped Flow has been met or all available pumps have been used.
2. When the Pumped Flow is exceeded, the least efficient pump type is interpolated to determine Pump Power and Pumps Used so that the exact target Pumped Flow is met.
3. If the Pumped Flow cannot be met by all available pumps, the run will abort with an error message that the specified Pumped Flow cannot be met.
4. Pump Energy is calculated as the product of Pump Power and the length of the timestep.
– If Pump Power is input by the user, a similar approach is taken to the case where Pumped Flow is input. Entire types of pumps are added until the given Pump Power has been met. When the target Pump Power has been exceeded, linear interpolation is done on the least efficient pump type so that the pump power is met exactly. If all the pump types cannot meet the target Pump Power, the run will abort with an error message that the specified Pump Power cannot be met.
3. Finally, the Power Coefficient is calculated as Pumped Power divided by Inflow.
Pump and Release Accommodation
This method is used to specify whether pumping and release occur in the same timestep, or whether for a given timestep, the reservoir is either pumping, or releasing.
* Pump or Release Only
This is the default method. When selected, the reservoir may not pump and release on the same timestep. See “Dispatch Methods” for the dispatch methods available when this user method is selected.
* Pump and Release
This method is used when the user wishes to model pumping and releasing on the same timestep. This is mainly used for post optimization simulation where Pumped Flow and Outflow are both set as input as a result of the optimization run. Even though both Pumped Flow and Outflow are allowed to be inputted, one of the values has to be a zero. If both pumping and releasing are taking place, the user must specify the Pumped Energy and Energy resulting from releasing. See “Dispatch Methods” for the dispatch methods available when this user method is selected.
Spill
The methods in this category can be used on all types of reservoir objects. See “Spill”.
Unregulated Spill Type
The methods in this category can be used on all types of reservoir objects. See “Unregulated Spill Type”.
Regulated Spill Overflow
The methods in this category can be used on all types of reservoir objects. See “Regulated Spill Overflow”.
Input Outflow Adjustment
The methods in this category can be used on all types of reservoir objects. See “Input Outflow Adjustment”.
Future Value
The methods in this category are used to determine the future value of the energy that would have been generated by the water that was lost through the spillway.
* None
None is the default method for the Future Value category. No calculations are performed by this method. There are no slots specifically associated with this method.
* Cumulative Storage Value Table
Slots Specific to This Method
Marginal Storage Value Table
Type: Table
Units: Volume vs. $per Energy
Description: Storage versus marginal value per unit energy
Information: This table should be increasing in storage, and usually decreasing in marginal value.
I/O: Required input
Spill Cost
Type: Series Slot
Units: $
Description: Future cost of energy lost due to spilled water
Information:  
I/O: Output only
Future Value of Used Energy
Type: Series Slot
Units: $
Description: Future value of energy used in the current timestep
Information:  
I/O: Output only
Anticipated Storage
Type: Series
Units: Volume
Description: The combination of Storage in the reservoir at the given timestep plus any flow (converted volume) that is in transit to the reservoir
Information: This slot represents the storage including any lagged flows that are already in a linked upstream reach, which will reach the reservoir at a later timestep. If there are no lagged reaches between this reservoir and the next upstream reservoir, Anticipated Storage will equal Storage. It is this storage value that will be used to calculate Cumulative Storage Value.
I/O: Output only
Cumulative Storage Value
Type: Series Slot
Units: $
Description: Represents the future energy value of the current Anticipated Storage
Information:  
I/O: Output only
Cumulative Storage Value Table
Type: Table
Units: Volume vs. $
Description: Anticipated Storage and cumulative value used to calculate the Cumulative Storage Value as a function of Anticipated Storage
Information: This table should be increasing in storage and usually increasing in cumulative storage value.
I/O: Required Input either by the user or automatically generated by RiverWare if the Cumulative Storage Value Table Automation method is selected.
This method uses the Marginal Storage Value Table and the calculated Spill and Turbine Release to compute the Spill Cost and Future Value of Used Energy. These are the only calculations performed by this method.
The correct marginal value is found from the current storage in the reservoir.
• If the current storage is than the midpoint between the first and second storage table values, the first marginal value is used.
• The second marginal value is used for a current storage above that midpoint to the midpoint between the second and third storage table values.
• The last marginal value is used for any current storage above the midpoint between the second-to-last and the last storage table value. Following is a sample Marginal Value Table (Table 22.1) and associated graph.
 
Table 22.1  Marginal Value Table
Storage
Marginal Value
20
30
60
26
100
24
Assume that the current storage is 39. Therefore, this method would use 30 as the marginal value for use in the next computation. Assume that the current storage is 41. Therefore, this method would use 26 as the marginal value for use in the next computation.
Use of a table in this fashion is unique to this method.
Spill Cost is computed as follows:
Future Value of Used Energy is computed as follows:
The Cumulative Storage Value computation begins by first calculating Anticipated Storage. This is the sum of the reservoir Storage plus any flow already in transit to the reservoir in an upstream lagged reach. For example, assume a reservoir’s Inflow slot is linked to a reach with a three-hour lag time. In an run with a 1 Hour timestep, the reservoir’s Anticipated Storage is calculated as follows:
If there are no lagged reaches between the reservoir and the next upstream reservoir, then Anticipated Storage will simply equal Storage.
The Cumulative Storage Value is then computed by interpolating from the Cumulative Storage Value Table using the calculated Anticipated Storage value.
Cumulative Storage Value Table Automation
This category allows the RiverWare simulation to automate the creation of the Cumulative Storage Value Table. This category is only visible if Cumulative Storage Value Table is selected in the Future Value category.
* None
If this method is selected, no automation will be performed and the user must enter the data into the Cumulative Storage Value Table.
* Marginal Value to Table
If this method is selected, the Marginal Storage Value table will be used as the source for the generation of the Cumulative Storage Value Table. This is the only calculation associated with this method. There are no slots associated specifically with this method.
This method uses information from the simulation slot Marginal Storage Value Table to generate a cumulative storage value table. The cumulative storage value can be thought of as the summation of the marginal storage values from a storage of 0 to the current storage. Therefore, the automation method finds the same midpoint values used by the simulation Future Value method, and uses those points in the table.
If only one value exists in the Marginal Storage Value Table, then only two entries will exist in the Cumulative Storage Value Table. The two entries will be 0, and midway between the value in the Marginal Storage Value Table, and the maximum value set on the Storage slot. If more than one value exists, three or more points will result. Following is an example Marginal Value Table (Table 22.2), the resulting Cumulative Storage Value Table (Table 22.3), and a graph of the Cumulative Storage Value data.
 
Table 22.2  Marginal Value Table
Storage
Marginal Value
20
30
60
26
100
24
 
Table 22.3  Cumulative Storage Value Table
Anticipated Storage
Cumulative Value
40
1200
80
2240
140
3680
Ramping
This category allows you to model the cost of turbine ramping, the cost of changing the turbine release from one timestep to the next.
* None
This is the default method for this category. No new slots are instantiated, and no calculations are performed.
* Track Ramping
In this method the user assigns a unit cost to turbine ramping, a cost per unit change in flow from one timestep to the next. The method then calculates the change in turbine release and the associated ramping cost. The unit cost is the same for ramping up and ramping down.
Slots Specific to This Method
Ramping Cost
Type: Series
Units: Value
Description: The total cost of turbine ramping for the timestep.
Information: This is the Unit Ramping Cost multiplied by the change in turbine release from one timestep to the net.
I/O: Output only
Turbine Decrease
Type: Series
Units: Flow
Description: The difference between Turbine Release at the previous timestep and the current timestep when Turbine Release decreases from the previous timestep
Information: If Turbine Release at the current timestep is greater than at the previous timestep, the value is zero.
I/O: Output only
Turbine Increase
Type: Series
Units: Flow
Description: The difference between Turbine Release at the current timestep and the previous timestep when Turbine Release increases from the previous timestep
Information: If Turbine Release at the current timestep is less than at the previous timestep, the value is zero.
I/O: Output only
Unit Ramping Cost
Type: Table 1x1
Units: Value per Flow
Description: The cost per unit change in Turbine Release from one timestep to the next
Information: There is a single value for Unit Ramping Cost (i.e. the same unit cost for ramping up and ramping down)
I/O: Optional input; if not input or negative, defaults to zero
1. The method first checks for a value in the Unit Ramping Cost table slot.
2. If there is no input value, or if the value is negative, it sets the value to zero.
3. Then it checks if Turbine Release is valid for the current timestep and the previous timestep.
4. If Turbine Release at the current timestep is greater than or equal to the previous timestep, the following values are set:
5. Otherwise, the following values are set:
6. If Turbine Release is not valid at both the current and previous timesteps, then Turbine Increase, Turbine Decrease and Ramping Cost will all display NaN.
Hydrologic Inflow
The Hydrologic Inflow category allows RiverWare to accommodate inflows to a Reservoir that are not part of the main channel and/or are not gauged. The user methods in this category may be used to initialize the Hydrologic Inflow slot if it is required by the user. If the Hydrologic Inflow slot has been initialized, it is figured into the mass balance when the object dispatches.
* None
None is the default method for the Hydrologic Inflow category. No calculations are performed by this method. There are no slots specifically associated with this method. If this method is selected, the Hydrologic Inflow slot is not initialized so it is no included in the mass balance.
* Input Hydrologic Inflow
The Input Hydrologic Inflow method should be used when the user wishes either to input the values of Hydrologic Inflow or have the values default to zero. RiverWare will not overwrite any user input values.
Slots Specific to This Method
Hydrologic Inflow
Type: Series
Units: FLOW
Description: flow into the reservoir that is not gauged and/or does not enter through the main channel.
Information:  
I/O: Optional; defaults to zero if not input.
Hydrologic Inflow Adjust
Type: Series
Units: FLOW
Description: optional adjustment that can be made to the calculated Hydrologic Inflow
Information:  
I/O: Optional; set to zero if not input by the user.
Hydrologic Inflow Net
Type: Series
Units: FLOW
Description: sum of hydrologic Inflow and Hydrologic Inflow Adjust
Information:  
I/O: Output only
The algorithm used for this method is very simple. If Hydrologic Inflow is not input by the user, it is set equal to zero. Hydrologic Inflow Net is calculated as the sum of Hydrologic Inflow and Hydrologic Inflow Adjust.
Gate Setting
Used to determine the gate setting on the pumps which results in optimum performance.
* None
This is the default method. It performs no gate setting calculations. There are no specific slots associated with this method.
* Best Gate Setting Table
Used to calculate the best gate setting for the pumps’ intake.
Slots Specific to This Method
Best Gate Setting
Type: Table
Units: LENGTH vs. NONE
Description: head vs. gate setting for best pump performance
Information:  
I/O: Required input
Gate Setting
Type: Series Slot
Units: NONE
Description: best gate setting for the pump’s intake
Information:  
I/O: Output only
The Gate Setting slot is calculated from interpolation of the Best Gate Setting table using the Operating Head for the current timestep.
Evaporation and Precipitation
The methods in this category can be used on all types of reservoir objects. See “Evaporation and Precipitation”.
Evap and Precip Rate Specification
The methods in this category can be used on all types of reservoir objects. See “Evap and Precip Rate Specification”.
Low Flow Releases
This category is only used to add the slots necessary for low flow release calculations. These slots are generally used by a RPL function (called MeetLowFlowRequirement) to compute the low flow releases necessary to meet the low flow requirements on control point objects.
* None
This method performs no calculations and adds no slots.
* Enable Low Flow Releases
This method performs no calculations. It simply adds the Low Flow Release slot and Maximum Low Flow Delivery Rate slot.
Slots Specific to This Method
Low Flow Release
Type: Series Slot
Units: flow
Description: The portion of the Outflow that is intended to meet a low flow requirement
Information: This slot is normally computed by a RPL function (MeetLowFlowRequirement) that computes the low flow releases necessary to meet the low flow requirements on control point objects.
I/O: Usually set by a rule
Maximum Low Flow Delivery Rate
Type: Periodic Slot
Units: flow
Description: The maximum low flow delivery rate for the reservoir
Information: This value is used by the RPL function (MeetLowFlowRequirement) that determines the low flow releases from each reservoir. Low flow releases will be limited to this value.
I/O: Required input
Sediment
The Sediment category is used to enable algorithms which adjust reservoir Elevation Volume and possibly Elevation Area relationships in response to sediment inflow.
* None
The None method is the default for the Sediment category. No calculations are performed in this method. There are no slots specifically associated with this method.
* CRSS Sediment
The CRSS Sediment method is designed based on sedimentation calculations performed by the US Bureau of Reclamation’s Colorado River Simulation System (CRSS) model. This function distributes reservoir sediment based on the Empirical Area Reduction Method. Simply put, sediment is distributed through an iterative process in which a total volume loss due to sedimentation is calculated based on an assumed top of sediment elevation.
Slots Specific to This Method
Elevation Area Table
Type: Table
Units: LENGTH vs. AREA
Description: generated elevation area table for calculating sediment distribution
Information:  
I/O: Output only
Elevation Vol_Area Table Increment
Type: Table
Units: LENGTH
Description: elevation increments for the generated Elevation Volume and Elevation Area Tables
Information: This table often needs more precise elevation increments than the sediment calculation tables.
I/O: Required input
Initial Elevation Area Table
Type: Table
Units: LENGTH vs. AREA
Description: initial elevation area table
Information: Provided for comparison with initial data
I/O: Output only
Initial Elevation Volume Table
Type: Table
Units: LENGTH vs. VOLUME
Description: initial elevation volume table
Information: provided for comparison with initial data
I/O: Output only
Sediment Distribution Coefficients
Type: Table
Units: NOUNITS
Description: parameters for empirical equation governing sediment distribution
Information:  
I/O: Required input
Sediment Inflow
Type: Series
Units: VOLUME
Description: volume of sediment flowing into the reservoir at each timestep
Information:  
I/O: Required input
User Input Elev Area Data
Type: Table
Units: LENGTH vs. AREA
Description: initial Elevation Area relationship
Information: These values are initial conditions for the first timestep of the simulation. The elevation increments will be used for all sedimentation calculations.
I/O: Required input
This volume loss is recalculated (with a new top of sediment elevation) at each iteration, until the calculated volume loss is equal to the actual volume of sediment inflow (within a specified convergence). The total volume loss calculation consists of a somewhat complicated algorithm utilizing elevation/area and elevation/volume data for the reservoir and an empirical equation. The empirical equation uses user specified parameters which relate the portion of total area that is taken up by sediment to the Pool Elevation. The empirical equation basically gives the shape of the accumulated sediment. The empirical equation has a close relationship to the elevation volume and elevation area characteristics of a given reservoir. The elevation/area and elevation/volume data is stored in a polynomial coefficient table, which gets recalculated after each timestep. The actual Elevation Area, Elevation Volume tables used by RiverWare are adjusted at the end of the sedimentation code (but prior to the hydrologic simulation).
Caution:  Use care in creating input data for this method. The close relationship between the empirical area reduction equation and the shape of the reservoir (reflected in the User Input Elev Area Data) makes the method fairly sensitive to input data. When choosing empirical parameters for this method, physical characteristics of the given reservoir need to be considered. The Bureau of Reclamation currently considers four possible types of reservoirs, with each type having a corresponding set of empirical area reduction parameters. The reservoir type classification is based on the shape of the Reservoir, the manner in which the reservoir is to be operated, and the size of the sediment particles to be deposited in the reservoir. The main emphasis is on the shape. Tables are used to classify the reservoirs based on these characteristics. Once the type has been established, the parameter values for that type can also be taken from tables in the literature. An incorrect set of parameters for a given reservoir will lead to an inability to achieve convergence on the sediment distribution within this method.
Bank Storage
The methods in this category can be used on all types of reservoir objects. See “Bank Storage”.
Diversion From Reservoir
The methods in this category can be used on all types of reservoir objects. See “Diversion from Reservoir”.
Diversion Power
The methods in this category can be used on all types of reservoir objects. See “Diversion Power”.
Diversion Tailwater
The methods in this category can be used on all types of reservoir objects. See “Diversion Tailwater”.
Diversion Power Bypass
The methods in this category can be used on all types of reservoir objects. See “Diversion Power Bypass”.
Seepage
The methods in this category can be used on all types of reservoir objects. See “Seepage”.
Operating Levels
The methods in this category can be used on all types of reservoir objects. See “Operating Levels”.
Conditional Operating Levels
The methods in this category can be used on all types of reservoir objects. See “Conditional Operating Levels”.
Startup
The methods in this category can be used on all types of power reservoir objects. See “Startup”.
Head Loss
The methods in this category can be used on all types of power reservoir objects. See “Head Loss”.
Cavitation
The methods in this category can be used on all types of power reservoir objects. See “Cavitation”.
Avoidance Zones
The methods in this category can be used on all types of power reservoir objects. See “Avoidance Zones”.
Frequency Regulation
The methods in this category can be used on all types of power reservoir objects. See “Frequency Regulation”.
Dispatch Methods
Unless otherwise specified, all the following dispatch methods are available when the Pump and Release Only method is selected in the Pump and Release Accommodation category.
* solveMB_givenPumpsUsedInflow
Solves the mass balance equation when the number of pumping units is given.
Required Knowns
• Tailwater Base Value
• Inflow
Required Unknowns
• Storage
• Outflow
• Energy
The method first checks if the Canal object is linked. If the Canal has not yet solved, the dispatch method waits for it to solve before continuing. Then, the pump power calculation method is executed. Inflow, Outflow, Pump Power and Energy are solved within the pump power calculations.
Storage is solved by the mass balance equation, as follows:
The mass balance equation may include the effects of evaporation, bank storage, seepage, or precipitation depending on the selected user methods. The inflow term includes the effects of hydrologic inflow, diversion and return flow. Since the evaporation, bank storage, seepage and precipitation terms depend upon the Storage value, the mass balance solution is an iterative process. (See the note below.) Pool Elevation is calculated using the Elevation Volume Table and the calculated Storage value.
Gate setting, energy in storage, spilled energy, and future value calculations are then performed if the user has selected them. The dispatch method is then complete.
Note:  In specific cases when Storage is very close to zero, the iterative mass balance solution will follow one of two possible processes. The first process allows the loop to iterate in the negative storage range before final convergence. Convergence in this situation is typically quite rapid, and in instances when the final storage is, in fact, negative, an error is posted stating that the outflow is too large to be physically possible. This process is invoked if an additional row is appended to the Elevation Volume table specifying a negative storage value within which the loop can iterate. If specifying and allowing negative storage values in the iteration is not desired, no negative storage value should be appended to the Elevation Volume table. In this second process, the algorithm uses storage equals zero whenever it is in the negative storage range. If the outflow is really too great to be physically possible, the algorithm will keep iterating until it reaches maximum iterations. If this happens, RiverWare does a final mass balance check at the storage equals zero point and posts an error stating that the outflow is too large.
* solveMB_givenPumpedFlowInflow
Solves the mass balance equation when Inflow is known.
Required Knowns
• Inflow
Required Unknowns
• Storage
• Outflow
• Energy
The method first checks if the Canal object is linked. If the Canal has not yet solved, the dispatch method waits for it to solve before continuing. Then, the pump power calculation method is executed. Pumps Used, Outflow, Pump Power and Energy are solved within the pump power calculations.
Storage is solved by the mass balance equation, as follows:
The mass balance equation may include the effects of evaporation, bank storage, seepage, or precipitation depending on the selected user methods. The inflow term includes the effects of hydrologic inflow, diversion and return flow. Since the evaporation, bank storage, seepage and precipitation terms depend upon the Storage value, the mass balance solution is an iterative process. (See the note below.) Pool Elevation is calculated using the Elevation Volume Table and the calculated Storage value.
Gate setting, energy in storage, spilled energy, and future value calculations are then performed if the user has selected them. The dispatch method is then complete.
Note:  In specific cases when Storage is very close to zero, the iterative mass balance solution will follow one of two possible processes. The first process allows the loop to iterate in the negative storage range before final convergence. Convergence in this situation is typically quite rapid, and in instances when the final storage is, in fact, negative, an error is posted stating that the outflow is too large to be physically possible. This process is invoked if an additional row is appended to the Elevation Volume table specifying a negative storage value within which the loop can iterate. If specifying and allowing negative storage values in the iteration is not desired, no negative storage value should be appended to the Elevation Volume table. In this second process, the algorithm uses storage equals zero whenever it is in the negative storage range. If the outflow is really too great to be physically possible, the algorithm will keep iterating until it reaches maximum iterations. If this happens, RiverWare does a final mass balance check at the storage equals zero point and posts an error stating that the outflow is too large.
* solveMB_givenPumpPowerInflow
Solves the mass balance equation when Pump Power is known.
Required Knowns
• Tailwater Base Value
• Inflow
Required Unknowns
• Storage
• Outflow
• Energy
The method first checks if the Canal object is linked. If the Canal has not yet solved, the dispatch method waits for it to solve before continuing. Then, the pump power calculation method is executed. Pumps Used, Outflow, Inflow and Energy are solved within the pump power calculations.
Storage is solved by the mass balance equation, as follows:
The mass balance equation may include the effects of evaporation, bank storage, seepage, or precipitation depending on the selected user methods. The inflow term includes the effects of hydrologic inflow, diversion and return flow. Since the evaporation, bank storage, seepage and precipitation terms depend upon the Storage value, the mass balance solution is an iterative process. (See the note below.) Pool Elevation is calculated using the Elevation Volume Table and the calculated Storage value.
Gate setting, energy in storage, spilled energy, and future value calculations are then performed if the user has selected them. The dispatch method is then complete.
Note:  In cases when Storage is very close to zero, the iterative mass balance solution will follow one of two possible processes.
• The first process allows the loop to iterate in the negative storage range before final convergence. Convergence in this situation is typically quite rapid, and in instances when the final storage is, in fact, negative, an error is posted stating that the outflow is too large to be physically possible. This process is invoked if an additional row is appended to the Elevation Volume table specifying a negative storage value within which the loop can iterate.
• If specifying and allowing negative storage values in the iteration is not desired, no negative storage value should be appended to the Elevation Volume table. In this second process, the algorithm uses storage equals zero whenever it is in the negative storage range. If the outflow is really too great to be physically possible, the algorithm will keep iterating until it reaches maximum iterations. If this happens, RiverWare does a final mass balance check at the storage equals zero point and posts an error stating that the outflow is too large.
* solveMB_givenInflowHW
This dispatch routine determines if the reservoir is draining or filling, and then refers to the appropriate dispatch method for the reservoir condition.
Required Knowns
• Inflow
Required Unknowns
• Storage
• Outflow
• Energy
The method first checks if the Canal object is linked. If the Canal is linked and has not yet solved, the dispatch method waits for it to solve before continuing. If Pool Elevation is flagged TARGET, an error is posted. Target operations are not valid for the Pumped Storage Reservoir. Storage is then calculated using the Elevation Volume Table and the known Pool Elevation.
Once the checks have passed, Outflow is set equal to zero and Inflow is calculated by the mass balance equation, as follows:
The mass balance equation may include the effects of evaporation, bank storage, seepage, or precipitation depending on the selected user methods.
If the calculated value for Inflow is greater than zero, the reservoir is filling and the solveMB_givenInflow method is executed. If Inflow is less than zero, the reservoir is releasing and Outflow is set as the absolute value of Inflow. The solveMB_givenOutflow method is then executed.
* solveMB_givenInflowStorage
This dispatch routine determines if the reservoir is draining or filling, and then refers to the appropriate dispatch method for the reservoir condition.
Required Knowns
• Storage
• Inflow
Required Unknowns
• Outflow
• Energy
The method first checks if the Canal object is linked. If the Canal is linked and has not yet solved, the dispatch method waits for it to solve before continuing. If Storage is flagged TARGET, an error is posted. Target operations are not valid for the Pumped Storage Reservoir. Pool Elevation is then calculated using the Elevation Volume Table and the known Storage value.
Once the checks have passed, Outflow is set equal to zero and Inflow is calculated by the mass balance equation, as follows:
The mass balance equation may include the effects of evaporation, bank storage, seepage, or precipitation depending on the selected user methods.
If the calculated value for Inflow is greater than zero, the reservoir is filling and the solveMB_givenInflow method is executed. If Inflow is less than zero, the reservoir is releasing and Outflow is set as the absolute value of Inflow. The solveMB_givenOutflow method is then executed.
* solveMB_givenOutflowInflow
Solves the mass balance equation when Outflow is known. It is executed when the following list of knowns and unknowns are met or when it is called from either solveMB_givenHW or solveMB_givenStorage. Pump power calculations are not utilized in this method because it assumes the reservoir is only releasing water.
Required Knowns
• Outflow
• Inflow
Required Unknowns
• Energy
• Storage
The method first checks if the Canal object is linked. If the Canal is linked and has not yet solved, the dispatch method waits for it to solve before continuing. If Outflow is flagged MAX CAPACITY, it is set as the sum of the maximum spill and maximum turbine release. If this dispatch method is not being called from solveMB_givenHW or solveMB_givenStorage, Storage and Pool Elevation must be calculated from mass balance (inflow is set to zero), as follows:
The mass balance equation may include the effects of evaporation, bank storage, seepage, or precipitation depending on the selected user methods. The inflow term includes the effects of hydrologic inflow, diversion and return flow. Since the evaporation, bank storage, seepage and precipitation terms depend upon the Storage value, the mass balance solution is an iterative process. (See the note below.) Pool Elevation is calculated using the Elevation Volume Table and the calculated Storage value.
If the dispatch method is being called from solveMB_givenHW or solveMB_givenStorage, Storage and Pool elevation are already known.
The spill method is then executed followed by the power calculation method. After Turbine Release has been calculated, the spill method may be executed again if there are excess outflows.
Gate setting, energy in storage, spilled energy and future value calculations are performed if the user has selected them. The dispatch method is then complete.
Note:  In cases when Storage is very close to zero, the iterative mass balance solution will follow one of two possible processes.
• The first process allows the loop to iterate in the negative storage range before final convergence. Convergence in this situation is typically quite rapid, and in instances when the final storage is, in fact, negative, an error is posted stating that the outflow is too large to be physically possible. This process is invoked if an additional row is appended to the Elevation Volume table specifying a negative storage value within which the loop can iterate.
• If specifying and allowing negative storage values in the iteration is not desired, no negative storage value should be appended to the Elevation Volume table. In this second process, the algorithm uses storage equals zero whenever it is in the negative storage range. If the outflow is really too great to be physically possible, the algorithm will keep iterating until it reaches maximum iterations. If this happens, RiverWare does a final mass balance check at the storage equals zero point and posts an error stating that the outflow is too large.
* solveMB_givenEnergyInflow
Solves the mass balance equation when Energy is known. It assumes that there is outflow through the turbine but no inflow through the pumps.
Required Knowns
• Tailwater Base Value
• Energy
• Inflow
Required Unknowns
• Outflow
• Storage
The method first checks if the Canal object is linked. If the Canal object is linked but has not yet solved, the dispatch method waits for it to solve before continuing.
Inflow is set to zero because there is no flow entering through the pumps. Outflow and Storage must then be solved by iteration. First, the spill, tailwater, and power release calculation methods are executed. Then Outflow is calculated as the sum of Turbine Release and Spill. With the new value of Outflow, Storage is solved as follows:
The mass balance equation may include the effects of evaporation, bank storage, seepage, or precipitation depending on the selected user methods. The inflow term includes the effects of hydrologic inflow, diversion and return flow. Since the evaporation, bank storage, seepage and precipitation terms depend upon the Storage value, the mass balance solution is an iterative process. (See the note below.) Pool Elevation is calculated using the Elevation Volume Table and the calculated Storage value. The process is repeated with the new Storage value until the solution converges.
Power, gate setting, energy in storage, spilled energy, and future value calculations are performed if the user has selected them. The dispatch method is then complete.
Note:  In cases when Storage is very close to zero, the iterative mass balance solution will follow one of two possible processes.
• The first process allows the loop to iterate in the negative storage range before final convergence. Convergence in this situation is typically quite rapid, and in instances when the final storage is, in fact, negative, an error is posted stating that the outflow is too large to be physically possible. This process is invoked if an additional row is appended to the Elevation Volume table specifying a negative storage value within which the loop can iterate.
• If specifying and allowing negative storage values in the iteration is not desired, no negative storage value should be appended to the Elevation Volume table. In this second process, the algorithm uses storage equals zero whenever it is in the negative storage range. If the outflow is really too great to be physically possible, the algorithm will keep iterating until it reaches maximum iterations. If this happens, RiverWare does a final mass balance check at the storage equals zero point and posts an error stating that the outflow is too large.
* solveMB_givenPumpedFlowOutflowInflow
This method is only available when Pump and Release is selected in the Pump and Release Accommodation category. It solves the object when Pumped Flow, Outflow, and Inflow are known.
Required Knowns
• Inflow
• Outflow
Required Unknowns
• Storage
• Energy
This dispatch method checks to see if either Outflow or Pumped Flow is zero.
• If neither are zero, an error is flagged and the run is aborted because a non-zero number cannot be given to both Pumped Flow and Outflow.
• If Outflow is zero, then the reservoir is pumping and the solveMB_givenPumpedFlowInflow method is executed.
• If Pumped Flow is zero, then the reservoir is releasing and the solveMB_givenOutflowInflow method is executed.
* solveMB_givenInflowPumpAndGenEnergy
This method is available for both the Pump or Release Only, and the Pump and Release methods in the Pump and Release Accommodation category. It is used when pumping and turbine release both occur in the same timestep.
Required Knowns
• Tailwater Base Value
• Energy
• Inflow
Required Unknowns
• Outflow
• Storage
The method first checks if the Canal object is linked. If the Canal object is linked but has not yet solved, the dispatch method waits for it to solve before continuing.
An iterative procedure is used to solve for the unknowns. First, the Spill and Tailwater methods are executed. Then calculations are performed, similar to the Unit Pump Power method, which determine the Inflow and Pumps Used necessary to meet the given Pump Energy. The power release method is executed and Outflow is calculated as the sum of Turbine Release and Spill. With the new value of Outflow, Storage is solved as follows:
The mass balance equation may include the effects of evaporation, bank storage, seepage, or precipitation depending on the selected user methods. The inflow term includes the effects of hydrologic inflow, diversion and return flow. Since the evaporation, bank storage, seepage and precipitation terms depend upon the Storage value, the mass balance solution is an iterative process. (See the note below.) Pool Elevation is calculated using the Elevation Volume Table and the calculated Storage value. The process is repeated with the new Storage value until the solution converges.
Power, gate setting, energy in storage, spilled energy, and future value calculations are performed if the user has selected them. The dispatch method is then complete.
Note:  In cases when Storage is very close to zero, the iterative mass balance solution will follow one of two possible processes.
• The first process allows the loop to iterate in the negative storage range before final convergence. Convergence in this situation is typically quite rapid, and in instances when the final storage is, in fact, negative, an error is posted stating that the outflow is too large to be physically possible. This process is invoked if an additional row is appended to the Elevation Volume table specifying a negative storage value within which the loop can iterate.
• If specifying and allowing negative storage values in the iteration is not desired, no negative storage value should be appended to the Elevation Volume table. In this second process, the algorithm uses storage equals zero whenever it is in the negative storage range. If the outflow is really too great to be physically possible, the algorithm will keep iterating until it reaches maximum iterations. If this happens, RiverWare does a final mass balance check at the storage equals zero point and posts an error stating that the outflow is too large.
 
Revised: 06/03/2019