Ruleset and Policy
The ruleset implements the policy that is used to make reservoir releases and diversions from the system. The following policies apply to one or more USACE‑SWD applications. Presented is a conceptual overview. Each piece is described in detail in the document.
Surcharge Release Rules
The surcharge release calculations are executed by the reservoir object when the surcharge release flag is set on the outflow slot by a rule. Each rule sets the surcharge release flag on the outflow slot of a single reservoir object. The rules must start at the upstream end of the basin. When the surcharge release flag is set, the reservoir will dispatch during post-rule simulation if the Inflow to the reservoir is also known. During dispatching, the reservoir will compute the surcharge release forecast and set the Outflow slot for the current timestep and all other timesteps in the forecast period. These outflow values propagate via links to downstream objects and are routed using the selected routing method on any Reach objects that are encountered. When the flow values reach a downstream reservoir, that reservoir will have Inflow slot values for the forecast period. A subsequent rule will set the surcharge release flag on that reservoir resulting in dispatching. In this way, each subsequent downstream reservoir calculates the surcharge releases for the forecast period considering the routed surcharge releases from upstream reservoirs.
Flood Control Minimum Release
Using rule logic, Flood Control Minimum Release values can be set after the surcharge operation. It is up to the user to define the rule logic for these releases. These releases are considered minimums because they are made regardless of what the flood control logic computes. Once set, the releases are allowed to propagate downstream and occupy channel space.
Regulation Discharge Rule
After the above rules have executed and the releases have been routed downstream, a single rule sets the regulation discharge flag on the Reg Discharge Calculation slot for all Control Point objects. This triggers each control point to dispatch and execute the selected regulation discharge methods. Because the uncontrolled area inflow forecasts have already been computed and the surcharge releases have been routed downstream, each control point contains the total discharge at its location for each timestep in the forecast period. This information is used to appropriately compute the regulation discharge and empty space hydrographs.
Flood Control Release Rule
After the regulation discharge rule has executed, the rule to calculate the flood control releases can be executed. This rule calls the predefined FloodControl function which executes the selected Flood Control method on the Computational Subbasin. The FloodControl function returns a list of flood control releases that should be made for each reservoir at the current timestep. Also included is the outflow from each reservoir at the current timestep. The outflow is computed as the flood control release plus the surcharge release plus the flood control minimum release. The flood control rule sets the Outflow slot and Flood Control Release slot on each reservoir, at the current timestep, given the values returned by the FloodControl function. When these slots are set, it triggers each reservoir to redispatch using the new Outflow value. The reservoir objects solve, compute new storage and pool elevation values (as well as execute any user selectable methods), and the new Outflow values are routed downstream.
Low-flow Releases
Low-flow demands are specified at control points and each control point has a list of reservoirs that are used to meet a given demand. Also, each reservoir has a specified maximum delivery rate for meeting a low-flow requirement.
Once flood control is complete, then the Low-flow rule executes and calls the MeetLowFlowRequirements predefined function. This function determines the low-flow release for each reservoir serving a low-flow demand (i.e. a control point) as follows: If there is a low-flow shortage, the serving reservoirs are sorted by level in descending order. Each reservoir (beginning with the most full reservoir) makes a release until the requirement is met, the maximum low-flow release on the reservoir is met, or the reservoir reaches the bottom of the conservation pool (whichever value is lowest).
When the reservoir Outflows are set, the system resolves to route the flows downstream. The low-flow shortages will be recomputed to reflect the low-flow releases. The reservoir Operating Levels will be recomputed to reflect the new releases. Then the next rule will execute to determine the low-flow releases for the next control point.
Reservoir Diversion
Once low-flow releases have been made for all reservoirs, direct from reservoir diversions are calculated by calling the predefined function ComputeReservoirDiversions. Reservoir demands can be a water user or another reservoir. Each demand can draw from multiple reservoirs and each reservoir can act as a source for multiple water users or demand points.
The diversions from the reservoir are modeled using diversion objects while the actual demands are modeled with water user objects that compute their Diversion Request (water supply requirement). Even if the demand point is another reservoir, the demand is modeled with a Water User object (configured to have a 100% return flow which could then be sent to the demand reservoir).
When called, the ComputeReservoirDiversions function computes the diversion to each water user by visiting each reservoir (in order of highest level first) and trying to meet the diversion request but limited by maximum delivery amounts, not drawing below the conservation pool. Also, if the demand is a based on reservoir level, no diversions are made if the demand reservoir and has a higher level than the supply reservoir, or the demand reservoir is in the flood pool.
The rule sets the Supply From Reservoirs and the Incoming Available Water slots causing the water user object to solve. It then propagates values to the diversion object and the reservoir which also dispatch and solve.
Hydropower
After surcharge releases, flood control, low-flow releases, and reservoir diversions have been made, a reservoir may release additional water from its power pool to meet a specified power commitment, i.e., the Load specified for that reservoir. The hydropower rule executes the HydropowerRelease predefined function. This function tries to meet the specified or computed load but is limited to prevent the following conditions:
• The pool elevation from dropping below the minimum power pool elevation
• Releasing more than generating capacity
• The pool elevation from dropping more than the maximum allowable power pool draw down
• Additional downstream flooding
The rule sets the additional hydropower release and increases the reservoir Outflow. This causes the reservoir to redispatch and propagates the water downstream.
Fish Release
On a power reservoir, during the hours of the day when power is not generated, water may be released to meet minimum fish flows. These are called Fish Releases or QFish releases. The release of water to meet a downstream demand is determined based on the available fish water in the reservoir, the other off peak releases that are occurring and the monthly minimum fish flow demand. The fish storage in the reservoir is accounted for each timestep. Fish water is either released or is lost due to evaporation. It is replenished through the following methods: all inflow is shared, the accumulated local inflow is shared, or no inflow is shared. Also, anytime the pool exceeds the top of conservation pool, the fish storage is replenished.