SolveSubBasinDiversions

This function evaluates to a list of two values. The first value, is the minimum inflow to a subbasin required to satisfy all of its diversions. The second value, is the outflow from the subbasin when this minimum flow is available.

Description

Minimum Inflow required to meet all diversion requests and resulting Outflow.

Type

LIST {NUMERIC, NUMERIC}

Arguments

Type

Meaning

1

LIST

the subbasin’s Reach and Confluence objects in downstream order (can be included in a subbasin)

2

DATETIME

the timestep at which to calculate

Evaluation

The subbasin diversion requirement is originally set to zero. Each of the objects in the subbasin list is processed in the downstream order in which they are provided. If the object is a Reach, the following calculations are performed:

  • If an Aggregate Diversion Site is linked to the Reach’s Diversion slot, the NetNonShortDiversionRequirement function is executed on the diversion. This determines the diversion requirement from the Reach.
  • If an Aggregate Diversion Site is linked to the Reach’s Diversion slot, the minimum flow just below the diversion point is determined from the Reach’s Minimum Diversion Bypass slot. If this slot does not exist because of the selected User Method in the Minimum Diversion Bypass Method Category, the minimum flow requirement is zero.
  • If nothing is linked to the Diversion slot, but a value exists in the slot, this value is assumed to be the diversion requirement for this reach. In this case, there is no minimum flow requirement below the diversion point.
  • The subbasin diversion requirement is recalculated as the greater of the previous subbasin diversion requirement or the Reach diversion requirement plus the minimum flow requirement plus any cumulative upstream diversions minus any cumulative upstream return flows minus any cumulative upstream tributary inflows.
  • Any Local Inflow to the Reach is added to the cumulative tributary inflows.
  • If the Return Flow slot has a valid value, it is added to the cumulative return flows. If the Return Flow slot does not have a valid value, but a Water User or an Aggregate Diversion Site object is linked to it, the return flow is estimated. Return flow is estimated by subtracting the object’s ( Total ) Depletion Requested from its ( Total ) Diversion Requested . The estimated return flow is then added to the cumulative return flows. If Depletion Requested is not specified, it will be set equal to Diversion Requested .
 

If the object is a Confluence, the Inflow1 and Inflow2 slots are checked to determine which is the main subbasin flow and which is the tributary inflow. The objects linked to the inflow slots are checked against the last Reach object to be processed. When a match is found, the other Inflow , if valid, is added to the cumulative tributary inflows.

The loop continues until all objects in the list have been processed. The largest subbasin diversion requirement to have been calculated at any diversion point is the total subbasin diversion requirement.

Mathematical Expression

 

Comments

This function exits its calling rule with an early termination if any of the required data used to solve the diversions are unknown.

The required data is the same as that needed for the NetNonShortDiversionRequirement predefined function for each Aggregate Diversion Site along the subbasin.

This function aborts the run with an error if an object other than a Reach or Confluence is in the subbasin list. One of the Confluence Inflows must be linked to the previous Reach object upstream, or an Aggregate Reach which contains the previous Reach object upstream as its last element. If this condition is not met, the Confluence cannot determine which slot is the tributary inflow and the function aborts the run with an error.

Comments
(Cont.)

All subbasin diversion requirement calculations are performed at the given timestep. Subbasin diversion requirement will not be correct if there are lags in Reaches. This predefined function is recommended for use in long timestep models or for subbasins where there is no lag between top and bottom.

 
SolveSubBasinDiversions(ListSubbasin("AnimasBasin"), @"t")
 
{ 0.954 "cms", 0.00 "cms" }