Incremental Local Inflows

The Incremental Local Inflows category is used to calculate the incremental local inflow to control points and reservoirs within the computational subbasin given the cumulative local inflows. The three disaggregation methods are always executed in the following order:

1. Local Inflow Spatial Disaggregation

2. Local Inflow Temporal Disaggregation

3. Incremental Local Inflows, which may possibly include forecasting.

None

This method is the default for the category and should be selected when cumulative local inflow data is not used or when calculation of incremental local inflow is not desired.

There are no slots specific to this method.

Compute Full Run Incremental Local Inflows

This method, executed at the beginning of run for all timesteps in the run, calculates the incremental local inflows to all control points and reservoirs within the computational subbasin using the cumulative local inflows. There is no forecasting in this method.

There are no slots specific to this method.

Method Details

During the calculation, the Cumulative Local Inflow and Incremental Local Inflow slots on control points, the Cumulative Hydrologic Inflow and Incremental Hydrologic Inflow slots on reservoirs, and the routing methods in the intervening Reaches are accessed.

Following is a description of the solution algorithm including step-by-step descriptions. The Compute Full Run Incremental Local Inflows method on the computational subbasin will execute at the beginning of a run and will set the new Incremental Local inflow slot on control points and the new Incremental Hydrologic Inflow slot on reservoirs with an Input flag. Because these slots are not dispatch slots, no object dispatching will occur. In practice, users will perform the calculation of incremental values, then save the model and disable the subbasins related to the calculation of incremental values. Thus, in future model runs the Compute Full Run Incremental Local Inflows method will not be executed. This practice allows users to avoid the computational expense of calculating the incremental local inflows at the beginning of each run. Should users want to re-execute the Compute Full Run Incremental Local Inflows method, they should re-enable the subbasin and start a model run. The second, and subsequent times, the model is run, the calculated values that were set with an input flag will be overwritten with the new values.

The method calculates the Incremental Local/Hydrologic Inflow as the difference between a downstream control point or reservoir’s Cumulative Local/Hydrologic Inflow and the upstream control point's cumulative local inflow that is routed downstream through the intervening Reaches on that timestep. Following is the solution procedure.

Solution Steps

The method execute using the following steps; the details of these steps are described in the paragraphs below. See Figure 8.8 for an example of the computation.

1. Group all control points, reservoirs and confluences in the subbasin into { U, D } pairs, where U is a control point upstream of D, and D is U’s closest downstream control point, reservoir, or confluence. If the Ignore Reservoirs boundary method is selected, only control points and confluences are considered when creating the {U, D} pairs. For each { U, D } pair, repeat steps 2 - 5.

2. Obtain the upstream object’s Cumulative Local Inflow array (that is, all timesteps). In the forecasting case, forecast the Cumulative Local Inflow using the method selected in the Generate Forecast Local Inflow category. Store the forecasted cumulative flow in the Forecasted Cumulative Local Inflow.

3. Route the upstream object’s Cumulative Local Inflow (or Forecasted Cumulative Local Inflow for forecasting) array through the intervening Reach(es) using the routing coefficients on the Reach(es).

4. If the downstream object is a confluence, store the routed array in its unused Temp Inflow{2,1} array. If the downstream object is a control point or reservoir, calculate the downstream object’s Incremental Local/Hydrologic Inflow at timestep t by subtracting the routed cumulative local inflow arriving downstream at time t from the downstream object’s cumulative local inflow at time t. Repeat for all timesteps t.

Incrementaldownstream(t)= Cumulativedownstream(t) - Routed Cumulativeupstream(t)

5. If the downstream object is a control point or a reservoir, set the downstream object’s Incremental Local/Hydrologic Inflow slot with the Input flag.

6. Move to next { U, D } pair. If no more pairs, move to step 7.

7. Group all confluence, control points, and reservoirs in the subbasin into { U, D } pairs, where U is a confluence upstream of D, and D is U’s closest downstream control point, reservoir, or confluence. If the Ignore Reservoirs boundary method is selected, only control points and confluences are considered when creating the {U, D} pairs. For each { U, D } pair, in upstream-to-downstream (partial-) order, repeat steps 8 - 11.

8. Add the upstream confluence’s Temp Inflow 1 array to its Temp Inflow 2 array and store the value in the Cumulative Local Inflow array.

