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

Links: Not linkable

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.

Links: Not linkable

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

Links: May be linked to the Total Diversion slot on an Agg Diversion Site or the Total delivery Request slot on an AggDistribution Canal.

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

Links: Not linkable

Elevation Volume Table

Type: Table

Units: LENGTH vs. VOLUME

Description: Reservoir Pool Elevation vs. Reservoir Storage

Information:

I/O: Required input

Links: Not linkable

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.

Links: Usually not linked

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

Links: Not linkable

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

Links: Not linkable

Hours Utilized

Type: Table Series

Units: TIME, TIME

Description: hours of the timestep spent generating energy and pumping, respectively

Information:

I/O: Output only

Links: Not linkable

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.

Links: May be linked to one or more outflow slots of upstream objects.

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.

Links: Not linkable

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

Links: Usually not linked

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.

Links: Linked to the Flow FROM Pumped Storage slot on another reservoir, or the Inflow slot on any object.

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.

Links: May be linked to Tailwater Elevation or Tailwater Base Value of an upstream object or to Elevation 1 or Elevation 2 of a Canal object.

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

Links: Not linkable

Pump Capacity

Type: Series Slot

Units: POWER

Description: maximum pumping capacity

Information:

I/O: Output only

Links: Usually not linked

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

Links: Usually not linked

Pumped Flow

Type: Series

Units: FLOW

Description: flow into the reservoir by pumping

Information:

I/O: Optional; can be input or solved for

Links: Linked to the Flow TO Pumped Storage slot on another reservoir.

Pump Power

Type: Series Slot

Units: POWER

Description: power required to run the pumps

Information:

I/O: Output only

Links: Usually not linked

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

Links: Not linkable

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

Links: Usually not linked

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.

Links: May be linked to one or more Return Flow slots on Water User objects or the Total Return Flow slot on the Agg Diversion Site objects.

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).

Links: Usually not linked

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.

Links: Usually not linked

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.

Links: 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.

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

Links: Not linkable

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

Links: Not Linkable

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.

Links: Usually not linked

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.

Links: May be linked to the Pool Elevation or Backwater Elevation of a downstream Reservoir.

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.

Links: May be linked to either the Pool Elevation slot or the Backwater Elevation slot of a downstream Reservoir.

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.

Links: May be linked to either the Pool Elevation slot or the Backwater Elevation slot of a downstream Reservoir.

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

Links: Not linkable

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

Links: Not linkable

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.

Links: May be linked to either the Pool Elevation slot or the Backwater Elevation slot of a downstream Reservoir.

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

Links: Not linkable

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

Links: Not linkable

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

Links: Not Linkable

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

Links: Not linkable

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

Links: Not linkable

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

Links: Not linkable

Spill Cost

Type: Series Slot

Units: $

Description: Future cost of energy lost due to spilled water

Information:

I/O: Output only

Links: May be linked to the Spill Cost slot on the Thermal Object.

Future Value of Used Energy

Type: Series Slot

Units: $

Description: Future value of energy used in the current timestep

Information:

I/O: Output only

Links: May be linked to Future Value of Used Energy Slot on the Thermal Object.

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

Links: May be linked

Cumulative Storage Value

Type: Series Slot

Units: $

Description: Represents the future energy value of the current Anticipated Storage

Information:

I/O: Output only

Links: May be linked to the Total Cumulative Storage Value Slot on the Thermal Object

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.

Links: Not linkable

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.

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.

Storage | Marginal Value |
---|---|

20 | 30 |

60 | 26 |

100 | 24 |

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

Links: May be linked

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

Links: May be linked

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

Links: May be linked

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

Links: Not linkable

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.

Links: Usually input or calculated but could be linked to the Outflow of any object or any other series slot.

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.

Links: Not linkable

Hydrologic Inflow Net

Type: Series

Units: FLOW

Description: sum of hydrologic Inflow and Hydrologic Inflow Adjust

Information:

I/O: Output only

Links: Not linkable

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

Links: Not linkable

Gate Setting

Type: Series Slot

Units: NONE

Description: best gate setting for the pump’s intake

Information:

I/O: Output only

Links: Usually not linked

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

Links: Not linkable

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

Links: Not linkable

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

Links: Not linkable

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

Links: Not linkable

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

Links: Not linkable

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

Links: Not linkable

Sediment Distribution Coefficients

Type: Table

Units: NOUNITS

Description: parameters for empirical equation governing sediment distribution

Information:

I/O: Required input

Links: Not linkable

Sediment Inflow

Type: Series

Units: VOLUME

Description: volume of sediment flowing into the reservoir at each timestep

Information:

I/O: Required input

Links: Not linkable

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

Links: Not linkable

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:

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.

Revised: 06/03/2019