MeetLowFlowRequirement

This function computes the necessary Low Flow Releases from contributing reservoirs to meet a low flow requirement at a specified control point.

Description

Computes the Low Flow Release from each reservoir so that the low flow requirement at the specified control point is met.

Type

LIST{ LIST{Slot, Value, Object}}

Arguments

Type

Meaning

1

STRING

The subbasin used to perform the calculations

2

OBJECT

The control point whose low flow requirement needs to be met

Evaluation

Returns a LIST of LISTs with the inner list containing a triplet. Each triplet is a slot (at index zero), the value to set on that slot (at index one), and the object of the slot (at index two). The function returns each Low Flow Release slot and the value to set on that slot. Also, the Outflow slot for each reservoir is returned with the new outflow value (Outflow plus Low Flow Release).

The function computes the release for each contributing reservoir. The contributing reservoirs are specified in a slot called Low Flow Reservoirs on the Control Point.

The rule executes as follows: First, the specified low flow reservoirs are sorted in descending order according to Operating Level. Reservoirs that are below the bottom of the conservation pool are excluded. Next, each reservoir (beginning with the most full reservoir) makes a release until the requirement (in the Computed Low Flow Requirement slot on the Control Point) is met, the Maximum Low Flow Delivery Rate (on the reservoir) is met, or the reservoir reaches the bottom of the conservation pool (whichever value is lowest). In addition, as each reservoir is making releases, the function calls the getMaxOutflowGivenInflow function to calculate the maximum flow that can be released from the reservoir. If the calculated low flow release is greater than this max, the release is reduced to the max.

The Low Flow Release and updated Outflow value (limited by max constraints) for each reservoir is returned by the RPL function to the calling rule. The rule sets these slots using the syntax given below. After the rule executes, the system solves and routes the values downstream.

NOTE: Each time this rule function is evaluated, it adds to the existing value in the Low Flow Release slot on reservoir objects. This is because each reservoir may contribute to the low flow requirement of more than one control point. So if the user wants to recompute all the low flow releases, they must all be reset to zero. In other words, this function is designed to execute once for each control point, adding to the Low Flow Releases made for previous control points.

Comments

A rule needs to be created for each Control Point that has a low flow requirement. Each rule will call the MeetLowFlowRequirement function for the specified Control Point. After simulating the new releases, the next rule will be executed for the next low flow Control Point.

The specified subbasin needs to include all the relevant objects (reservoirs, control points). Within the function execution, no routing of low flow releases is considered between the reservoir and the control point. But, during the simulation after the rule finishes, routing is considered. As a result, the water released may not make it to the control point on a single timestep.

Each reservoir must have the Conservation and Flood Pools method selected in the Operating Levels category.

The reservoirs specified in the Low Flow Reservoirs slot on each control point MUST be upstream of the control point. RiverWare does not check this and the results will be incorrect if the user does not enforce this. Also, no tandem operations are considered by this RPL function, i.e. the function assumes that reservoir releases can travel directly to a control point without passing through another reservoir.

Use of this function for USACE-SWD is described .

 
MeetLowFlowRequirement("Basin") where "Basin" contains Res1, Res2, and CP1.
 
{ {"Res1.Low Flow Release", 9.75 "cms", "Res1"},
{"Res1.Outflow", 9.75 "cms", "Res1"},
{"Res2.Low Flow Release", 2.35 "cms", "Res2"}
{"Res2.Outflow", 3.25 "cms", "Res2"} }
 
FOR EACH ( LIST result IN MeetLowFlowRequirement("Basin", %"CP1")) DO
( result<0> )[] = result<1>
END FOR EACH