9. Route the upstream object’s Cumulative Local Inflow array through the intervening Reach(es) using the routing coefficients selected on the Reach(es).

10. If the downstream object is a confluence, store the routed array in its unused Temp Inflow{2,1} array. If the downstream object is a control point or reservoir, calculate the downstream object’s Incremental Local/Hydrologic Inflow at timestep t by subtracting the routed cumulative local inflow arriving downstream at time t from the downstream object’s cumulative local inflow at time t. Repeat for all timesteps t.

Incrementaldownstream(t)= Cumulativedownstream(t) - Routed Cumulativeupstream(t)

11. If the downstream object is a control point or a reservoir, set the downstream object’s Incremental Local/Hydrologic Inflow slot with the Input flag.

12. Move to next { U, D } pair and return to step 8.

Step 1: Grouping Objects into Upstream Control Point - Downstream Object Pairs

The first step of the Compute Full Run Incremental Local Inflows method is to create internal tables of all control points, reservoirs and confluences in the subbasin. These tables are used to create a list of all pairs of objects { U, D }, where U is a control point upstream of D, and D is U’s closest downstream control point, reservoir or confluence. If the Ignore Reservoirs boundary method is selected, only control points and confluences are considered when creating the {U, D} pairs. The computation of incremental local inflow (that is, steps 2-5) will be performed on each of these { U, D } pairs. These pairs can be processed without regard to order.

Note: Where confluences exist, the two upstream branches of the confluence must be processed prior to the downstream section of the confluence. For this reason, the Compute Full Run Incremental Local Inflows method will process all pairs with a control point upstream first (steps 2-5) and process all pairs with a confluence upstream second (steps 8-11). This ordering ensures that the proper data will be available to process the downstream section of the confluence.

Note: For the first (that is, top-most) control point in the subbasin the Cumulative Local Inflow is also the incremental local inflow, thus no incremental flow must be computed for the top-most control point.

Step 2: Obtain Upstream Cumulative Local Inflow

For each { U, D } pair (the upstream object is a control point), the Compute Full Run Incremental Local Inflows method will obtain the data for all timesteps in the upstream object’s Cumulative Local Inflow slot.

Step 3: Computation of Routing

Step 3 of the Compute Full Run Incremental Local Inflows method routes the Cumulative Local Inflow values through the intervening reaches. For this, it first finds all intervening reaches and grabs their routing coefficients, computing a composite routing vector as it goes. This assumes that all reaches use a linear routing method. Because of time lags, the routing must be done for all timesteps before moving to the next { U, D } pair.

Step 4: Calculate Incremental Local Inflow for Downstream Object

When the downstream object is a control point or a reservoir: After obtaining the upstream object’s routed cumulative local inflow, the Compute Full Run Incremental Local Inflows method will calculate the incremental local inflow at timestep t for the downstream object by subtracting the routed cumulative local inflow arriving downstream at time t from the downstream object’s Cumulative Local Inflow at time t (Eqn. 1). This is repeated for all timesteps in the Cumulative Local Inflow slot of the downstream object and the data is stored in the internal Incremental Local Inflow array. When the downstream object of the pair is a confluence: the Compute Full Run Incremental Local Inflows method does nothing at this step

Step 5: Set the Incremental Local/Hydrologic Inflow slot

The last step of processing the {Control Point, D} pairs is to set the appropriate slot(s) depending on the current pair’s downstream object type (that is, control point, reservoir or confluence). When the downstream object is a control point or a reservoir: the method will set the Incremental Local/Hydrologic Inflow slot with the Input flag to the values in the Incremental Local Inflow array. If the downstream object is reservoir, the method will set the Incremental Hydrologic Inflow slot with the Input flag to the values in the Incremental Local Inflow array. When the downstream object of the pair is a confluence: the Compute Full Run Incremental Local Inflows method stores the routed cumulative local inflow in the first unused Temp Inflow 1 or 2 slot on the confluence.

Step 6: Repeat for next pair

Step 7: Grouping Objects into Upstream Confluence- Downstream Object Pairs

After processing {Control Point, D} pairs, the Compute Full Run Incremental Local Inflows method uses its internal tables of all control points, reservoirs and confluences in the subbasin to create a list of all pairs of objects { U, D }, where U is a confluence upstream of D, and D is U’s closest downstream control point, reservoir or confluence. The computation of incremental local inflow (that is, steps 7-10) will be performed on each of these { U, D } pair. These pairs are processed in upstream-to-downstream (partial-) order. By the time any {Confluence, D} pair is processed, the confluence’s two branches will have Temp Inflow 1 or 2 arrays filled from steps 2-5 or from execution of the following steps on an upstream pair.

Step 8: Obtain Upstream Cumulative Local Inflows

For each { U, D } pair (the upstream object is a confluence), the Compute Full Run Incremental Local Inflows method will sum the Temp Inflow 1 or 2 slots to obtain the values for the Cumulative Local Inflow array. If either or both of the Temp Inflow 1 or 2 slots does not contain values (that is, one or both of the confluences upstream tributaries does not contain a control point), the values in the slot will default to 0.0.

Steps 9, 10, 11, and 12:

These steps are identical to Steps 3, 4, 5, and 6, above.

Figure 8.8 Schematic of method computation

Compute Forecast Period Incremental Local Inflows

In the forecasting case, the Compute Forecast Period Incremental Local Inflows method on the Computational Subbasin will be executed at the beginning of each timestep to set the Local Inflow on each Control Point and the Hydrologic Inflow Forecast on each reservoir. Unlike the non-forecasting case, the subbasin and these methods must remain enabled for all runs as the local inflows are calculated on each timestep and are not given an input flag. NOTE: It is important that subbasins with Compute Forecast Period Incremental Local Inflows method selected stay enabled. This is because the forecasting takes place once each timestep over the forecast period. This is different than the application of the Compute Full Run Incremental Local Inflows for which users are encouraged to execute the method only once and then disable the subbasin.

The method first forecasts the Cumulative Local/Hydrologic Inflow throughout the forecast period and then calculates the Local Inflow or Hydrologic Inflow Forecast as the difference between a downstream control point or reservoir’s Cumulative Local/Hydrologic Inflow Forecast and the upstream control point's forecasted cumulative local inflow that is routed downstream through the intervening reaches on that timestep.

There are no slots specific to this method.

Method Details

During the calculation, the Cumulative Local Inflow slots on control points, the Cumulative Hydrologic Inflow slots on reservoirs, and the routing methods in the intervening reaches are accessed. Method execution occurs at the beginning of a timestep for all enabled subbasins with the method selected.

Note: This method does not support the case where there is a routing reach directly below a confluence. Instead, insert a control point below the confluence, above the reach.

See Forecasting Incremental Local Inflows From Cumulative Flows in USACE‑SWD Modeling Techniques for details on using this method for USACE-SWD models.

Check Method Selections

First the selected method will be initialized and the subbasins will be checked for errors. The Compute Forecast Period Incremental Local Inflows method will first check that every control point and reservoir in the subbasin has a forecasting method selected. All control points and reservoirs in the subbasin must have a forecasting method selected to execute the Compute Forecast Period Incremental Local Inflows method. If some of the objects have a forecasting method selected and some do not an error message is posted. The error message will state that all objects in the subbasin must either do forecasting or none of them can. If all of the reservoirs and control points in the subbasin have a forecasting method selected then the Compute Forecast Period Incremental Local Inflows must be executed.

The algorithm is very similar to the algorithm for the existing Compute Full Run Incremental Local Inflows method except it will execute on each timestep and compute forecasted incremental inflows throughout the forecast period. Following is a description of the steps this method executes. See Solution Steps for more information, as the steps taken there are similar.

Group Pairs

The Compute Forecast Period Incremental Local Inflows method computes the forecasted incremental flows and sets the Local Inflow slot by looping through all pairs of objects in subbasin. It first groups all reservoirs, control points and confluences into {upstream, downstream} pairs and then process all {Control Point, D} pairs, next all {Reservoir, D} pairs and finally all {Confluence, D} pairs.

Note: If a reservoir is a headwater reservoir (or has no upstream objects on which the flow is cumulative), the reservoir will not get processed as it is never the downstream object in a pair. In this case, it is advisable to create a separate computational subbasin of all headwater reservoirs and select the “Reservoirs Only” method on the subbasin. See Reservoirs Only for details on this method.

Compute over Forecast Period

Instead of computing incremental values for the entire range of values in the Cumulative Local Inflow slot, the computation will be done only for the current timestep and the remaining timesteps in the forecast period.

Calculate Forecasted Cumulative Local Inflow (Reservoirs and Control Points upstream)

For the {Control Point, D} pairs and {Reservoir, D} pairs, the Compute Forecast Period Incremental Local Inflows method will call to the forecasting methods to calculate and set the slot Forecasted Cumulative Local/Hydrologic Inflow. Before calling to the forecasting method on the reservoir or control point, the method will first set the boolean argument calledFromSubbasin to TRUE. This will tell the forecasting method to recesses values of the Cumulative Local Inflow and set the Forecasted Cumulative Local/Hydrologic Inflow slot.

Route Forecasted Cumulative Local Inflow (Reservoirs and Control Points upstream)

Next, the Forecasted Cumulative Local/Hydrologic Inflow from the upstream object will be routed downstream through the intervening reaches resulting in an array of routed Forecasted Cumulative Local/Hydrologic Inflows. This step is analogous to the step in the existing Compute Full Run Incremental Local Inflows method that routes the Cumulative Local Inflow downstream.

Compute Forecasted Incremental Local Inflow (Reservoirs and Control Points upstream)

Next, the routed forecasted cumulative local/hydrologic inflow from the upstream object is subtracted from the Forecasted Cumulative Local/Hydrologic Inflow of the downstream object. This value is then entered in the Local Inflow slot (Hydrologic Inflow Forecast slot on the reservoirs if the Geometric Recession or Exponential Recession forecasting method is selected, Hydrologic Inflow slot on the reservoirs if the Coefficient and Exponent method is selected). This step is analogous to the step in the existing Compute Full Run Incremental Local Inflows method that subtracts the routed Cumulative Local Inflow of the upstream object from the Cumulative Local Inflow of the downstream object to set the Incremental Local Inflow slot.

Note: In this application the Local Inflow slot is NOT set with the input flag, whereas in the non-forecasting method, the Incremental Local Inflow is set with the input flag.

The avoid reproducing code and to work with existing functions set up for the existing Compute Incremental Local Inflows method, an internal utility function, getSlotsForComputeIncrs, is used on the reservoir and the control point. This function return three arguments: upstream slot name, downstream slot name, and target slot. This function checks method selection on the control point or reservoir and sets the three arguments.

For the control point, if a forecasting method is selected and the Compute Forecast Period Incremental Flows method is selected, the getSlotsForComputeIncrs arguments are: Forecasted Cumulative Local Inflow (up), Forecasted Cumulative Local Inflow (down), and Local Inflow (target). If no forecasting method is selected and the Compute Incremental Flows method is selected, the getSlotsForComputeIncrs arguments are: Cumulative Local Inflow (up), Cumulative Local Inflow (down), and Incremental Local Inflow (target).

For the reservoir, if the Geometric Recession or Exponential Recession forecasting method is selected and the Compute Forecast Period Incremental Flows method is selected, the getSlotsForComputeIncrs arguments are as follows:

• Forecasted Cumulative Local/Hydrologic Inflow (up)

• Forecasted Cumulative Hydrologic Inflow (down)

• Hydrologic Inflow Forecast (target)

If the Coefficient and Exponent forecasting method is selected and the Compute Incremental Flows method is selected, the getSlotsForComputeIncrs arguments are are follows:

• Forecasted Cumulative Local/Hydrologic Inflow (up)

• Forecasted Cumulative Hydrologic Inflow (down)

• Hydrologic Inflow (target)

If no forecasting method is selected and the Compute Full Run Incremental Flows method is selected, the getSlotsForComputeIncrs arguments are as follows:

• Cumulative Hydrologic Inflow (up), Cumulative Hydrologic Inflow (down)

• Incremental Hydrologic Inflow (target)

Process the Confluences

The algorithm for {Confluence, D} pairs is similar to the existing Compute Incremental Local Inflows algorithm. Instead of storing the routed Cumulative Local Inflow in the Temp Routed 1 or 2 slots on the confluence, this method will store the routed forecasted cumulative local inflow in the Routed 1 or 2 slots on the confluence. These two slots will then be summed as in the existing algorithm to calculate and set the Routed Outflow.

Revised: 08/02/2021