skip to main content
Reach
Objects and Methods
Reach
The Reach object models open channel flow. It contains User Methods to control how open channel flow is modeled. With these methods, the user can choose from very simple to very complex routing equations, and include or exclude the modeling of diversion, gains or losses, return flow, inflow, the management of stage and volume calculations. The reach can solve downstream in all cases, and it can solve upstream for some Routing methods.
General Slots
Inflow
Type: Series
Units: FLOW
Description: flow rate at entrance of the object
Information:  
I/O: May be set as input or linked to another object.
Outflow
Type: Series
Units: FLOW
Description: flow rate at exit of the object
Information:  
I/O: May be set as input (for certain Routing methods) or linked to another object.
User Methods
Routing
The Routing method determines how the flow is calculated. It can also effect what dispatch methods and user categories are available for use. Some of the Routing methods may only solve downstream (for outflow), while others may solve either upstream or downstream.
* No Routing
No Routing is the default method for this category. This method involves a simple mass balance. It triggers the selection of dispatch methods which perform the actual calculations. It is the only method for which local Inflow may be calculated.
Slots Specific to This Method
Return Flow
Type: Series
Units: FLOW
Description: return flow into the reach
Information: Enters at the bottom of the reach (i.e. is added directly to the outflow calculated by the method).
I/O: Optional; if not input and not linked, it is set to zero.
The calculations are executed by the dispatch methods solveNRInflow, solveNROutflow, and solveNRLocalInflow.
* Time Lag
Inflows are lagged by a specified time to calculate outflows. This method can be solved upstream or downstream and therefore causes dispatching with either a known inflow or a known outflow. The lagtime can be any length of time.
Slots Specific to This Method
LagTime
Type: Scalar
Units: TIME
Description: lagtime or travel time of a flow change through the reach
Information:  
I/O: Required input
Following is a sample equation for Outflow:
where (-1) means the value at the previous timestep.
Following is the equation for flow fraction:
This method can also solve for inflow, given outflow.
Note:  It is possible to set up a combination of input values for inflow and outflow which do not match. This will cause an error. An error will also result if the timestep is 1 Month and the Lag Time is not in months, or if the timestep is not 1 Month and the Lag Time is in months.
* Variable Time Lag
Behaves similarly to Time Lag routing except that the Lag Time is allowed to vary as a function of the day of the year and the flow rate. This method may only solve downstream.
Slots Specific to This Method
Return Flow
Type: Series
Units: FLOW
Description: return flow into the reach
Information: Enters at the bottom of the reach (i.e. is added directly to the outflow calculated by the method).
I/O: Optional; if not input and not linked, it is set to zero.
Variable Lag Time
Type: Series
Units: TIME
Description: value of the Lag Time interpolated from the Variable LagTime Table.
Information:  
I/O: Output only
Variable LagTime Table
Type: Table
Units: TIME VS. Flow VS. TIME
Description: a table relating the day of the year, flow rate, and the lag time
Information: Data must be entered in blocks of increasing flow for each given day for the interpolation method to work correctly. January 1 is represented by a 1, February 1 as 32, etc. Following is an example table.
 
Day of Year
Flow Rate
Lag Time
1
500
1.0
1
550
.9
1
600
.8
32
500
2.0
32
550
1.7
32
600
1.5
60
500
2.1
60
550
1.9
60
600
1.6
I/O: Required input
This method executes when the Inflow is known for the current timestep. The Inflow value is then used to calculate the Variable Lag Time. Outflow values can then be solved for at the timesteps corresponding to the Variable Lag Time. Following is a sample calculation:
where flowFrac1 and flowFrac2 to are calculated by the following equations:
In these equations, the integer value of a number means that the number is truncated after the decimal point with no rounding.
Since the lag time can vary with every timestep, it possible that more the one Inflow can contribute to a particular Outflow. Return Flow and Total Gain Loss may then be added to the calculated Outflow value.
* Impulse Response
This function solves for the outflow from a reach given inflow.
Slots Specific to This Method
Lag Coeff
Type: Table
Units: NO UNITS
Description: impulse response coefficients
Information:  
I/O: Required input
Num. of Coeff
Type: Scalar
Units: NO UNITS
Description: number of impulse response coefficients
Information:  
I/O: Required input
Return Flow
Type: Series
Units: FLOW
Description: return flow into the reach
Information: Enters at the bottom of the reach (i.e. is added directly to the outflow calculated by the method).
I/O: Optional; if not input and not linked, it is set to zero.
There must be the same number of values in the Lag Coeff table as the value given in Num of Coeff in order to successfully dispatch at any timestep. If any needed value is invalid, an error will occur, and the run will stop.
The general equation for this method is as follows:
Note:  If a new value is set for Inflow at a given timestep, the reach will re-dispatch to solve for a new Outflow at that timestep only. It will not, in general, re-solve for Outflow at every timestep that is affected by the new Inflow. For example, say the Outflow at timestep t is a function of the Inflow at t, t - 1, and t - 2. If a new Inflow value is set at timestep t - 2, the reach will redispatch and solve for a new Outflow at t - 2, but it will not re-dispatch at timesteps t - 1 and t. Thus the final Outflow values at t - 1 and t will not correspond to the updated Inflow value at t - 2. If this type of redispatching across multiple timesteps is required, the Step Response routing method should be used; see “Step Response”.
* Step Response
The step response method is a simple routing method which computes outflow for the current timestep and future timesteps given inflow values. The total number of outflows computed will be equal to the number of lag coefficients. The outflow will be computed as the sum of the routed inflows plus whatever sources or sinks may be available.
Slots Specific to This Method
Return Flow
Type: Series
Units: Flow
Description: return flow into the reach
Information: Enters at the bottom of the reach (i.e. is added directly to the outflow calculated by the method).
I/O: Optional; if not input and not linked, it is set to zero
Lag Coeff
Type: Table
Units: No Units
Description: step response coefficients
Information: The number of Lag Coefficients must be equal to the value in the Num. of Coeff slot.
I/O: Required input
Num. of Coeff
Type: Scalar Slot
Units: No Units
Description: number of step response coefficients
I/O: Required Input
The general calculations for this method are very similar to the Impulse Response routing method.
1. First, the outflow for the current timestep is calculated.
2. The method will then move on to the first future outflow. At this stage, outflow will be computed using the same equation only now, t will be incremented to t+1, t-1 incremented to t, etc. The total Gain Loss term will be the Total Gain Loss for timestep t+1.
3. In the situation where the method is looking for an inflow for a timestep that is actually past the current timestep and this value is not valid, this inflow will be assumed to be zero. If the inflow is not valid for a previous timestep, the calculation will exit and the method will move on to the next future timestep.
* Variable Step Response
The Variable Step Response method is a variation of the Step Response routing method which computes outflow for the current timestep and future timesteps given inflow values. The total number of outflows computed will be equal to the number of lag coefficients. The outflow will be computed as the sum of the routed inflows plus whatever sources or sinks may be available. In the Step Response method, a single set of lag coefficients is used. In the Variable Step Response method, multiple sets of lag coefficients are used dependent on the inflows to the reach.
Slots Specific to This Method
Return Flow
Type: Series
Units: Flow
Description: return flow into the reach
Information: Enters at the bottom of the reach (i.e. is added directly to the outflow calculated by the method).
I/O: Optional; if not input and not linked, it is set to zero
Variable Lag Coefficients
Type: Table Slot
Units: Column Map Values - Flow, Table values - No Units
Description: A table defining the step response coefficients for each inflow threshold is shown.
Information: This table has a Column Map which means that each column has an associated numerical value (with units). This numerical value is displayed on as the column label. Columns are added and deleted from this table using the Column menu with the following options: Set Number of Columns, Append Column, Delete Column and Delete Last Column. User units, scale, type, and precision for the Column Map (i.e. the column heading values) are defined in the unit scheme for Flow unit types. Column map values are set from the Column, Set Column Value menu option. When a column value is changed, the columns will re-order to ensure that the column values are increasing left to right. The sum of coefficients in each column should equal 1.0. This can easily be verified by adding a summary row at the bottom of the table using the View, Show Column Sum Row menu option. When used in the Variable Step Response method, the column map values are used as a stair step lookup, e.g. an Inflow of 500cfs uses the first column, an inflow of 10,000cfs uses the second column, and an inflow of 120,000cfs uses the third column. Therefore, the column map values need not bound the highest expected flows; flows greater than the largest column map value use the right most column.
Note:  The left-most set of coefficients should represent the minimum flow in the reach.
I/O: Required Input
This Routing method is executed from the SolveOutflow dispatch method, i.e. it only solves for the Outflow given the Inflows, not vice versa.
Note:  Local Inflows are added to the top of the reach and are routed with the Inflows.
In the following, Inflow refers to the sum of the Inflow and Local Inflow slot. The variable ncoeff is the number of rows in the Variable Lag Coefficients slot. The outflows will be calculated using the following algorithm:
For each t from (t = 0, i.e current timestep) to (t = current timestep + (ncoeff - 1))
End for
Each C coefficient is selected from the appropriate column of the Variable Lag Coefficients slot based on the value of the Inflow with which it is multiplied. For a particular evaluation of the equation, the sum of the coefficients does not necessarily equal 1.0. But, mass is preserved over time. Using the above sample table, if the Inflow at the current timestep t, is 12,000cfs and the Inflow at t-1 is 8,000cfs, C0 is 0.30 and C1 is 0.35 using the above table.
If the method is looking for an inflow for a timestep that is actually past the current timestep and the value is not valid, this inflow will be assumed to be zero. If the inflow is not valid for a previous timestep, the calculation will exit the method without calculating an outflow, post a warning message, and move on to the next timestep.
* Muskingum
The Muskingum method is a simple storage routing method which solves for the propagation of flow waves based on a lag time and attenuation factor.
Note:  This method must have Inflow and Outflow known at the timestep before the first routing timestep.
The Muskingum method only allows for one routing segment, but allows for Local Inflows, Diversions, and Return Flow. The Muskingum with Segments method (described next) allows for multiple segments, but no Diversions, Local Inflows, or Return Flows.
Slots Specific to This Method
Return Flow
Type: Series
Units: FLOW
Description: return flow into the reach
Information: Enters at the bottom of the reach (i.e. is added directly to the outflow calculated by the method).
I/O: Optional; if not input and not linked, it is set to zero.
Following is the general equation for this method:
where outflow and outflow(-1) are the current and previous outflows respectively as with inflow and inflow(-1).
* Muskingum with Segments
Following is the general equation for this method:
where Outflow and Outflow(-1) are the current and previous outflows respectively as with Inflow and Inflow(‑1).
You can further discretize the reach into n sub-reaches for better control over attenuation.
Note:  The routing parameters (either directly as C0,C1,and C2 or as K and X) are specified by the Routing Parameters category and the same parameters are used for each segment in the reach.
This routing method is called from the Solve Outflow dispatch method. That is, when Muskingum with Segments is selected, the only dispatch method is Solve Outflow. This routing method also includes optional Bank Storage, Gain Loss, Outflow Adjust, and Stage calculations.
Note:  All these calculations occur after the routing has occurred, based on the routed flow.
Slots Specific to This Method
Number of Segments in Reach
Type: Scalar
Units: None
Description: Number of segments
Information: This parameter determines the number of columns in the Segment Outflow table. In the equations below, the number of segments is represented by the variable n.
I/O: Required input
Outflow by Segment
Type: Agg Series
Units: FLOW
Description: Segment outflow. The segments are numbered upstream to downstream. The Outflow to one segment is the inflow to the next segment.
Information: The outflow from the reach is the outflow from the last segment. The columns in this slot will be resized to the number of segments input by the user, and the number of rows will be the number of timesteps in the run. At the beginning of the run, if the initial timestep Outflow by Segment is not known, the Outflow by Segment is set to the Reach Inflow or Outflow, if known.
Information: Input at Initial timestep, Output at other timesteps
I/O: Output only
Method Details
First, the method checks the following:
1. The current timestep’s inflow is checked. It should be known or the dispatch method would not have been called.
2. If the previous Inflow is not known, the method exits and waits.
3. The Outflow by Segment from the previous timestep is checked for validity. If they are all valid from previous solutions, they are used directly and the method continues. If any of the Outflow by Segment are not valid, the following checks are made:
a. If the Outflow is not known and the last Outflow by Segment is known, then Outflow is set to that value. All other Outflow by Segments are also set to that value.
b. If the Outflow is not known, Outflow and each Outflow by Segment is set equal to the Inflow and the routing method exits. This scenario can occur the first time the reach dispatches. This situation is used when you would like the initial Outflow = Inflow.
c. If the Outflow is known (input or set by a rule), each Outflow by Segment is set equal to the Outflow and the method exits. This scenario can occur the first time the reach dispatches and achieves the need where initial Outflow is specified.
4. Then, the method executes the selected method in the Routing Parameters category to determine the C0,C1,and C2 parameters. These C0,C1,and C2 are used by each segment in the reach.
5. Next, the method sets up arrays of the variables I and O with the known information. The arrays have 2 rows (timesteps) and n columns (segments).
Note:  I(t, 1) = Inflow. Table 23.1 shows the array with the variables. Those next to each other are set to the same value, for example O(t-1,2) = I(t-1,3).
 
Table 23.1  Diagram of discretization for a three-segment reach
Timestep
Reach
Segment 1
Segment 2
Segment3
Reach
t-1
Inflow(t-1)
I(t-1,1)
O(t-1,1)
I(t-1,2)
O(t-1,2)
I(t-1,3)
O(t-1,3)
Outflow(t-1)
t
Inflow(t)
I(t,1)
O(t,1)
I(t,2)
O(t,2)
I(t,3)
O(t,3)
Outflow(t)
6. Next, loop over each segment and compute the outflow for each segment upstream to downstream:
For (j=1 to Number of Segments)
Compute the Outflow from this segment
Set the inflow value for the next segment, I(t,j+1) = O(t,j)
End For
7. Set the slot Outflow by Segment[t,j] to the values stored in the O array.
8. Execute Reach Bank Storage and Reach GainLoss method using the routed flow (Outflow in the last segment)
9. Set the Reach Outflow equal to the last segment’s outflow plus Bank Storage Return flow plus Total Gain Loss.
10. Execute the selected Outflow Adjustment method and reset Outflow if necessary
* Kinematic
This hydraulic routing method is a finite difference solution of the kinematic wave simplification to the St. Venant Equations. It requires a numerical grid to be specified by the user. The numerical approximation tends to result in a negative mass balance error (reaches lose water) in test models. To reduce the mass balance error, CADSWES recommends using the Kinematic Improved method; see “Kinematic Improved”.
Slots Specific to This Method
Delta X Computational Element Length
Type: Scalar
Units: LENGTH
Description: size of the x discretization
Information: This slot must be smaller than the Reach Length
I/O: Required input
Distributed Depth Output
Type: Table Series
Units: LENGTH
Description: depth at upstream end of each element
Information: This value is calculated by the selected Depth to Flow method after calculating the Distributed Flow Output for the current segment at the current timestep.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Celerity Output
Type: Table Series
Units: VELOCITY
Description: celerity(wave speed) at upstream end of each elements
Information: This value is calculated by the selected Depth to Flow method after calculating the Distributed Flow Output for the current segment at the current timestep. Celerity from the previous timestep is used to calculate Distributed Flow Output at the current timestep.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Flow Output
Type: Table Series
Units: FLOW
Description: inflow value at the upstream end of each element
Information: This value is calculated using Celerity from the previous timestep at the current element according to the equation in step 1 below.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed TopWidth Output
Type: Table Series
Units: LENGTH
Description: width of top of water surface
Information: This value is calculated by the selected Depth to Flow method after calculating the Distributed Flow Output for the current segment at the current timestep.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Velocity Output
Type: Table Series
Units: VELOCITY
Description: velocity at upstream end of each element
Information: This value is calculated by the selected Depth to Flow method after calculating the Distributed Flow Output for the current segment at the current timestep.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Volume Output
Type: Table Series
Units: VOLUME
Description: volume contained in each element
Information: The volume in each segment is calculated as follows. Because this routing method is a numerical approximation, the segment outflow values will contain numerical error. This numerical error will accumulate in the Distributed Volume Output calculations. Thus this slot can be used to evaluate the overall mass balance error when using the Kinematic method.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Xsectional Area Output
Type: Table Series
Units: AREA
Description: area at upstream end of each element
Information: This value is calculated by the selected Depth to Flow method after calculating the Distributed Flow Output for the current segment at the current timestep.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Numerical Parameters Output
Type: Table
Units: VARIOUS
Description: Columns describing grid and Courant number of each element for the current timestep
Information: The rows of this table store the value of the Courant number with respect to distance. The number of rows used is based on the discretization parameters defined by the user, Number of each Length/Delta X. The number of rows in this table is currently limited to 500; therefore, the number of computational elements for each reach must not be greater than 500, i.e. Delta X must not be less than Reach Length/500. The first two columns are computed at the beginning of run. The Courant number is computed and updated every time the reach dispatches and routes the flow.
I/O: Output only
Reach Length
Type: Scalar
Units: LENGTH
Description: total length of the reach, from upstream to downstream.
Information: This slot must be larger than Delta X
I/O: Required input
Return Flow
Type: Series
Units: FLOW
Description: return flow into the reach
Information: Enters at the bottom of the reach (i.e. is added directly to the outflow calculated by the method).
I/O: Optional; if not input and not linked, it is set to zero.
The solution is a nonlinear numerical approximation to the following continuity and momentum equations.
Continuity
Momentum
For this numerical solution, accuracy increases as the Courant number approaches unity and decreases as the Courant number diverges from unity. The Courant number for each numerical grid section for the current timestep can be observed in the Numerical Parameters Output under the column labeled Courant. The Courant number is calculated as follows:
where c = wave celerity [L/T], t = routing time step[T], and x = spatial step size[L].
This hydraulic routing method also requires the user to select from another category of user selectable methods, Depth to Flow. The inputs for these methods are described under that user method category.
In the following method, a superscript refers to the timestep, and a subscript refers to the spatial location (element number) within the reach, upstream to downstream.
Note:  This method is restricted to using a non-zero Inflow for the initial timestep. The Kinematic Improved method does not have this restriction; see “Kinematic Improved”.
1. At the start of the run this method sets all columns of the Distributed Flow Output at the initial timestep (Start Timestep - 1) equal to the initial Reach Inflow (i.e. the flow is the same at every element). It then calls the selected Depth to Flow method to calculate all flow parameters for each element at the initial timestep.
2. For each timestep within the run, it first sets the flow for the first element, as follows:
3. If Diversion or Local Inflow are not used, they are set to zero.
4. Then the selected Depth to Flow method is called calculate all flow parameter values for the first element using . The values are set in the first column of the Distributed Output table series slots.
5. The method then loops over all remaining elements in the reach, upstream to downstream, to carry out the finite difference approximation in the following steps.
a. Calculate the flow in the given element using the finite difference approximation of the kinematic wave simplification to the St. Venant Equations, which has the following form:
(This equation is a rearrangement of equation 9.6.6 in Chow et. al., 19881 with a small modification to the calculation of celerity.)
b. Call the selected Depth to Flow method to calculate flow parameters using . The values are set in the Distributed Output table series slots. The primary value returned is the celerity (wave speed), .
c. Calculate the Distributed Volume Output, the volume of water within the element, as follows:
6. After calculating flow at the final element, all gains, losses and Return Flow are added to the final element flow to give the total Reach Outflow.
* Kinematic Improved
This hydraulic routing method is a finite difference solution of the kinematic wave simplification to the St. Venant Equations. It requires a numerical grid to be specified by the user. The Kinematic Improved method is very similar to the Kinematic method. The only difference is in the flow value used to calculate celerity and other distributed output values for each element in the reach as detailed below. This formulation allows for a smaller Delta X Computational Element Length, which in turn reduces overall mass balance error when compared to the Kinematic method.
Slots Specific to This Method
Delta X Computational Element Length
Type: Scalar
Units: LENGTH
Description: size of the x discretization
Information: This slot must be smaller than the Reach Length
I/O: Required input
Distributed Depth Output
Type: Table Series
Units: LENGTH
Description: depth at upstream end of each element
Information: This value is calculated by the selected Depth to Flow method using the average of the previous timestep flow at the current element and the current timestep flow at the upstream element.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Celerity Output
Type: Table Series
Units: VELOCITY
Description: celerity(wave speed) at upstream end of each elements
Information: This value is calculated by the selected Depth to Flow method using the average of the previous timestep flow at the current element and the current timestep flow at the upstream element.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Flow Output
Type: Table Series
Units: FLOW
Description: inflow value at the upstream end of each element
Information:  
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed TopWidth Output
Type: Table Series
Units: LENGTH
Description: width of top of water surface
Information: This value is calculated by the selected Depth to Flow method using the average of the previous timestep flow at the current element and the current timestep flow at the upstream element.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Velocity Output
Type: Table Series
Units: VELOCITY
Description: velocity at upstream end of each element
Information: This value is calculated by the selected Depth to Flow method using the average of the previous timestep flow at the current element and the current timestep flow at the upstream element.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Volume Output
Type: Table Series
Units: VOLUME
Description: volume contained in each element
Information: The volume in each segment is calculated as follows. Because this routing method is a numerical approximation, the segment outflow values will contain numerical error. This numerical error will accumulate in the Distributed Volume Output calculations. Thus this slot can be used to evaluate the overall mass balance error when using the Kinematic Improved method. The mass balance error can be reduced by reducing the size of Delta X Computational Length.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Xsectional Area Output
Type: Table Series
Units: AREA
Description: area at upstream end of each element
Information: This value is calculated by the selected Depth to Flow method using the average of the previous timestep flow at the current element and the current timestep flow at the upstream element.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Numerical Parameters Output
Type: Table
Units: VARIOUS
Description: Columns describing grid and Courant number of each element for the current timestep
Information: The rows of this table store the value of the Courant number with respect to distance. The number of rows used is based on the discretization parameters defined by the user, Number of each Length/Delta X. The number of rows in this table is currently limited to 500; therefore, the number of computational elements for each reach must not be greater than 500, i.e. Delta X must not be less than Reach Length/500. The first two columns are computed at the beginning of run. The Courant number is computed and updated every time the reach dispatches and routes the flow.
I/O: Output only
Reach Length
Type: Scalar
Units: LENGTH
Description: total length of the reach, from upstream to downstream.
Information: This slot must be larger than Delta X
I/O: Required input
Return Flow
Type: Series
Units: FLOW
Description: return flow into the reach
Information: Enters at the bottom of the reach (i.e. is added directly to the outflow calculated by the method).
I/O: Optional; if not input and not linked, it is set to zero.
The solution is a nonlinear numerical approximation to the following continuity and momentum equations.
Continuity
Momentum
For this numerical solution, the total mass balance error will decrease as the Delta X Computational Element Length (x) decreases (number of segments increases). Decreasing x will reduce the dispersion in the numerical solution, resulting in higher peaks and lower valleys in the Reach Outflow. Decreasing x will also increase the Courant number. The Courant number for each numerical grid section for the current timestep can be observed in the Numerical Parameters Output under the column labeled Courant. The Courant number is calculated as follows:
where c = wave celerity [L/T], t = routing time step[T], and x = spatial step size[L].
This hydraulic routing method also requires the user to select from another category of user selectable methods, Depth to Flow. The inputs for these methods are described under that user method category.
In the method description below, a superscript refers to the timestep, and a subscript refers to the spatial location (element number) within the reach, upstream to downstream.
At the start of the run this method sets all columns of the Distributed Flow Output at the initial timestep (Start Timestep - 1) equal to the initial Reach Inflow (i.e. the flow is the same at every element). It then calls the selected Depth to Flow method to calculate all flow parameters for each element at the initial timestep.
For each timestep within the run, it first sets the flow for the first element, as follows:
If Diversion or Local Inflow are not used, they are set to zero.
Then the selected Depth to Flow method is called calculate all flow parameter values for the first element using . The values are set in the first columns of the Distributed Output table series slots.
The method then loops over all remaining elements in the reach, upstream to downstream, to carry out the finite difference approximation in the following steps.
a. Calculate the temporary flow value to use for flow parameter calculations.
b. Call the selected Depth to Flow method to calculate flow parameters using flowTemp. The values are set in the Distributed Output table series slots. The primary value returned is the celerity (wave speed), .
c. Calculate the flow in the given element using the finite difference approximation. This finite difference scheme is an implicit backward difference solution of the kinematic wave simplification to the St. Venant Equations and has the following form:
(This equation is a rearrangement of equation 9.6.6 in Chow et. al., 19882. Celerity is substituted using equation 9.3.11.)
d. Calculate the Distributed Volume Output, the volume of water within the element, as follows:
After calculating flow at the final element, all gains, losses and Return Flow are added to the final element flow to give the total Reach Outflow.
* Muskingum-Cunge
This hydraulic routing method uses the Muskingum routing equation, but with X and K coefficients that are physically based, as an approximation to the diffusive flow equations.
Background
The standard form of the Muskingum equation is as follows:
When applied to a spatially distributed grid, the flow in grid i is as follows:
where t is the incremental timestep at which the calculation is occurring. In the standard Muskingum-Cunge equation, C0, C1, and C2 are functions of the Courant number C and Reynolds number D.
    
C and D are calculated as follows:
  
Q is the grid’s flow, So is the Energy Slope, c is the wave celerity, and Tw is the top width of the channel calculated for the given flow Q. The wave celerity c and Tw are found using the selected Depth to Flow method for the flow, Q, at the appropriate timestep (see “Depth to Flow” for details). The incremental timestep is specified by the user while the spatial distribution is calculated to keep the Courant number close to 1 for the reference discharge.
Slots Specific to This Method
Delta X Computational Element Length
Type: Scalar
Units: LENGTH
Description: size of the x discretization
Information: This slot is determined by the method, while it is input by the user for the other hydraulic routing methods.
I/O: Output only
Distributed Celerity Output
Type: Table Series
Units: VELOCITY
Description: celerity(wave speed) at each elements
Information: The value displayed in each row is the value for the last incremental timestep for each run timestep.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Depth Output
Type: Table Series
Units: LENGTH
Description: depth of each element
Information: The value displayed in each row is the value for the last incremental timestep for each run timestep.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Flow Output
Type: Table Series
Units: FLOW
Description: flow value of each element
Information: The 0th column represents the flow to be routed (Inflow + Local Inflow - Diversion). The last column represents the routed flow and is copied to the outflow. This is actually the flow for the last incremental timestep and is NOT an average over the timestep.
Note:  In the iteration, the method uses the current (t) and next timestep (t+1) rows to store the previous and current values: current row = previous incremental timestep, next row = current incremental timestep. At the end of each incremental timestep, the value is copied from the next timestep’s row to the current timestep’s row. The only effect visible to the user of this iteration mechanism is that the last row of the table is the same as the last minus one row; the last row is beyond the end of the run and can be ignored.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed MuskingumCunge Output
Type: Table
Units: VARIOUS
Description: holds output parameters of routing method.
Information: C0, C1, C2 are all reported here for the current timestep, along with D, C+D, X and K.
I/O: Output only.
Distributed TopWidth Output
Type: Table Series
Units: LENGTH
Description: width of top of water surface
Information: The value displayed in each row is the value for the last incremental timestep for each run timestep.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Velocity Output
Type: Table Series
Units: VELOCITY
Description: velocity of each element
Information: The value displayed in each row is the value for the last incremental timestep for each run timestep.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Volume Output
Type: Table Series
Units: VOLUME
Description: volume contained in each element
Information: The value displayed in each row is the value for the last incremental timestep for each run timestep.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Xsectional Area Output
Type: Table Series
Units: AREA
Description: area of each element
Information: The value displayed in each row is the value for the last incremental timestep for each run timestep.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Energy Slope
Type: Scalar
Units: NO UNITS
Description: slope of the reach from upstream to downstream (vertical/horizontal)
Information: Must be positive, used to calculate the routing distance step
I/O: Required input
Extreme Flow Values
Type: Table
Units: FLOW
Description: base and max flow values expected during simulation run
Information: Used for calculation of the routing distance step
I/O: Required input
Numerical Parameters Output
Type: Table
Units: VARIOUS
Description: Columns describing grid and Courant number of each element for the current timestep
Information: The rows of this table store the value of the Courant number with respect to distance. The number of rows used is based on the discretization parameters, Number of each Length/Delta X. The number of rows in this table is currently limited to 500.
I/O: Output only
Reach Length
Type: Scalar
Units: LENGTH
Description: total length of the reach, from upstream to downstream.
Information:  
I/O: Required input
Return Flow
Type: Series
Units: FLOW
Description: return flow into the reach
Information: Enters at the bottom of the reach (i.e. is added directly to the outflow calculated by the method).
I/O: Optional; if not input and not linked, it is set to zero.
Routing Time Step
Type: Table
Units: TIME
Description: timestep used by method, in the equations below
Information: This must be smaller than the simulation timestep. The value should be larger than the estimated time of travel for a wave through the reach. It must result in an exact integer number of routing timesteps per simulation timestep.
I/O: Required input
Max Iterations
Type: Scalar Slot
Units: none
Description: This values specifies the maximum number of iterations used by convergence algorithm to compute the reach outflow.
I/O: Input; defaults to 20 if not set by the user
Method Details
The spatial distribution is automatically calculated by RiverWare. The incremental spatial step is determined such that the Courant number, C, will be close to one to reduce the effects of numerical dispersion. Since the discharge will vary for a simulation, the Courant number will also vary. To pick a value for the incremental spatial step that minimizes the effects of numerical dispersion, the user inputs maximum and minimum discharges expected for a simulation in the Extreme Values slot. The average of these two discharges is used as the reference discharge. The wave celerity, c, is then computed with this reference discharge using the selected Depth to flow; see “Depth to Flow” for details. The spatial step size, is computed with the input and the Courant number, C set to be 1.0.
The scheme is unconditionally stable for 0.0 <= X <= 0.5 or with D (cell Reynolds number) values less than unity. The cell Reynolds number, D, is defined as the ratio of hydraulic diffusivity to grid diffusivity, as follows:
where Q is the grid’s flow, So is the Energy Slope, c is the wave celerity, and Tw is the top width of the channel calculated for the given flow Q. Tw is found using the selected Depth to Flow method. X is related to D as follows:
The value of D for each numerical grid section for the current timestep can be observed in the Distributed MuskingumCunge Output table under the column labeled D.
Note:  In this method if the flow result is very small or negative, C and D become 1, and X becomes 0.0. If the above equation for C0 results in a negative value, C and D are set to 1, and C0 is set to 0.
The value of C + D for each numerical grid section for the current timestep can be observed in the Distributed MuskingumCunge Output table under the column labeled C + D.
Method Steps
The method proceeds as follows.
1. Calculate the total inflow for the timestep (i.e. the inflow plus local inflow minus diversion) to the reach.
2. The method loops through the incremental timesteps, t, and the spatial grid, i, to find the flow at each element  as follows.
a. FOR EACH incremental timestep, t
The inflow at each incremental timestep is determined by interpolating between the inflow for the previous day and the inflow for the current day. This is then set on the 0th column of the Distributed Flow Output slot
b. FOR EACH spatial step, i, in the grid
1. Estimate the flow using the three point method.
2. Using this flow, call the selected Depth to Flow method to determine ct, Twt, At.
3. Calculate and .
If the flow is zero, set and equal to 1.0.
4. If the following does not hold true: 0.0 <= <= 0.5, issue an error and stop the run. The scheme is not stable.
5. Calculate C0, C1, and C2.
  
6. Calculate a new using the Muskingum equation.
7. If the new is within convergence of the old , go to the next spatial step, otherwise determine a new using a four point scheme, as follows:
8. Return to step 2 and repeat until the flow, , converges.
c. END FOR loop over spatial step, i
d. Compute Distributed Volume Output for each element in the reach as the previous incremental timestep’s Distributed Volume Output plus the average spatial flow in the reach.
e. END FOR loop over incremental timestep, t
3. Using the value in the last column of the Distributed Flow Output slot, execute the bankstorage and gain loss calculations, add in Return Flow, and execute negative outflow adjustment calculations. Each may add or subtract water from the reach. Set the resulting flow on the Outflow slot.
4. Finally, compute and set the Total Outflow Storage as the sum of the previous Total Outflow Storage plus the Outflow converted to a volume.
Note:  To assure the routing parameters are appropriately computed for the given inflow, the reference flow along with corresponding values for the wave celerity and top width are used to compute new values for the cell Reynolds number, D, and the Courant number, C at each timestep. However, changing C and D values in the middle of a simulation results in a volume conservation error. Test results show that this error can be significant for sharply rising and falling hydrograph but the total volume conservation error over a flood event is less than 1%. See “Muskingum-Cunge Improved” for details on a similar method that better conserves mass.
* Muskingum-Cunge Improved
This hydraulic routing method is an improvement to the Muskingum-Cunge method in which the coefficients are adjusted to better conserve mass as proposed by Todini, 20073.
Background
The standard form of the Muskingum equation is as follows:
When applies to a spatially distributed grid, the flow in grid i is as follows:
where t is the incremental timestep at which the calculation is occurring. In the standard Muskingum-Cunge equation, C0, C1, and C2 are functions of the Courant number C and Reynolds number D.
    
C and D are calculated as follows:
  
Q is the grid’s flow, So is the Energy Slope, c is the wave celerity, and Tw is the top width of the channel calculated for the given flow Q. The wave celerity c and Tw are found using the selected Depth to Flow method for the flow, Q, at the appropriate timestep (see “Depth to Flow”). The incremental timestep is specified by the user while the spatial distribution is calculated to keep the Courant number close to 1 for the reference discharge.
In the variable parameter, Muskingum-Cunge routing method, the cell Reynolds number, D, and the Courant number, C change at each timestep for each cell. Changing C and D values in the middle of a simulation results in a volume conservation error and storage inconsistency at steady state as shown by Todini. See “Muskingum-Cunge” for details.
To mitigate this loss of mass, Todini rederived the equations (not shown) and calculated the coefficients as follows:
    
Where C* and D* are the corrected Courant number and Reynolds number, respectively, as follows:
  
  
  
The Muskingum-Cunge Improved method is an implementation of this scheme. Although Todini proposed relationships to define the channel parameters for common channel geometry, this method uses an iterative 3 and 4 point scheme and the selected Depth to Flow method to determine these same parameters (area, top width, depth, velocity, and celerity).
In addition, the reach inflow is used as the inflow to each incremental timestep. The Outflow is an average of the outflow over each incremental timestep. Full details of this method follow the slot descriptions.
Slots Specific to This Method
Delta X Computational Element Length
Type: 1X1 table slot
Units: Length
Description: size of the spatial discretization
Information: This slot is determined by the method, while it is input by the user for the other hydraulic routing methods.
I/O: Output only
Distributed Celerity Output
Type: Table Series Slot
Units: Velocity
Description: celerity(wave speed) at each of the elements
Information: The value displayed in each row is the value for the last incremental timestep for each run timestep.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Courant Output
Type: Table Series Slot
Units: None
Description: The adjusted Courant value (C*) for each element in the reach.
Information: The value displayed in each row is the value for the last incremental timestep for each run timestep.
Note:  In the iteration, the method uses the current and next timestep rows to store the previous and current values: current row = previous incremental timestep, next row = current incremental timestep. At the end of each incremental timestep, the value is copied from the next timestep’s row to the current timestep’s row. The only effect visible to the user of this iteration mechanism is that the last row of the table is the same as the last minus one row; the last row is beyond the end of the run and can be ignored.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Depth Output
Type: Table Series Slot
Units: Length
Description: depth of each element
Information: The value displayed in each row is the value for the last incremental timestep for each run timestep.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Flow Output
Type: Table Series Slot
Units: Flow
Description: Flow value of each element in the reach.
Information: The 0th column represents the flow to be routed (Inflow + Local Inflow - Diversion). The last column represents the routed flow; but the flow value displayed in each row is the flow in the last incremental timestep for each run timestep. This is not necessarily the same as the average over the run timestep. The Routed Flow slot holds this average over the incremental timesteps and is then used in subsequent calculations on the reach.
Note:  In the iteration, the method uses the current and next timestep rows to store the previous and current values: current row = previous incremental timestep, next row = current incremental timestep. At the end of each incremental timestep, the value is copied from the next timestep’s row to the current timestep’s row. The only effect visible to the user of this iteration mechanism is that the last row of the table is the same as the last minus one row; the last row is beyond the end of the run and can be ignored.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed MuskingumCunge Output
Type: Table
Units: Various
Description: holds output parameters of routing method.
Information: C0, C1, C2 are all reported here for the current timestep, along with D, C+D, X and K.
Note:  C and D are also stored in the Distributed Courant Output and Distributed Reynolds Output slots.
I/O: Output only
Distributed Previous Flow Output
Type: Table Series Slot
Units: Flow
Description: The Distributed Flow Output offset by one timestep
Information: This slot is used to store the previous distributed flow so that if the reach dispatch more than once, the distributed flow is not lost. The value displayed in each row is the value for the last incremental timestep for each run timestep.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Reynolds Output
Type: Table Series Slot
Units: None
Description: The adjusted Reynolds number (D*) for each element in the reach
Information: The value displayed in each row is the value for the last incremental timestep for each run timestep.
Note:  In the iteration, the method uses the current and next timestep rows to store the previous and current values: current row = previous incremental timestep, next row = current incremental timestep. At the end of each incremental timestep, the value is copied from the next timestep’s row to the current timestep’s row. The only effect visible to the user of this iteration mechanism is that the last row of the table is the same as the last minus one row; the last row is beyond the end of the run and can be ignored.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed TopWidth Output
Type: Table Series Slot
Units: Length
Description: width of top of water surface
Information: The value displayed in each row is the value for the last incremental timestep for each run timestep.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Velocity Output
Type: Table Series Slot
Units: Velocity
Description: velocity of each element
Information: The value displayed in each row is the value for the last incremental timestep for each run timestep.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Volume Output
Type: Table Series Slot
Units: Volume
Description: volume contained in each spatial element of the reach
Information: The value displayed in each row is the value for the last incremental timestep for each run timestep. This volume is the end of timestep value.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Distributed Xsectional Area Output
Type: Table Series Slot
Units: Area
Description: area of each element
Information: The value displayed in each row is the value for the last incremental timestep for each run timestep.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Energy Slope
Type: Scalar
Units: No Units
Description: slope of the reach from upstream to downstream (vertical/horizontal)
Information: Must be positive
I/O: Required input
Extreme Flow Values
Type: 1X1 Table
Units: Flow
Description: base and max flow values expected during simulation run.
Information: Used for calculation of the routing distance step
I/O: Required input
Max Iterations
Type: 1X1 Table Slot
Units: none
Description: This values specifies the maximum number of iterations used by convergence algorithm to compute the reach outflow.
I/O: Input; defaults to 20 if not set by the user
Numerical Parameters Output
Type: Table
Units: Various
Description: Columns describing grid and Courant number of each element for the current timestep
Information: The rows of this table store the value of the Courant number with respect to distance. The number of rows used is based on the discretization parameters, Number of each Length/Delta X. The number of rows in this table is currently limited to 500.
I/O: Output only
Previous Outflow
Type: Series Slot
Units: Flow
Description: Previous Outflow
Information: This is the outflow from the reach, offset by one timestep
I/O: Output only
Reach Length
Type: 1X1 Table Slot
Units: Length
Description: total length of the reach, from upstream to downstream.
Information:  
I/O: Required input
Reach Volume
Type: Series Slot
Units: Volume
Description: The volume of water in the reach at the end of the timestep.
Information: This volume is calculated as the sum of the Distributed Volume Output for each row. It is the sum of water over each spatial step along the reach.
I/O: Output only
Return Flow
Type: Series Slot
Units: Flow
Description: return flow into the reach
Information: Enters at the bottom of the reach (i.e. is added directly to the Routed Flow calculated by the method).
I/O: Optional; if not input and not linked, it is set to zero.
Routed Flow
Type: Series Slot
Units: Flow
Description: The flow in the reach after routing has occurred but before gain/loss, return flow or bankstorage is added.
Information: This is calculated by averaging the downstream most distributed outflow from the reach over each of the incremental timesteps
I/O: Output only
Routing Time Step
Type: 1X1 Table Slot
Units: Time
Description: timestep used by method, in the equations below
Information: This must be smaller than the simulation timestep. The value should be larger than the estimated time of travel for a wave through the reach. It must result in an exact integer number of routing timesteps per simulation timestep.
I/O: Required input
Total Outflow Storage
Type: Series Slot
Units: Volume
Description: Cumulative volume of outflow throughout the run.
Information: It is calculated as the previous Total Outflow Storage plus the Outflow converted to a volume
I/O: Output only
Method Details
The incremental timestep is related to the spatial distribution as follows:
Since the discharge varies for a simulation, the Courant number will also vary. To pick a value for the incremental spatial step that minimizes the effects of numerical dispersion, the user inputs minimum and maximum discharges expected for a simulation in the Extreme Flow Values slot. The average of these two discharges is used as the reference discharge when computing the wave celerity, c, using the selected Depth to Flow method. Then, the incremental spatial step is determined with the Courant number, C, set equal to 1.0 to reduce the effects of numerical dispersion.
Note:  This routing method loops over the incremental timestep which must be smaller than the run timestep. The values displayed in the Distributed Output slots are the values for the last incremental timestep. The incremental values are strictly internal and there is no way to show the values for intermediate incremental timesteps.
The method proceeds as follows.
1. Calculate the inflow (i.e. the inflow plus local inflow minus diversion) to the reach and set the flow in the 0th column of the Distributed Flow Output slot equal to this flow. This same inflow value is used for each incremental timestep (no interpolation is used as in the original, as this leads to a further mass inconsistency; see “Muskingum-Cunge”). Using this inflow, call the selected Depth to Flow method to determine c, Tw, and At. Calculate and using those values. Set the 0th column of the appropriate table series slot.
2. The method loops through the incremental timesteps, t, and the spatial grid, i, to find the flow at each element  as follows.
3. FOR EACH incremental timestep, t
a. FOR EACH spatial step, i, in the grid
1. Estimate the flow using the three point method.
2. Using this flow, call the selected Depth to Flow method to determine ct, Twt, At.
3. Calculate and where .
If the flow is zero, set and equal to 1.0.
4. If the following does not hold true: 0.0 <= <= 0.5, issue an error and stop the run. The scheme is not stable.
5. Calculate C0, C1, and C2.
    
Note:   and are from the previous incremental timestep and were stored in the appropriate cell of the respective table series slot.
6. Calculate a new using the Muskingum equation.
7. If the new is within convergence of the old , go to the next spatial step, otherwise determine a new using a four point scheme.
8. Return to step 2 and repeat until the flow, , converges. Once convergence occurs, set a temporary variable tempOutflowVolume to track the total volume of outflow (last column of the Distributed Flow Output slot, i.e. the bottom of the reach). Add to this total volume at each incremental timestep.
b. END FOR loop over spatial step, i
c. Compute Distributed Volume Output for each element in the reach, as follows:
4. END FOR loop over incremental timestep, t.
5. Next, the Routed Flow is calculated as the average outflow over the incremental timesteps. This is calculated by dividing the tempOutflowVolume by the run timestep. Then, sum up the Distributed Volume Output over space (i.e. a given row) and set this value on the Reach Volume slot.
6. Using the Routed Flow, execute the bankstorage and gain loss calculations, add in Return Flow, and execute negative outflow adjustment calculations. Each may add or subtract water from the reach. Set the resulting flow on the Outflow slot.
7. Finally, compute and set the Total Outflow Storage as the sum of the previous Total Outflow Storage plus the Outflow converted to a volume.
This method was implemented to achieve better mass conservation but is not guaranteed to fully conserve mass. Because the user selects the Extreme Flow values and Routing Timestep, there are circumstances where flow is not fully conserved. This is especially true when there are abrupt flow changes and flows that are zero. Testing has shown that mass is fully conserved in well behaved problems but not necessarily in real-world problems. Regardless, the mass conservation is much better than the original routing method.
* MacCormack
This hydraulic routing method is a finite difference solution of the kinematic wave simplification to the St. Venant Equations. It requires a numerical grid to be specified by the user.
Slots Specific to This Method
Delta X Computational Element Length
Type: Scalar
Units: LENGTH
Description: size of the x discretization
Information: This slot must be smaller than the Reach Length.
I/O: Required input
Distributed Celerity Output
Type: Table Series
Units: VELOCITY
Description: celerity(wave speed) at upstream end of each elements
Information: This is a temporary slot that is not saved in the model file.
I/O: Output only
Distributed Depth Output
Type: Table Series
Units: LENGTH
Description: depth at upstream end of each element
Information: This is a temporary slot that is not saved in the model file.
I/O: Output only
Distributed Flow Output
Type: Table Series
Units: FLOW
Description: inflow value at the upstream end of each element
Information: This is a temporary slot that is not saved in the model file.
I/O: Output only
Distributed TopWidth Output
Type: Table Series
Units: LENGTH
Description: width of top of water surface
Information: This is a temporary slot that is not saved in the model file.
I/O: Output only
Distributed Velocity Output
Type: Table Series
Units: VELOCITY
Description: velocity at upstream end of each element
Information: This is a temporary slot that is not saved in the model file.
I/O: Output only
Distributed Volume Output
Type: Table Series
Units: VOLUME
Description: volume contained in each element
Information: This is a temporary slot that is not saved in the model file.
I/O: Output only
Distributed Xsectional Area Output
Type: Table Series
Units: AREA
Description: area at upstream end of each element
Information: This is a temporary slot that is not saved in the model file.
I/O: Output only
Numerical Parameters Output
Type: Table
Units: VARIOUS
Description: Columns describing grid and Courant number of each element for the current timestep
Information: The rows of this table store the value of the Courant number with respect to distance. The number of rows used is based on the discretization parameters defined by the user, Number of each Length/Delta X. The number of rows in this table is currently limited to 500; therefore, the number of computational elements for each reach must not be greater than 500; that is, Delta X must not be less than Reach Length/500.
I/O: Output only
Reach Length
Type: Scalar
Units: LENGTH
Description: total length of the reach, from upstream to downstream.
Information: This slot must be larger than Delta X
I/O: Required input
Return Flow
Type: Series
Units: FLOW
Description: return flow into the reach
Information: Enters at the bottom of the reach (i.e. is added directly to the outflow calculated by the method).
I/O: Optional; if not input and not linked, it is set to zero.
Routing Time Step
Type: Table
Units: TIME
Description: timestep used by method
Information: This must be smaller than the simulation timestep. The value should be larger than the estimated time of travel for a wave through the reach.
I/O: Required input
The solution is a nonlinear numerical approximation to the following continuity and momentum equations.
Continuity
Momentum
For this numerical solution, accuracy increases as the Courant number approaches unity and decreases as the Courant number diverges from unity. The Courant number for each numerical grid section for the current timestep can be observed in the Numerical Parameters Output under the column labeled Courant. The Courant number is calculated as follows:
where c = wave celerity [L/T], t = routing time step[T], and x = spatial step size[L].
This hydraulic routing method also requires the user to select from another category of user selectable methods: Depth to Flow. The inputs for these methods are described under that user method category.
The algorithm uses is a predictor corrector scheme that is unstable for a Courant number greater than unity. The advantage of this scheme is that it is second order accurate and can minimize numerical diffusion. The general equations for this method are as follows.
Predictor
Corrector
* Storage Routing
This method is a simple storage method that solves for outflows given current and previous inflow values. The reach is broken up into a user-specified number of linked segments and flows are calculated for each segment.
Note:  This method is based on an empirical formula that uses a numeric approximation; therefore the method does not guarantee that mass balance will be preserved exactly.
Slots Specific to This Method
Number of Segments in Reach
Type: Scalar
Units: NOUNITS
Description: number of segments upstream to downstream
Information: This will determine the number of columns in the Segment Outflow table as well.
I/O: Required input
Segment Outflow
Type: Table Series
Units: FLOW
Description: segment outflow
Information: The outflow from the reach is the outflow from the last segment. The columns in this table will be resized to the number of segments input by the user, and the number of rows will be the number of timesteps in the run.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Storage Time Coefficient
Type: Scalar
Units: NOUNITS
Description: value that is divided by the result of the average flow and exponent to arrive at time in storage
Information: The units of this slot should be Volumeexponent (a value should be used that is in (ft3)exponent). This coefficient may be determined by trial and error, and should not be negative. The value must correspond to a flow value in cfs and storage time in hours, regardless of the user units on other slots.
I/O: Required input
Storage Time Exponent
Type: Scalar
Units: NOUNITS
Description: exponent of mean flow value.
Information: Usually between -1 and 1. The value must correspond to a flow value in cfs and storage time in hours, regardless of the user units on other slots.
I/O: Required input
The algorithm proceeds as follows.
1. If the previous Inflow value is not known, the method exits.
2. The outflow value for each segment from the previous timestep is checked for validity. There are then three possible scenarios:
– If the segment outflows are not valid and previous Outflow is not valid, Outflow is set equal to inflow plus gain loss and the method exits.
– If the segment outflows are not valid, and previous Outflow is valid, set all segment outflows equal to previous Inflow, and continue the routing method.
– If the segment outflows are valid, continue the method.
3. Find the mean interior flow from the previous timestep as the average of all segment outflows.
4. Find the time of storage in the reach based on the following empirical formula(in cfs).
where storagetime is the time of storage in hours; coefficient and exponent are user input constants in the slots above; and meanfl is the average interior flow of the previous timestep.
Note:  The storagetime calculation is always made with meanfl in units of cfs regardless of the user units on any flow slots. The values for Storage Time Coefficient and Storage Time Exponent should be set accordingly.
The time in storage can be used as a conversion from storage to outflow.
5. Find the number of routing phases, n. If the time of storage is greater than half of the simulation timestep, n is 1. Otherwise, n is calculated as follows:
If n is greater than 48 from this equation, n is set to 6.
6. The inflow into the first segment for each routing phase is calculated as follows:
7. For each routing phase, the outflow from each segment is calculated as follows:
This routing equation is based on the storage-outflow relation, storagetime, from above, and the continuity equation.
8. The inflow into the next segment is the average of the segments previous and current outflows
9. The current timestep’s Outflow for the object is equal to the last segment’s outflow.
* Variable Storage Routing
This method is a simple storage method that solves for outflows given current and previous inflow values. The reach is broken up into a user-specified number of linked segments and flows are calculated for each segment. This method differs from the Storage Routing method only in the determination of the storagetime value. In this method, the storage time exponent and coefficient are found from a table lookup based on flow instead of constant values.
Note:  This method is based on an empirical formula that uses a numeric approximation; therefore the method does not guarantee that mass balance will be preserved exactly.
Slots Specific to This Method
Flow Range
Type: Table
Units: FLOW
Description: the ranges of flow rates corresponding to the Variable Storage Time Tables
Information: The number of flow ranges allowed in this table is currently limited to 10. The columns of this table represent, in ascending order, the maximum flow rate for a specific flow range starting with 0 as the base. These columns are labeled Flow Range 1 - 10. Therefore, the first column represents a range of flows from 0 to the value input by the user in the Flow Range 1 column. The last flow range entered by the user should be a flow rate greater than any anticipated for the simulation. Otherwise, a value of 0.0 will be used for the Variable Storage Time slots for flows outside of this range. It is not necessary to utilize all 10 columns of this table. Use only the columns needed to designate the desired flow ranges.
I/O: Required input
Number of Segments in Reach
Type: Scalar
Units: NOUNITS
Description: number of segments upstream to downstream
Information: This will determine the number of columns in the Segment Outflow table as well.
I/O: Required input
Segment Outflow
Type: Table Series
Units: FLOW
Description: segment outflow
Information: The outflow from the reach is the outflow from the last segment. The columns in this table will be resized to the number of segments input by the user, and the number of rows will be the number of timesteps in the run.
I/O: Output only - This is a temporary slot that is not saved in the model file.
Variable Storage Time Coefficient
Type: Series
Units: NOUNITS
Description: value that is divided by the result of the average flow and exponent to arrive at time in storage
Information: The units of this slot should be Volumeexponent (a value should be used that is in (ft3)exponent).
I/O: Output only
Variable Storage Time Coefficient Table
Type: Table
Units: NOUNITS
Description: Variable Storage Time Coefficient for each specific Flow Range
Information: The columns of the table correspond to the flow ranges defined in Flow Range. The values must correspond to a flow value in cfs and storage time in hours, regardless of the user units on other slots.
I/O: Required input
Variable Storage Time Exponent
Type: Series
Units: NOUNITS
Description: exponent of mean flow value.
Information: Usually between -1 and 1.
I/O: Output only
Variable Storage Time Exponent Table
Type: Table
Units: NOUNITS
Description: Variable Storage Time Exponent for each specific Flow Range
Information: The columns of the table correspond to the flow ranges defined in Flow Range. The values must correspond to a flow value in cfs and storage time in hours, regardless of the user units on other slots.
I/O: Required input
The algorithm proceeds as follows.
1. If the previous Inflow value is not known, the method exits.
2. The outflow value for each segment from the previous timestep is checked for validity. There are then three possible scenarios:
– If the segment outflows are not valid and previous Outflow is not valid, Outflow is set equal to inflow plus gain loss and the method exits.
– If the segment outflows are not valid, and previous Outflow is valid, set all segment outflows equal to previous Inflow, and continue the routing method.
– If the segment outflows are valid, continue the method.
3. Find the mean interior flow from the previous timestep as the average of all segment outflows.
4. Find the time of storage in the reach based on the following empirical formula(in cfs).
where storagetime is the time of storage in hours; coefficient and exponent are user input constants in the slots above; and meanfl is the average interior flow of the previous timestep.
Note:  The storagetime calculation is always made with meanfl in units of cfs regardless of the user units on any flow slots. The values in the Variable Storage Time Coefficient Table and Variable Storage Time Exponent Table should be set accordingly.
The time in storage can be used as a conversion from storage to outflow.
5. Find the number of routing phases, n. If the time of storage is greater than half of the simulation timestep, n is 1. Otherwise, n is calculated as follows:
If n is greater than 48 from this equation, n is set to 6.
6. The inflow into the first segment for each routing phase is calculated as follows:
7. For each routing phase, the outflow from each segment is calculated as follows:
This routing equation is based on the storage-outflow relation, storagetime, from above, and the continuity equation, as follows:
8. The inflow into the next segment is the average of the segments previous and current outflows
9. The current timestep’s Outflow for the object is equal to the last segment’s outflow.
* Modified Puls
The Modified Puls algorithm solves for the Reach Outflow given current and previous Inflow and Storage values using the following continuity equation, as follows:
Rewritten, this equation is as follows:
The equation has two unknowns, Storage and Outflow, both on the left side. In the Modified Puls method, the user specifies a tabular relationship of Storage versus Outflow in the Storage Outflow Table. Given this table of data, the set of Storage and Outflow can be found to satisfy the equation.
You can further discretize the reach into n sub-reaches for better control over the attenuation of the flood wave. The Storage Outflow Table is specified for the entire reach. Therefore, during the solution, the Storage in each subreach is assumed to be 1/n of the total storage. Each subreach is assumed to be identical and uniform.
This routing method is called from the Solve Storage Routing Outflow dispatch method. That is, when Modified Puls is selected, the only available dispatch method is Solve Storage Routing Outflow. This dispatch method solves downstream and includes optional Bank Storage, Gain Loss, Outflow Adjust, Stage, and Volume calculations.
Note:  All these calculations occur after the routing has occurred, based on the routed flow.
Slots Specific to This Method
Number of Segments in Reach
Type: Scalar
Units: None
Description: Number of segments
Information: This parameter determines the number of columns in the Segment Outflow table. The travel time through a segment should be approximately equal to the timestep size. An estimate is to divide the reach length by the product of the wave celerity and timestep size. In the equations below, the number of segments is represented by the variable n.
I/O: Required input
Outflow by Segment
Type: Agg Series
Units: FLOW
Description: Segment outflow. The segments are numbered upstream to downstream. The Outflow to one segment is the inflow to the next segment.
Information: The outflow from the reach is the outflow from the last segment. The columns in this slot will be resized to the number of segments input by the user, and the number of rows will be the number of timesteps in the run. At the beginning of the run, if the initial timestep Outflow by Segment is not known, the Outflow by Segment is set to the Reach Inflow or Outflow, if known.
Information: Input at Initial timestep, Output at other timesteps
I/O: Output only
Storage by Segment
Type: Agg Series
Units: Volume
Description: Segment storage. The segments are numbered upstream to downstream, left to right.
Information: The columns in this table will be resized to the number of segments input by the user, and the number of rows will be the number of timesteps in the run.
I/O: Output only
Storage Outflow Table
Type: Table
Units: Volume vs Flow
Description: The table relating Storage in the entire reach to the Outflow.
Information: The data must be monotonically increasing and cover the entire range of storage and flow values expected.
I/O: Input only
Storage Outflow Indication Table
Type: Table
Units: Volume vs Flow vs Flow
Description: This generated table repeats the Storage Outflow Table and then shows a third column for the Indication variable.
Information: This table is generated at the beginning of run by looking up each Storage and Outflow on the Storage Outflow Table. These become the first and second columns. The third column, the Indication, is computed by looking up each row’s Storage and Outflow and then computing the value.
Information: Thus, the Indication is for a single segment. All segments are assumed to be the same. In addition, the timestep length is assumed to be constant.
I/O: Output only. This table is read only.
Method Details
First, the method checks the following.
1. The current timestep’s inflow is checked. It should be known or the dispatch method would not have been called.
2. If the previous Inflow is not known, the method exits and waits.
3. The Outflow by Segment from the previous timestep is checked for validity. If they are all valid from previous solutions, they are used directly and the method continues. If any of the Outflow by Segment are not valid, the following checks are made:
a. If the Outflow is not known and the last Outflow by Segment is known, then Outflow is set to that value. All other Outflow by Segments are also set to that value.
b. Else, if the Outflow is not known, Outflow and each Outflow by Segment is set equal to the Inflow and the routing method exits. This scenario can occur the first time the reach dispatches. This situation is used when you would like the initial Outflow = Inflow.
c. If the Outflow is known (input or set by a rule), each Outflow by Segment is set equal to the Outflow and the method exits. This scenario can occur the first time the reach dispatches and achieves the need where initial Outflow is specified.
4. If the previous Storage values for each segment are not known, the method computes the previous Storage from the Storage Outflow Table.
5. Next, the method sets up arrays of the variables I, S, and O with the known information. The arrays will have 2 rows (timesteps) and n columns (segments).
Note:  I(t, 1) = Inflow. Table 23.2 shows the array with the variables. Those next to each other are set to the same value, for example O(t-1,2) = I(t-1,3).
 
Table 23.2  Diagram of discretization for a three-segment reach
Timestep
Reach
Segment 1
Segment 2
Segment3
Reach
t-1
Inflow(t-1)
I(t-1,1)
S(t-1,1)
O(t-1,1)
I(t-1,2)
S(t-1,2)
O(t-1,2)
I(t-1,3)
S(t-1,3)
O(t-1,3)
Outflow(t-1)
t
Inflow(t)
I(t,1)
S(t,1)
O(t,1)
I(t,2)
S(t,2)
O(t,2)
I(t,3)
S(t,3)
O(t,3)
Outflow(t)
6. Next, loop over each segment and compute the outflow and storage for each segment upstream to downstream:
For (j=1 to Number of Segments)
Compute the StorOutIndication variable.
If StorOutIndication is less than zero, reset it to zero.
Look up the StorOutIndication on the Storage Outflow Indication Table to find the Storage and Outflow.
Record the values found as S(t,j) and O(t,j).
Set the inflow value for the next segment, I(t,j+1) = O(t,j)
End For
7. Set the slots Storage by Segment[t,j], Outflow by Segment[t,j] to the values stored in the arrays.
8. Execute Reach Bank Storage and Reach GainLoss method using the routed flow (Outflow in the last segment)
9. Set the Reach Outflow equal to the last segment’s outflow plus Bank Storage Return flow plus Total Gain Loss.
10. Execute the selected Outflow Adjustment method and reset Outflow if necessary
11. Return to the Solve Storage Routing Outflow dispatch method.
Routing Parameters
This method category is dependent upon the selection of Muskingum outing in the Routing category. It enables the user to specify either the Muskingum K and X values or the C0, C1 and C2 coefficients. There is also the option of providing this data as a times series.
* None
This is the default method. It performs no calculations. An error is posted in the beginning of the run if this method is selected.
* Input K and X Values
This method is used to specify constant Muskingum K and X values.
Slots Specific to This Method
MuskingumCoefficientK
Type: Scalar Slot
Units: TIME
Description: lag time of the centroid of a flood wave
Information:  
I/O: Required input
MuskingumCoefficientX
Type: Scalar Slot
Units: NONE
Description: attenuation factor
Information:  
I/O: Required input
The Muskingum Coefficient K and Muskingum Coefficient X are used to calculated the C0, C1 and C2 coefficients by the following equations:
where t is the simulation timestep, K[Time] and X[no units] are the Muskingum coefficients.
* Input Coefficients
This method is used to input the characteristic Muskingum coefficients directly. The coefficients are not allowed to vary with time.
Slots Specific to This Method
C0 C1 C2 Coefficients
Type: Table
Units: NOUNITS
Description: a table containing the three characteristic Muskingum coefficients
Information: A value for each coefficient is given in the first three columns of the table.
I/O: Required input
The values in the C0, C1, C2 Coefficients slot are used directly in the Muskingum routing calculations.
* Input Time Series K and X
This method is used to specify time variable data for K and X.
Slots Specific to This Method
Muskingum K Time Series
Type: Series
Units: TIME
Description: lag time of the centroid of a flood wave
Information:  
I/O: Required input
Muskingum X Time Series
Type: Series
Units: NONE
Description: attenuation factor
Information:  
I/O: Required input
The K value and X value are used to calculate the C0, C1, C2 coefficients by the following equations:
where t is the simulation timestep, K[Time] and X[no units] are the Muskingum coefficients.
* Input Time Series Coefficients
This method is used to specify the characteristic Muskingum coefficients as a time series.
Slots Specific to This Method
C0 Time Series
Type: Series
Units: NOUNITS
Description: a time series range of C0 values
Information:  
I/O: Required input
C1 Time Series
Type: Series
Units: NOUNITS
Description: a time series range of C1 values
Information:  
I/O: Required input
C2 Time Series
Type: Series
Units: NOUNITS
Description: a time series range of C2 values
Information:  
I/O: Required input
The C0, C1, C2 values are used directly in the Muskingum routing calculations.
Local Inflow and Solution Direction
The Local Inflow and Solution Direction methods determine how the Local Inflow is calculated. This method category is available for all routing methods except Storage Routing and Variable Storage Routing. This category can also affect how the simulation dispatches (the solution direction). The user can limit what dispatch methods are available.
* No Local Inflow, Solve Inflow or Outflow
This method is the default for the category, and should be selected when modeling of local inflow is not desired and the model should be able to solve for either inflow or outflow. There are no slots specifically associated with this method.
* Specify Local Inflow, Solve Inflow or Outflow
This method treats Local Inflow as an optional input. It is not available for the Storage Routing or Variable Storage Routing methods.
When this method is selected, the Generate Local Inflows category becomes visible. Within this category, methods are available to generate the Local Inflow.
Slots Specific to This Method
Local Inflow
Type: Series
Units: FLOW
Description: local inflow into the reach
Information: Local Inflow is added to Inflow then the resulting flow is routed. Local Inflow is not included in the calculation of Available for Diversion.
I/O: Optional; if this slot is not linked and not input, it is set to zero.
Local Inflow Adjust
Type: Series
Units: FLOW
Description: adjustment made to the local inflow
Information: Only used with the No Routing method. The functionality of this slot is discussed in the No Routing dispatch methods.
I/O: Output only
* Solve Inflow, Outflow or Local Inflow
This method is only available for the No Routing method, and allows local inflow to be a third variable in the Routing method. This method changes the dispatch conditions for the No Routing method so that two of the following parameters; Inflow, Outflow and Local Inflow must be known to solve for the third.
Slots Specific to This Method
Local Inflow
Type: Series
Units: FLOW
Description: local inflow into the reach
Information:  
I/O: Optional; if this slot is not input, it will be solved for when both Inflow and Outflow are known. If it is input, when either Inflow or Outflow are known, the other will be solved for.
Local Inflow Adjust
Type: Series
Units: FLOW
Description: adjustment made to the local inflow
Information: Only used with the No Routing method when Outflow or Local Inflow are solved for. The functionality of this slot is discussed in the No Routing dispatch methods.
I/O: Optional
* Contingent Local Inflow or Solve Outflow
This method is only available for the No Routing method, and allows local inflow to be a third variable in the Routing method when inflow and outflow are both known. This method changes the dispatch conditions for the No Routing method, so that either Inflow and Outflow must be known to solve for Local Inflow, or Inflow must be known to solve for the Outflow (and Local Inflow is assumed to be zero). This method is designed to allow for the use of non-continuous gaged data for reconciliation when it is available. It may be used by supplying Inflow for all timesteps, and supplying gage data at an object below the reach when it is available as outflow, and leaving the unknown data as NaN.
Slots Specific to This Method
Local Inflow
Type: Series
Units: FLOW
Description: local inflow into the reach
Information:  
I/O: Optional; if this slot is not input but inflow and outflow are known, it will be solved for. If outflow is not known, the reach will solve for outflow given inflow assuming local inflow is zero. Or, the slot can be input and the reach will solve for outflow given inflow and local inflow.
Local Inflow Adjust
Type: Series
Units: FLOW
Description: adjustment made to the local inflow
Information: This slot is only used with the No Routing method.
I/O: Optional
* Solve Local Inflow or Outflow
This method is only available for the No Routing method, and allows local inflow to be a third variable in the Routing method when inflow and outflow are both known. This method changes the dispatch conditions for the No Routing method, so that either Inflow and Outflow must be known to solve for Local Inflow, or Inflow and Local Inflow must be known to solve for the Outflow.
Slots Specific to This Method
Local Inflow
Type: Series
Units: FLOW
Description: local inflow into the reach
Information:  
I/O: Optional; if this slot is not specified but inflow and outflow are known, it will be solved for. Or, the slot can be specified and the reach will solve for outflow given inflow and local inflow.
Local Inflow Adjust
Type: Series
Units: FLOW
Description: adjustment made to the local inflow
Information: This slot is only used with the No Routing method.
I/O: Optional
* Specify Local Inflow, Solve Outflow
This method is available for the No Routing and Time Lag routing methods, and allows Local Inflow to be a second variable in the Routing method when Inflow is known. This method changes the available dispatch conditions. For the No Routing method, the available dispatch method is solveNROutflow. For Time Lag routing, the available dispatch method is solveTLOutflowDSOnly.
When this method is selected, the Generate Local Inflows category becomes visible. Within this category, methods are available to generate the Local Inflow.
Slots Specific to This Method
Local Inflow
Type: Series
Units: FLOW
Description: local inflow into the reach
Information:  
I/O: Optional; if this slot is not input, it will default to zero. If it is input the reach will solve for outflow given inflow and Local Inflow.
Local Inflow Adjust
Type: Series
Units: FLOW
Description: adjustment made to the local inflow
Information: This slot is only used with the No Routing method.
I/O: Optional
* No Local Inflow, Solve Outflow
This method is available for the No Routing and Time Lag routing methods. This method changes the available dispatch conditions. For the No Routing method, the available dispatch method is solveNROutflow. For Time Lag routing, the available dispatch method is solveTLOutflowDSOnly.
Slots Specific to This Method: None
* Local Inflow MODFLOW Return
Note:  RiverWare’s connection with MODFLOW is currently not functional. This method has been disabled and cannot be selected. An error will be posted at model load if this method was previously selected. Contact CADSWES for help.
This method is available when the Link to MODFLOW method is selected from the MODFLOW Link Category Reach (see “Link to MODFLOW”). The Local Inflow MODFLOW Return is added to the flow equations in the No Routing, Time Lag, Variable Time Lag, Muskingum-Cunge, and Muskingum-Cunge Improved methods. This method should be used in conjunction with the computational subbasin MODFLOW link methods; see “Computational Subbasin Functionality Guide” for details.
Slots Specific to This Method
Local Inflow MODFLOW Return
Type: Series Slot
Units: flow
Description: Surface water return flow entering the Reach. This inflow is from a surface water body represented in MODFLOW.
Information: Local Inflow comes in at the top of the Reach, and is added to the inflow before it is routed.
I/O: Output only
A return flow from a surface water body (e.g. riverside drain) represented in MODFLOW to a RiverWare Reach may be desired. When the Local Inflow MODFLOW Return method and the Link to MODFLOW method are selected (see “Link to MODFLOW”), a surface water return flow may be transferred from MODFLOW to the RiverWare Local Inflow MODFLOW Return slot through the computational subbasin framework. The MODFLOW segment source for the return flow may be specified on the computational subbasin, “Reach Gain Loss”.
Generate Local Inflows
This category contains methods that forecast the Local Inflow based on known inflow values. The user inputs the historical inflows to the reach and the methods adjust those values to represent a forecast. The methods in this category execute at the beginning of each timestep. This category is dependent on having either the Specify Local Inflow, Solve Inflow or Outflow; or the Specify Local Inflow, Solve Outflow method selected.
* None
This method is the default for this category but does nothing.
* Geometric Recession
On each timestep in the forecast period, this method will adjust the inflow hydrographs, input in the Deterministic Local Inflow slot, and write the results to the Local Inflow series slot.
Slots Specific to This Method
Deterministic Local Inflow
Type: Series
Units: FLOW
Description: This slots holds a timeseries of the actual Local Inflows to the reach. These values are then adjusted by the forecast method and set on the Local Inflow slot.
Information: At the end of the run, the Local Inflow slot will be identical to this slot.
I/O: Input only
Period of Perfect Knowledge
Type: Scalar
Units: FLOW
Description: Number of timesteps for which the forecast will equal the Deterministic Local Inflow, i.e., the forecast is known with complete certainty.
Information: Minimum value of 1; maximum value equal to the number of timesteps in the forecast period.
I/O: Input only
Type: Not linkable
Recession Factor
Type: Scalar
Units: NONE
Description: A decimal value that is multiplied by the previous Local Inflow to determine the current value after the Period of Perfect Knowledge.
Information:  
I/O: Input only
The Deterministic Local Inflow slot values are input for each timestep on a reach. At the beginning of each timestep, the Geometric Recession method is selected. For each forecast timestep within the period of perfect knowledge, the Local Inflow is set to the Deterministic Local Inflow value. For each forecast timestep after the period of perfect knowledge, the Local Inflow is set by multiplying the value of the Local Inflow from the previous timestep by the constant recession factor.
A value for the Deterministic Local Inflow slot must be known at every timestep during the run. If forecasted Local Inflow values are desired past the end of the run, there must also be values in the Deterministic Local Inflow slot at timesteps past the end of the run. If values for Deterministic Local Inflow are not entered past the end of the run, the Local Inflows for these timesteps are assumed to be zero.
* Exponential Recession
On each timestep in the forecast period, this method will adjust the inflow hydrographs, input in the Deterministic Local Inflow slot, and write the results to the Local Inflow series slot. The slot values of the Local Inflow will be the same as those in the Deterministic Local Inflow slot during the period of perfect knowledge. After the period of perfect knowledge, the Local Inflow slot values are recessed by a recession equation using the Deterministic Local Inflow slot value on the last day of perfect knowledge.
Slots Specific to This Method
Deterministic Local Inflow
Type: Series
Units: FLOW
Description: This slots holds a timeseries of the actual Local Inflows to the reach. These values are then adjusted by the forecast method and set on the Local Inflow slot.
Information: At the end of the run, the Local Inflow slot will be identical to this slot.
I/O: Input only
Forecast Period
Type: Table
Units: NONE
Description: Number of timesteps, not including the current timestep, that the inflow hydrograph will be adjusted.
Information:  
I/O: Input only
Period of Perfect Knowledge
Type: Scalar
Units: FLOW
Description: Number of timesteps for which the forecast will equal the Deterministic Local Inflow, i.e., the forecast is known with complete certainty.
Information: Minimum value of 1; maximum value equal to the number of timesteps in the forecast period.
I/O: Input only
Minimum Forecasted Flow
Type: Series
Units: FLOW
Description: The minimum forecasted flow.
Information: If the computed value for Local Inflow is less than the Minimum Forecasted Flow, it is set to the Minimum Forecasted Flow.
I/O: Input only
Low Flow Threshold
Type: Scalar
Units: FLOW
Description: The flow rate that dictates whether to use the Low Flow Recession Coefficient or the High Flow Recession Coefficient.
Information:  
I/O: Input only
Low Flow Recession Coefficient
Type: Scalar
Units: NONE
Description: The recession coefficient used when the Deterministic Local Inflow (at the end of the Period of Perfect Knowledge) is below or equal to the Low Flow Threshold.
Information:  
I/O: Input only
High Flow Recession Coefficient
Type: Scalar
Units: NONE
Description: The recession coefficient used when the Deterministic Local Inflow (at the end of the Period of Perfect Knowledge) is above the Low Flow Threshold.
Information:  
I/O: Input only
The Deterministic Local Inflow slot values are input for each timestep on a reach. At the beginning of each timestep, the Exponential Recession method is selected. For each forecast timestep within the period of perfect knowledge, the Local Inflow is set to the Deterministic Local Inflow value. For each forecast timestep after the period of perfect knowledge, the Local Inflow slot is set as follows.
where Deterministic Local Inflow is the value in the Deterministic Local Inflow slot at the end of the period of perfect knowledge, C is the recession coefficient, t is the elapsed time of the forecast period, and T is the total time from the end of the period of perfect knowledge to the end of the forecast period.
If Deterministic Local Inflow at the end of the period of perfect knowledge is negative, the Local Inflow at that timestep is exactly equal to the Deterministic Local Inflow. However, the Deterministic Local Inflow used in the recession equation is the last positive value for Deterministic Local Inflow. In the event that there is not a positive value for Deterministic Local Inflow, RiverWare issues a warning, and all values for Local Inflow within the forecast period will be set to the Minimum Forecasted Flow.
A value for the Deterministic Local Inflow slot must be known at every timestep during the run. If forecasted Local Inflow values are desired past the end of the run, there must also be values in the Deterministic Local Inflow slot at timesteps past the end of the run. If values for Deterministic Local Inflow are not entered past the end of the run, the Local Inflows for these timesteps are assumed to be zero.
* Coefficient and Exponent
On each timestep in the forecast period, this method will adjust the inflow hydrographs, input in the Deterministic Local Inflow slot, and write the results to the Local Inflow series slot.
Slots Specific to This Method
Forecast Inflow Parameters
Type: Table
Units: None
Description: Table slot that contains four parameters used in the forecast inflow method. The first row contains the values for the increasing hydrograph, the second row contains values for the decreasing hydrograph. The first column contains coefficients, the second column contains exponents.
Information: 2X2 table
I/O: Input only
Deterministic Local Inflow
Type: Series
Units: FLOW
Description: This slots holds a timeseries of the actual Local Inflows to the reach. These values are then adjusted by the forecast method and set on the Local Inflow slot.
Information: At the end of the run, the Local Inflow slot will be identical to this slot. The logic below uses the Lower Bound on the Deterministic Local Inflow slot as a minimum value. This is specified slot configuration (View, then Configure menu). Consider setting this value as needed.
I/O: Input Only
Forecast Period
Type: Table
Units: None
Description: Number of timesteps, not including the current timestep, that the inflow hydrograph will be adjusted.
Information:  
I/O: Input only
The method works as follows: on the current timestep, the Local Inflow is set equal to the Deterministic Local Inflow. The method then loops through the remaining timesteps in the forecast period and sets the Local Inflow using the following formula starting at i = 1.
where KIi is the Deterministic Local Inflow at timestep i, LIi is the Local Inflow at timestep i, C is a coefficient and E is an exponent. The counter i represents the timestep beyond the current timestep. So, i = 1 is the current timestep + 1, i = 2 is the current timestep + 2, etc. The coefficient, C, and exponent, E, are the values in the Forecast Inflow Parameters slot.
Note:  In the preceding formulas, there is a mathematical problem if KIi-1 is zero or very small. In this situation, the Local Inflow is set to the known inflow at the appropriate index. This allows the simulation to continue with reasonable values for the local inflow. The logic uses the Lower Bound on the Deterministic Local Inflow slot as the minimum value. This is specified on the slot configuration (select View, then Configure). If this value is specified it is checked, otherwise only 0.0 is used in the check. The logic is as follows.
If (Deterministic Local Inflow(i-1) = 0.0 OR
ABS(Deterministic Local Inflow(i-1)) < ABS(Lower Bound) ) )
Local Inflow(i) = Deterministic Local Inflow(i)
A value for the Deterministic Local Inflow slot must be known at every timestep during the run. If forecasted Local Inflow values are desired past the end of the run, there must also be values in the Deterministic Local Inflow slot at timesteps past the end of the run. If values for Deterministic Local Inflow are not entered past the end of the run, the Local Inflows for these timesteps are assumed to be zero.
Because this method is executed on each timestep and sets Local Inflow values at future timesteps, the Local Inflow slot at presimulation timesteps never get set. For lagged reaches, this can be a problem. To solve this, the user must input the correct values in the Local Inflow slot for the necessary presimulation timesteps.
Depth to Flow
This category is only available for the hydraulic routing methods: Kinematic, Muskingum-Cunge, Muskingum-Cunge Improved, and MacCormack routing. The methods in this category control how flow is translated into velocity, depth, area, top width and celerity for use in the Routing methods.
* None
This method is the default for this category. It will result in an error if it is selected and a run is started.
* Manning Trapezoid
This method models the channel geometry as a trapezoid.
Slots Specific to This Method
Bottom Width
Type: Scalar
Units: LENGTH
Description: width of the bottom of the channel
Information:  
I/O: Required input
Energy Slope
Type: Scalar
Units: NO UNITS
Description: Slope of the reach from upstream to downstream (vertical/horizontal)
Information: Must be positive
I/O: Required input
Mannings Roughness n
Type: Scalar
Units: NO UNITS
Description: Manning’s roughness n, empirical representation of the roughness of the channel
Information:  
I/O: Required input
Side Slope
Type: Scalar
Units: NO UNITS
Description: Slope of the sides of the channel, S:1 (horizontal:vertical)
Information:  
I/O: Required input
This method uses Newtons method to find a depth corresponding to a given flow. See any open channel flow book for the equations relating flow and depth to the rest of the parameters for a trapezoidal channel. This method does not produce any output directly, rather the Routing method sets some output slots based on the results of this method.
* Manning Wide Rectangle
This method models the channel as a wide rectangle.
Slots Specific to This Method
Bottom Width
Type: Scalar
Units: LENGTH
Description: width of the bottom of the channel
Information:  
I/O: Required input
Energy Slope
Type: Scalar
Units: NO UNITS
Description: Slope of the reach from upstream to downstream (vertical/horizontal)
Information: Must be positive
I/O: Required input
Mannings Roughness n
Type: Scalar
Units: NO UNITS
Description: Manning’s roughness n, empirical representation of the roughness of the channel
Information:  
I/O: Required input
This is the simplest geometry to model. This method assumes that channel depth is negligible relative to channel width, and thus top width and the wetted perimeter are assumed to be equal to the bottom width. This method does not produce any output directly, rather the Routing method sets some output slots based on the flow parameter values calculated by this method.
If flow is zero, then all flow parameter values are zero. Otherwise the following values are calculated:
First the flow parameters and are set (see, for example, Chow et. al., 19884, p. 283).
where n is the Manning’s roughness coefficient, P is the wetted perimeter (here equal to the bottom width), and S0 is the energy slope.
where Q is the flow value passed in from the Routing method calling this method.
* Power Function
This method models the channel geometry as separate functions relating flow to area, area to depth, and flow to top width. Velocity and celerity are derived from the values of these functions.
Note:  The exponential calculations are carried out in RiverWare internal units. Flow is in cms, lengths are in m, areas are in m2, and velocity is in m/s. The values set in the Beta parameter slots, as set by the user, must be consistent with these units.
Slots Specific to This Method
Alpha for Area to Flow
Type: Scalar
Units: NO UNITS
Description: coefficient in area/flow conversion
Information:  
I/O: Required input
Alpha for Depth to Area
Type: Scalar
Units: NO UNITS
Description: coefficient in depth/area conversion
Information:  
I/O: Required input
Alpha for Top Width to Flow
Type: Scalar
Units: NO UNITS
Description: coefficient in topwidth/flow conversion
Information:  
I/O: Required input
Beta for Area to Flow
Type: Scalar
Units: NO UNITS
Description: exponent in area/flow conversion
Information: The value in this slot must correspond to flow in cms and area in m2.
I/O: Required input
Beta for Depth to Area
Type: Scalar
Units: NO UNITS
Description: exponent in depth/area conversion
Information: The value in this slot must correspond to flow in area in m2 and depth in m.
I/O: Required input
Beta for Top Width to Flow
Type: Scalar
Units: NO UNITS
Description: exponent in topwidth/flow conversion
Information: The value in this slot must correspond to flow in cms and TopWidth in m.
I/O: Required input
The equations involved in this method are as follows:
All of the calculations are carried out in RiverWare internal units (SI units), and parameter values (with no units) should be set accordingly.
Stage
This category controls the calculation of river stage or elevation. Depending on the method selected, the upstream, downstream and/or average stage may be calculated.
Note:  If stage values are linked or used together with other elevation values (as in surface water / ground water interfacing applications), RiverWare assumes that they all share the same datum.
* None
This method is the default for this category. It performs no calculations. There are no slots specifically associated with this method.
* Inflow Stage Table Look Up
This method finds the stage in the river from a table interpolation using the inflow. The user may select this method if Head Based Diversion is selected in the Diversion From Reach category. This method is only available when the Reach solves in the downstream direction only. As a result, for No Routing and Time Lag, this method is available only if the Specify Local Inflow, Solve Outflow or No Local Inflow, Solve Outflow method is selected. For the other Routing methods, the method is always available as these only solve downstream. See the following topics for details:
Slots Specific to This Method
Inflow Stage
Type: Series
Units: LENGTH
Description: Stage of reach
Information:  
I/O: Output only
Inflow Stage Table
Type: Table
Units: FLOW versus LENGTH
Description: table to find reach stage from inflow
Information: In reality, this should represent the average stage in the reach
I/O: Required input
Stage
Type: Series
Units: Length
Description: the average reach water surface elevation
Information: Values in this slot are output only, except in the case of a time lag in the Reach/Drain Elev Interp method of the Drain Water Surface Elevation method category. This requires that values for Stage are input for pre-dispatching timesteps needed by the time lag.
I/O: Output only
Inflow Stage is calculated by using the Inflow with the Inflow Stage Table. The Stage slot, which is used in certain seepage calculations, is set equal to the Inflow Stage.
* Stage Table Look Up
This method finds the stage in the river from a table interpolation. The user must select this method if Head Based Diversion is selected in the Diversion From Reach category.
Slots Specific to This Method
Inflow Stage
Type: Series
Units: LENGTH
Description: Stage of reach at upstream end
Information:  
I/O: Output only
Inflow Stage Table
Type: Table
Units: FLOW versus LENGTH
Description: table to find reach stage from flow at upstream end of reach
Information:  
I/O: Required input
Outflow Stage
Type: Series
Units: LENGTH
Description: Stage of reach at downstream end
Information:  
I/O: Output only
Outflow Stage Table
Type: Table
Units: FLOW versus LENGTH
Description: table to find reach stage from flow at downstream end of reach
Information:  
I/O: Required input
Stage
Type: Series
Units: Length
Description: the average reach water surface elevation
Information: Values in this slot are output only, except in the case of a time lag in the Reach/Drain Elev Interp method of the Drain Water Surface Elevation method category. This requires that values for Stage are input for pre-dispatching timesteps needed by the time lag.
I/O: Output only
Inflow Stage and Outflow Stage are calculated by using the Inflow with the Inflow Stage Table and the Outflow with the Outflow Stage Table, respectively. The Stage slot, which is used in certain seepage calculations, is set equal to an average value whenever possible. If inflow and outflow stage values are known for the current time step, the stage is set as the average of these two values. If one of the values is not known for the current time step, a value is sought at the previous time step. The stage is then set as the average of a current time step stage value (either inflow or outflow) and the previous time step stage value (either inflow or outflow, corresponding to whichever is not available at the current time step). If a value from the previous time step is sought for but is not available--at the first time step of a model run, for example--no averaging is done. The stage slot value is set equal to whichever value is known at the current time step.
Note:  When the reach is dispatched with solveNRInflow, solveNROutflow, or solveOutflow, the Stage Table Look Up user method is solved twice: once near the very beginning of dispatch and once near the very end. When the object dispatches the first time (for a given time step), the following process occurs.
1. The stage is calculated averaging a current flow value and a previous flow value.
2. Other user methods are solved, including seepage methods that may depend on the stage value.
3. The flow at the other end of the reach is determined (inflow for solveNRInflow or outflow for solveNROutflow and solveOutflow).
4. The stage is recalculated averaging available values for the current time step for both inflow and outflow.
Under this arrangement, the intermediate user methods will use an appropriately averaged value of stage for solution, but the final value in the stage slot is unlikely to represent the value used by those user methods. Also, any subsequent re-dispatch of the objects will cause Stage Table Look Up to average existing current inflow and outflow values at the beginning of dispatch. That value still may not equal the value found in the stage slot at the end of dispatch.
Note:  The stage method Inflow Stage Table Look Up does not have this same dispatching pattern and should be considered if you wish to avoid this. See “Inflow Stage Table Look Up” for details.
Double solution of the Stage Table Look Up user method as described above does not occur in solveNRLocalInflow, solveTLInflow, solveTLOutflow, solveTLInflowOutflow, solveTLOutflowDSOnly, or solveStorTimeOutflow dispatch methods.
* Input Stage
The Input Stage Method all0ows the user to input the average water surface elevation of the Reach for use in certain Seepage calculations.
Slots Specific to the Method
Stage
Type: Series
Units: Length
Description: The average reach water surface elevation
Information:  
I/O: Required input
* Gage Based Stage
The Gage Based Stage method is used when a reach must be discretized, as may be the case with Gradient Seepage Methods. When gages are not available on the Reach element more distant gages must be used to determine the stage.
Slots Specific to This Method
Stage
Type: Series
Units: Length
Description: The average reach water surface elevation
Information:  
I/O: Output only
Upstream Gage Elev
Type: Series
Units: Length
Description: The elevation of the upstream gauge
Information: This is the elevation of a gauge which is not immediately adjacent to the Reach. It is some distance upstream.
I/O: Required input
Downstream Gage Elev
Type: Series
Units: Length
Description: The elevation of the downstream gauge
Information: This is the elevation of a gauge which is not immediately adjacent to the Reach. It is some distance downstream.
I/O: Required input
Distance Between Gages
Type: Table
Units: length
Description: The horizontal distance between upstream and downstream gauges
Information:  
I/O: Required input
Downstream Distance to Reach
Type: Table
Units: length
Description: The horizontal distance from the upstream gauge to the point on the Reach for which elevation is desired
Information:  
I/O: Required input
The difference between the upstream and downstream gage readings (the rise) divided by the distance between the gages (the run) provides the Reach gradient. When this is multiplied by the distance downstream from the upstream gage to the Reach element, it provides the change in elevation. This is subtracted from the upstream elevation for the Avg Stage.
Stage Adjustment
This category is only available when the Inflow Stage Table Look Up or Stage Table Lookup method is selected from the Stage category.
* None
This method is the default for this category. It performs no calculations. There are no slots specifically associated with this method.
* Stage Coefficient Weighting
This method adjusts the current stage to be a weighted sum of the previously computed current stage and previous timesteps’ stage values.
Slots Specific to This Method
Stage Weighting Coefficients
Type: Table
Units: None
Description: Coefficients used to weight previous temporary stage.
Information: The values in the table should sum to 1.0.
I/O: Required Input
Stage Weighting Coefficients are defined in this table slot which contains a number of user-defined coefficients corresponding to the number of timesteps the user wants to include in the weighted sum. Previously computed Stage values are looked up for the current timestep and a number of previous timesteps, corresponding to the number of coefficients in the aforementioned table. Then, the adjusted Stage is computed as follows:
where the C0, C1,..., Cn are the Stage Weighting Coefficients.
If the Inflow Stage Table Look Up method is selected from Stage category, the tempStage(t) is the InflowStage(t).
If the Stage Table Look Up method is selected from Stage category, the tempStage(t) is the computed stage, which is typically the average of the InflowStage(t) and OutflowStage(t).
This method requires previous timestep values. At the start of the run (start to start+n), if these values are not available, the method will use only current timestep tempStage and assume coeffs are {1,...}. At timesteps after (start+n), if the previous values are invalid, a message will be posted and stop the run.
The default convergence on stage may be too loose for this method to work, depending on the magnitudes of stage values. The convergence percentage may have to be tightened from the default 0.01% to an order of magnitude less, 0.001%, or to an even more precise convergence percentage. Convergence is adjusted in the Configure menu as described “Configure Slot Dialog Functionality” in User Interface.
Volume
This category is only available for the Time Lag and Storage Routing methods.
* None
This method is the default for this category. It performs no calculations. There are no slots specifically associated with this method.
* Volume Table Lookup
This method finds the volume in the reach with a mass balance equation. An initial value for Reach Volume must be input by the user.
Slots Specific to This Method
Reach Volume
Type: Series
Units: VOLUME
Description: holds the volume of water in the reach at the current timestep
Note:  Must be given a value at the initial timestep of the run in order to execute.
I/O: Output only
The mass balance equation is as follows:
Apply Gain Loss
This method category controls how the (Variable) GainLoss Coeff is applied to find the Outflow. This category is only available for the Muskingum and Muskingum-Cunge routing methods.
* Current Outflow
This method applies the (Variable) GainLoss Coeff to the total routed outflow, which is the way that the GainLoss Coeff is applied to most Routing methods. There are no slots specifically associated with this method.
The equation for the final outflow is as follows:
* Previous Flow Average
This method applies the (Variable) GainLoss Coeff to the average of the previous timestep’s inflow and outflow. This is done in order to allow the Muskingum-Cunge and the Muskingum method to use the same equations for loss.
There are no slots specifically associated with this method.
The equation for the final outflow is as follows:
Gain Loss
This method category is used to model gains and/or losses in the Reach. It is available, as well as all the user methods contained within it, for all Routing methods.
Note:  The equations given for each Gain Loss method may be slightly modified if the Previous Flow Average method is selected in the Apply Gain Loss category.
* None
This is the default method. No calculations are performed and there are no slots associated with this method. It should be used if the user does not wish to model gains or losses.
* Constant Gain Loss
Used when the gain or loss parameters do not vary with respect to time.
Slots Specific to This Method
GainLoss
Type: Table
Units: FLOW
Description: represents a given amount of flow that is gained or lost regardless of the flow rate in the reach
Information: A positive number represents a gain while a negative number represents a loss.
I/O: Optional; defaults to 0.0 if not input.
GainLoss Coeff
Type: Table
Units: DECIMAL
Description: represents a given percentage of flow in the reach which is gained or lost
Information: Must be a number between -1 and 1. For example, a value of -0.1 means that 10% of the flow in the reach is lost. If solving upstream, must be greater than -1.
I/O: Optional; defaults to 0.0 if not input.
Total GainLoss
Type: Series
Units: FLOW
Description: represents the total amount of flow that is gained or lost in a reach for a given timestep
Information: Applied to the bottom of the reach (it is added to the outflow value calculated from the Routing method).
I/O: Output only
* Variable Gain Loss
Used when a time series range of gain or loss parameters is required.
Slots Specific to This Method
Variable GainLoss
Type: Series
Units: FLOW
Description: represents a given amount of flow that is gained or lost regardless of the flow rate in the reach
Information: A positive number represents a gain while a negative number represents a loss.
I/O: Optional; defeats to 0.0 if not input.
Variable GainLoss Coeff
Type: Series
Units: DECIMAL
Description: represents a given percentage of flow in the reach which is gained or lost
Information: Must be a number between -1 and 1. For example, a value of -0.1 means that 10% of the flow in the reach is lost. If solving upstream, must be greater than -1.
I/O: Optional; defaults to 0.0 if not input.
Total GainLoss
Type: Series
Units: FLOW
Description: represents the total amount of flow that is gained or lost in a reach for a given timestep
Information: Applied to the bottom of the reach (it is added to the outflow value calculated from the Routing method).
I/O: Output only
* Seasonal Gain Loss Flow Table
Used to calculate the gain/loss parameters based on season and a range of flow rates.
Tip:  The “Periodic and Flow based Gain Loss” performs similar computations to this method, but is easier to setup. Consider using that method instead!
Slots Specific to This Method
Date Range
Type: Table
Units: NO UNITS
Description: the actual days of the 366 day year that correspond to the Number of Seasons
Information: Each column of this table corresponds to a particular season and are labeled Season 1 - 12. The two rows labeled 0 and 1 respectively represent the beginning day and ending day of the season column. The allowable range for these inputs is 1 - 366. It is recommended to cover the entire year within the Number of Seasons columns quantified in that slot.
I/O: Required input
Flow Range
Type: Table
Units: FLOW
Description: the ranges of flow rates corresponding to the Variable GainLoss Coeff Table and Variable GainLoss Table
Information: The number of flow ranges allowed in this table is currently limited to 10. The columns of this table represent, in ascending order, the maximum flow rate for a specific flow range starting with 0 as the base. These columns are labeled Flow Range 1 - 10. Therefore, the first column represents a range of flows from 0 to the value input by the user in the Flow Range 1 column. The last flow range entered by the user should be a flow rate greater than any anticipated for the simulation. Otherwise, a value of 0.0 will be used for flows outside of this range. It is not necessary to utilize all 10 columns of this table. Use only the columns needed to designate the desired flow ranges.
I/O: Required input
Number of Season
Type: Scalar
Units: NO UNITS
Description: the number of seasons corresponding to the Variable GainLoss Coeff Table and Variable GainLoss Table
Information: The maximum number of seasons currently allowed in RiverWare is 12.
I/O: Required input
Variable GainLoss
Type: Series
Units: FLOW
Description: represents a given amount of flow that is gained or lost regardless of the flow rate in the reach
Information: A positive number represents a gain while a negative number represents a loss.
I/O: Optional; if not input, it is obtained from the Variable GainLoss Table.
Variable GainLoss Coeff
Type: Series
Units: DECIMAL
Description: represents a given percentage of flow in the reach which is gained or lost
Information: Must be a number between -1 and 1. For example, a value of -0.1 means that 10% of the flow in the reach is lost. If solving upstream, must be greater than -1.
I/O: Optional; if not input, it is obtained from the Variable GainLoss Coeff Table.
Variable GainLoss Coeff Table
Type: Table
Units: TIME
Description: Variable GainLoss Coeff values for each specific Date Range and Flow Range
Information: The columns of the table correspond to the flow ranges defined in Flow Range, and the rows correspond to the seasons defined in Date Range.
I/O: Required input
Variable GainLoss Table
Type: Table
Units: TIME
Description: Variable GainLoss values for each specific Date Range and Flow Range
Information: The columns of the table correspond to the flow ranges defined in Flow Range, and the rows correspond to the seasons defined in Date Range.
I/O: Required input
Total GainLoss
Type: Series
Units: FLOW
Description: represents the total amount of flow that is gained or lost in a reach for a given timestep
Information: Applied to the bottom of the reach (it is added to the outflow value calculated from the Routing method).
I/O: Output only
* Interpolated Flow Gain Loss
This method is similar to the Seasonal Gain Loss Flow Table method except the data is based on the day of the year and the tables are interpolated to find values for gain-loss and the gain-loss coefficient.
The “Periodic and Flow based Gain Loss” performs similar computations to this method, but is easier to setup. Consider using that method instead!
Slots Specific to This Method
Interpolated GainLoss
Type: Series
Units: FLOW
Description: represents a given amount of flow that is gained or lost regardless of the flow rate in the reach
Information: A positive number represents a gain while a negative number represents a loss. It is calculated by double interpolation of the Interpolated GainLoss Table
I/O: Output only
Interpolated GainLoss Coeff
Type: Series
Units: FRACTION
Description: represents a given percentage of flow in the reach which is gained or lost
Information: Must be a number between -1 and 1. For example, a value of -0.1 means that 10% of the flow in the reach is lost. It is calculated by double interpolation of the Interpolated GainLoss Coeff Table.
I/O: Output only
Interpolated GainLoss Coeff Table
Type: Table
Units: TIME VS. Flow VS. fraction
Description: A table relating the day of the year, flow rate, and the gain-loss coefficient
Information: Data must be entered in blocks of increasing flow for each given day for the interpolation method to work correctly. January 1 is represented by a 1, February 1 as 32, etc. Following is an example table.
 
Day of Year
Flow Rate
GainLoss Coeff
1
500
.01
1
550
.02
1
600
.03
32
500
.025
32
550
.03
32
600
.035
60
500
.03
60
550
.035
60
600
.04
I/O: Required input
Interpolated GainLoss Table
Type: Table
Units: Time vs. flow vs. flow
Description: a table relating the day of the year, the flow rate and the gain-loss value
Information: Data must be entered in blocks of increasing flow for each given day for the interpolation method to work correctly. January 1 is represented by a 1, February 1 as 32, etc. The table is set up in the same manner as the Interpolated GainLoss Coeff Table (shown above).
I/O: Required input
Total GainLoss
Type: Series
Units: FLOW
Description: represents the total amount of flow that is gained or lost in a reach for a given timestep
Information: Applied to the bottom of the reach (it is added to the outflow value calculated from the Routing method).
I/O: Output only
A 3D interpolation method is used to calculate a value for Interpolated GainLoss and Interpolated GainLoss Coeff using the Interpolated GainLoss Table and Interpolated GainLoss Coeff Table, respectively. Once these values are calculated Total GainLoss is set as follows:
* Base Plus Fractional Loss
This method is used to model loss in a reach; it does not allow gain. Loss is calculated as base flow rate plus a proportion of the flow above the base. Loss is limited to be less than a maximum value. This method will be available for all Routing methods except Time Lag routing.
Slots Specific to This Method
Base Loss
Type: Periodic
Units: Time vs Flow
Description: Represents an amount of flow that is lost regardless of the flow rate in the reach. The method will limit the total loss to be less than or equal to the flow in the reach.
Information: A positive number represents a loss. A negative number results in an error.
I/O: Required Input
Loss Fraction above Base
Type: Periodic
Units: Time vs Decimal
Description: This slot represents a fraction of the flow above the Base Loss that will be lost
Information: A positive number represents a loss; the value must be between 0 and 1 or an error is issued.
I/O: Required Input
Maximum Loss
Type: Scalar
Units: FLOW
Description: The maximum loss that can occur from the reach
Information: If not input, no maximum is used
I/O: Optional Input
Total GainLoss
Type: Series
Units: FLOW
Description: Represents the total amount of flow that is gained or lost in a reach for a given timestep
Information: A positive number represents a gain, a negative number represents a loss. The Total GainLoss is applied to the bottom of the reach (it is added to the outflow value calculated from the Routing method). In this method, a loss is represented by a negative number.
I/O: Output only
Method Details
At the beginning of the method, the values for Base Loss and the Loss Fraction above Base are taken from the periodic slots and checked. As is typical with periodic slots, these slots can be configured to either lookup or interpolate. If either is invalid, the run aborts with an error. If the Base Loss is less than zero, the run aborts with an error. If the Loss Fraction above Base is less than 0 or greater than 1, the run aborts with an error.
On a reach, the Total GainLoss slot is used by other GainLoss methods. As a result, this method follows the same convention where a negative Total GainLoss represents a loss. Also, the flow used by the method is the flow in the reach after the routing has occurred. Thus, the Total GainLoss is the base loss plus the fractional loss associated with the flow above the base. Because the flow could be less than the base, the following formula is necessary to calculate the loss:
If Maximum Loss is NaN, then the Total GainLoss is set equal to the negative of the tempLoss value.
Otherwise, there is a valid Maximum Loss and the Total GainLoss is then set as follows:
* Periodic Gain Loss
This method is used to model gain and/or loss in a reach. The gain and loss values are entered as periodic data for a given time range. Gains are entered as positive values and losses are entered as negative values. This method will be available for all Routing methods except Time Lag routing.
Slots Specific to This Method
Periodic GainLoss
Type: Periodic
Units: Time vs Flow
Description: Represents an amount of flow that is gained or lost regardless of the flow rate in the reach.
Information: A positive number represents a gain. A negative number results in a loss.
I/O: Required Input
Total GainLoss
Type: Series
Units: FLOW
Description: Represents the total amount of flow that is gained or lost in a reach for a given timestep
Information: A positive number represents a gain, a negative number represents a loss. The Total GainLoss is applied to the bottom of the reach (it is added to the outflow value calculated from the Routing method). In this method, a loss is represented by a negative number.
I/O: Output only
Method Details
At the beginning of the method, the value for Periodic GainLoss is taken from the periodic slot and checked. As is typical with periodic slots, this slot can be configured to either lookup or interpolate. If the value is invalid, the run aborts with an error.
This method follows the same convention as other GainLoss methods where a positive Total GainLoss represents a gain.
* Periodic and Flow based Gain Loss
This method models Gain and Loss as a variable flow rate and fraction of the routed flow. Both the flow rate and the fraction are based on a date and flow rate, or could be specified by input or rules
Slots Specific to This Method
Periodic Gain Loss Table
Type: Periodic Slot with Numeric Header
Units: Header = Flow, Values = Flow
Description: The matrix that describes the amount of flow that should be gained or lost.
Information: This table has a “column map” which means that each column has an associated numerical value (with units) displayed as the column label. Columns are added and deleted from this table using the Column menu. User units, scale, type, and precision for the Column Map (i.e. the column heading values) are defined in the unit scheme for Flow unit types. Column map values are set from the Column, Set Column Value menu option. When a column value is changed, the columns will re-order to ensure that the column values are increasing left to right. The left-most set of values should represent the minimum flow in the reach. The right-most set of values should represent the largest flow expected. Values are interpolated across columns. The configuration of the slot controls how values are accessed across rows (Interpolate or Lookup). A sample shown in Figure 23.1. Extra columns have been added to lookup across flow ranges.
I/O: Required input
Figure 23.1  Screenshot of a sample Periodic Gain Loss Table
Periodic Gain Loss Coeff Table
Type: Periodic Slot with Numeric Header
Units: Header = Flow, Values = Fraction
Description: The matrix defining the percentage of the routed flow that should be gained or lost.
Information: This table has a “column map” which means that each column has an associated numerical value (with units) displayed as the column label. Columns are added and deleted from this table using the Column menu. User units, scale, type, and precision for the Column Map (i.e. the column heading values) are defined in the unit scheme for Flow unit types. Column map values are set from the Column, Set Column Value menu option. When a column value is changed, the columns will re-order to ensure that the column values are increasing left to right. The left-most set of values should represent the minimum flow in the reach. The right-most set of values should represent the largest flow expected. Values are interpolated across columns. The configuration of the slot controls how values are accessed across rows (Interpolate or Lookup). A sample shown in Figure 23.2. Extra columns have not been added to allow it to interpolate across flow ranges.
I/O: Required Input
Figure 23.2  Screenshot of a sample Periodic Gain Loss Coeff Table
Variable GainLoss
Type: Series
Units: FLOW
Description: represents a given amount of flow that is gained or lost regardless of the flow rate in the reach
Information: A positive number represents a gain while a negative number represents a loss.
I/O: Optional; can be input if needed. More likely it is obtained from the Periodic GainLoss Table.
Variable GainLoss Coeff
Type: Series
Units: FRACTION
Description: represents a given percentage of flow in the reach which is gained or lost
Information: Should be a number between -1 and 1. For example, a value of -0.1 means that 10% of the flow in the reach is lost. If solving upstream, it must be greater than -1.
I/O: Optional; can be input if needed. More likely it is obtained from the Periodic GainLoss Coeff Table.
Total GainLoss
Type: Series
Units: FLOW
Description: represents the total amount of flow that is gained (+value) or lost (- value) in a reach for a given timestep
Information: Applied to the bottom of the reach (it is added to the outflow value calculated from the Routing method).
I/O: Output only
The method computes the Total Gain Loss as follows:
The flow to use is provided by the routing method as the “Routed Flow.”
flow = RoutedFlow
Variable Gain Loss = Periodic Gain Loss Table [timestep, flow]
Variable Gain Loss Coeff = Periodic Gain Loss Coeff Table [timestep, flow]
Total Gain Loss = Variable Gain Loss Coeff * flow + Variable Gain Loss
Note:  When solving upstream, the computation is iterative as the gain loss depends on the upstream routed flow, which is what is what is being computed. Convergence is defined on the Outflow slot. Max iterations is based on the simulation max iterations.
The Total GainLoss is returned to the dispatch method where it is used in the mass computation. This method follows the same convention as other GainLoss methods where a positive Total GainLoss represents a gain.
Reach Bank Storage
The Reach Bank Storage category is used to model flow to/from storage within a reach. The Bank Storage Return is added/removed from the reach after the flow is routed but before Gain Loss is calculated.
The Reach Bank Storage category is available for all Routing methods except time lag methods.
* None
This is the default method. It performs no bank storage calculations. There are no slots specifically associated with this method.
* Average Flow Bank Storage
This method is designed to simulate hyporheic zone storage and return on Reach objects. It is similar to the bank storage on reservoir objects. The amount of bank storage is calculated as a function of flow rate.
Slots Specific to This Method
Average Flow Coefficient
Type: Table
Units: No Units
Description: A coefficient based on transmissivity of the surrounding aquifer and the relationship between river stage and flow rate
Information: Although the slot does not have a formal unit, the value in the slot has conceptual units of square root of seconds. Often this value is negative based on the equation below.
I/O: Required input
Bank Storage Return
Type: Series
Units: FLOW
Description: The rate of return to the reach from bank storage
Information: A positive number represents a return to the reach while a negative number represents a loss to bank storage.
I/O: Output only
Routed Flow
Type: Series
Units: Flow
Description: Flow rate used to calculate Bank Storage Return
Information: This represents the flow rate in the reach after Local Inflow, Seepage, and Diversion are added/removed and the flow is routed.
I/O: Output only
Timesteps to Average
Type: Table
Units: No Units
Description: An integer number of timesteps to compute the average flow. This value must be greater than zero
I/O: Required input
The routed flow average is the average flow over the number of timesteps specified in Timesteps to Average prior to the current timestep. For the first (timesteps to average - 1) timesteps, some routed flows are being set on timesteps prior to the initial timestep. These values, set equal to the routed flow at the initial timestep, are used so that calculations for routed flow average don’t used routed flows equal to zero. A warning message will remind users this is occurring.
Reach Seepage
The Reach Seepage category is used to model seepage from a reach. The seepage is calculated at the top (upstream) end of the reach. All methods allow seepage to be input or set by a rule. When input or set by a rule, seepage is not recalculated by the method.
This method is available only when No Routing is selected in the Routing category.
* None
This is the default method. It performs no seepage calculations. There are no slots specifically associated with this method.
* Proportional Seepage
Seepage is calculated as a fraction of the Inflow to the reach.
Slots Specific to This Method
Maximum Seepage
Type: Table
Units: FLOW
Description: represents the maximum amount of flow that can be lost as seepage
Information:  
I/O: Required input
Seepage
Type: Series
Units: FLOW
Description: The calculated amount of flow lost as seepage
Information: Subtracted from the Inflow value to calculate Outflow.
I/O: Input, Output, or Rule
Seepage Flow Fraction
Type: Table
Units: NO UNITS
Description: Represents the fraction of Inflow that is lost as seepage
Information: A decimal value which is greater than or equal to zero and less than one.
I/O: Required input
* Variable Seepage
This method uses variable parameters to model seepage. Seepage is calculated as a fraction of the Inflow for each time step.
Slots Specific to This Method
Maximum Seepage
Type: Table
Units: FLOW
Description: represents the maximum amount of flow that can be lost as seepage
Information:  
I/O: Required input
Seepage
Type: Series
Units: FLOW
Description: the calculated amount of flow lost as seepage
Information: Subtracted from the Inflow value to calculate Outflow.
I/O: Input, Output, or Rule
Variable Seepage Flow Fraction
Type: Series
Units: decimal
Description: a time series of values representing the fraction of Inflow that is lost as seepage
Information: Entered as a decimal value which is greater than or equal to zero but less than one.
I/O: Optional; defaults to 0.0 if not input.
* Horizontal Gradient Seepage
Each Reach may have horizontal seepage to multiple drains or shallow groundwater aquifers with unique drainage characteristics. Horizontal seepage to individual drains is calculated using Darcy’s Law, as follows:
The Seepage slot is set as the sum of horizontal seepage to all drains. An Aggregate Reach object can be used to simulate discrete reaches or reach segments for which varying seepage characteristics are known.
Slots Specific to the Method
Seepage
Type: Series
Units: Flow
Description: the calculated amount of flow lost as seepage
Information: Seepage is subtracted from the Inflow value to calculate Outflow.
I/O: Input, Output, or Rule
Stage vs Horiz Bank Seepage Area
Type: Table
Units: Flow Vs. area
Description: relates the reach avg stage to the horizontal bank area through which seepage flows in the vertical direction to each drain
Information: The user can add additional columns when more than one drain is present. If the bank seepage area is constant, two extreme values for stage with the same bank seepage area will insure that tale interpolations return this value.
I/O: Required input
Horiz Hydraulic Conductivity
Type: Table
Units: VELOCITY
Description: the horizontal hydraulic conductivity of the medium through which seepage flows
Information: The user can add additional columns when more than one drain is present.
I/O: Required input
Distance to Drain
Type: Table
Units: length
Description: the horizontal distance from the reach to the drain.
Information: This value is assumed to be constant. The user can add additional columns when more than one drain is present.
I/O: Required input
The Horizontal Gradient Seepage method requires that a Stage method be selected. It also has a dependent method category, the Drain Elevation method category. The reach horizontal bank seepage area through which seepage can flow to each drain in the horizontal direction is calculated using a stage/bank seepage area table interpolation. The horizontal hydraulic conductivity of the medium adjacent to each drain is entered by the user. The horizontal seepage gradient for each drain is calculated using the following equation:
* Vertical Gradient Seepage
Vertical gradient seepage is also calculated using Darcy’s Law (see Horizontal Gradient Seepage Method).
Slots Specific to the Method
Seepage
Type: Series
Units: FLow
Description: the calculated amount of flow lost as seepage
Information: Seepage is subtracted from the Inflow value to calculate Outflow.
I/O: Input, Output, or Rule
Vert Hydraulic Conductivity
Type: Table
Units: VELOCITY
Description: the vertical hydraulic conductivity of the medium through which seepage flows
Information:  
I/O: Required input
Vert Hydraulic Gradient
Type: Series
Units: No units
Description: the gradient through which seepage flows to the vertical drain
Information:  
I/O: Required input
Vert Channel Surface Area
Type: Series
Units: AREA
Description: the surface area of the reach channel bottom through which seepage may flow in the vertical direction
Information:  
I/O: Required input
* Horizontal and Vertical Gradient Seepage
The Horizontal and Vertical Gradient Seepage Method is a composite of the Horizontal Gradient Seepage and Vertical Gradient Seepage methods. When it is selected all of the slots for the Horizontal Gradient and Vertical Gradient Seepage methods (above) are instantiated. The Horizontal and Vertical Gradient Seepage method sums horizontal and vertical seepages.
* Seepage and Riparian Consumptive Use Loss
The Seepage and Riparian CU Loss Method is only available when Specify Local Inflow, Solve Outflow or No Local Inflow, Solve Outflow is selected from the Local Inflow and Solution Direction category. The Seepage and Riparian CU Loss Method sets the Leakage slot either from the user, as input or by a rule, or calculated from Seepage and Riparian CU Loss with the following calculation:
where n1, n2, n3, n4, and n5 are coefficients held in a table slot. For the Leakage calculation, if the inflow value is negative, it will be assumed to be zero.
The Seepage slot is set to the result of subtracting Riparian CU from the Leakage slot.
The Riparian CU Loss slot is set to the minimum of the Riparian CU and the Leakage. Here, if the calculated Leakage is negative it is assumed to be zero.
Note:  The Leakage calculation uses the Inflow value in user units. The value set in the LogInflowCoeff column and the value and units in the InflowSqrdCoeff column of the Evaporation Data slot (n1 and n2), as set by the user, must be consistent with the user units for the Inflow slot. Changing the user units on the Inflow slot will produce a different result. There will not be an automatic conversion of the Coefficient values.
Slots Specific to the Method
Seepage
Type: Series
Units: Flow
Description: difference of Leakage and Riparian CU
Information: Subtracted from the Reach Inflow value to calculate Outflow.
I/O: Input, Output, or Rule
Leakage
Type: Series
Units: Flow
Description: amount of incoming water lost to various sources.
I/O: Input or Output.
Riparian CU
Type: Series
Units: Flow
Description: flow rate of the consumptive use in the riparian area
Information: Riparian CU is used in the Leakage calculation of the Reach and the Riparian CU Loss calculations.
I/O: Required Input
Riparian CU Loss
Type: Series
Units: Flow
Description: the minimum of Leakage and Riparian CU
Information: Subtracted from the Reach Inflow value to calculate Outflow
I/O: Output only
Seepage and Riparian CU Loss Coeff
Type: Table
Units: None, 1/Flow, None, None, None
Description: relates the month to a set of five coefficients with the following names and units: LogInflowCoeff [NONE], InflowSqrdCoeff[1/FLOW], InflowCoeff [NONE], CUCoeff [NONE], ParChanFlowCoeff[NONE]. the table has twelve rows, one for each month of the year.
Information: These coefficients are specific to the encoded Leakage equation. The values must be consistent with the user units for the Inflow slot. If the user units on the Inflow slot are changed, the values in this slot must be changed manually to correspond to the new units. Otherwise different results will be produced
I/O: Required Input
Parallel Channel Flow
Type: Series
Units: Flow
Description: flow rate of upstream diversion to a parallel channel
Information: Available on Reach objects for use in Leakage calculations. Typically linked to flow in a parallel channel. Dispatch slot.
I/O: May be output or input. If it is not linked or user input, it will be assumed to be zero.
* Head Based Seepage
A method to compute the river stage based on the reach inflow and outflow values must be selected in the Stage Calc Category. If no stage method is selected, the Head Based Seepage method will abort with an error. The Head Based Seepage method will compute the seepage based on the head in the river relative to the groundwater head. If the groundwater head is below the streambed elevation then the seepage will be computed based on the head in the river relative to the streambed bottom.
Seepage
Type: Series Slot
Units: flow
Description: The river loss or gain from groundwater
Information: A positive number represents a losing reach while a negative number represents a gaining reach
I/O: Input, Output, or Rule
Previous Water Table Elevation
Type: Series Slot
Units: length
Description: The previous elevation value computed by the connected groundwater object
Information: Seepage is computed based on the difference between the current river stage and the previous groundwater elevation
I/O: Output only
Conductance
Type: Scalar slot
Units: area per time
Description: The riverbed conductance
Information: The conductance is defined as the hydraulic conductivity of the streambed material, multiplied by the width of the streambed bottom, multiplied by the length of the stream segment, divided by the streambed thickness (Conductance = KwL/m).
I/O: Input or computed as specified; see “Reach Conductance”.
Streambed Elevation
Type: Scalar Slot
Units: length
Description: The elevation of the stream bed at the center of the reach segment (i.e. average stream bed elevation)
Information: Should have the same datum as Stage and the Previous Water Table Elevation
I/O: Required input
Conductance Factor
Type: Series Slot with Periodic Input
Units: Fraction
Description: The Conductance is multiplied by this factor in the calculation Seepage. It can be used to model variable Conductance.
Information: If the slot is NaN, a default of 1 is used in the calculation of Seepage. The slot remain as NaN.
I/O: Optional input or rules
The Head Based Seepage Method computes the seepage to groundwater using one of the following equations.
• If the Previous Water Table Elevation is greater than the Streambed Elevation.
• If the water table elevation at the previous timestep is below the Streambed Elevation.
Note:  The preceding equations use the water table elevation at the previous timestep. This simplification is done to avoid iteration problems that would result if the current groundwater elevation was used. A positive seepage is limited to be less than or equal to the Inflow to the reach.
Seepage Routing
The option to route seepage becomes visible after a method to calculate seepage is chosen.
* No Routing
This is the default method which will not route seepage. The values for seepage are calculated depending on the user method chosen for seepage calculation. These values are contained in the Seepage slot.
* Impulse Response
This method calculates the routed seepage based on the impulse response method of routing. This routing method makes visible a PreRouted seepage slot. This slot contains the values for seepage that have not been routed. The routed values are contained in the Seepage slot. If a link exists that links seepage to another object and a seepage routing method is chosen, the link will propagate the values of the routed seepage.
Note:  This method computes the Seepage as a function of current and previous PreRouted Seepage. Because it uses previous timestep information, the computed Seepage may be more than the Inflow (or Outflow) and could lead to a negative Outflow (or Inflow). As always, Outflow = Inflow - Seepage + Sources - Sinks
SLOTS SPECIFIC TO THIS METHOD
Number of Coefficients
Type: Table
Units: NONE
Description: The integer number of lag coefficients to be used in the method.
I/O: Required input
Lag Coefficients
Type: Table
Units: NONE
Description: The impulse response lag coefficients
Information: The number of lag coefficients must be the same as the value in the Number of Coefficients slot. The input will be in rows.
I/O: Required input.
PreRouted Seepage
Type: Series
Units: FLOW
Description: The seepage values before routing.
Information: This slot contains the values of seepage that have not been routed. The routed values will be contained in the Seepage slot.
I/O: Output
The Seepage (routed) will be calculated as follows:
where C is a lag coefficient and ncoeff is the number of lag coefficients.
* One Timestep Seepage Lag
This method will apply the computed seepage to the next timestep.
SLOTS SPECIFIC TO THIS METHOD
Seepage from Previous Timestep Conditions
Type: Series
Units: Flow
Description: The seepage computed from the previous timestep’s conditions
Information:  
I/O: Output Only
Seepage is computed at each timestep, but the value is set at the next timestep, as follows.
When this method is selected, the timing of the seepage calculation is modified. For the solveNRInflow and solveNROutflow dispatch methods, the Seepage Routing method is called once near the beginning of the dispatch method. This call makes sure that there is a valid seepage that was computed at the previous timestep.
Note:  If it is the first timestep in the run and there is no valid seepage, the method will use the current estimate of seepage and post a warning. (If you do not want to see this warning, input a seepage value for the first timestep.) When the Stage Table Lookup and Head Based Seepage are used, this estimate is the seepage based solely on the Inflow (for solveNROutflow) or Outflow (for solveNRInflow) to the reach.
When used with the Head Based Seepage method and solveNROutflow, a positive seepage is limited to be less than or equal to the inflow to the reach. The slot Seepage from Previous Timestep Conditions holds the lagged seepage. If the reach redispatches with a larger inflow, the seepage is reset to this value. This reverts the seepage to its original value instead of using the seepage constrained by a smaller inflow.
The selected Reach Seepage method is called near the end of the dispatch method after inflow and outflow are known. For the Stage Table Lookup and Head Based Seepage, this execution allows the seepage to be correctly computed based on both the inflow and outflow. The seepage is then set at the NEXT timestep.
Note:  Seepage is a dispatch slot, so the reach may re-dispatch at the next timestep, depending on knowns and unknowns.
For the solveNRLocalInflow dispatch method, the seepage calculation is only called once near the beginning of the dispatch method as both inflow and outflow are known. Again, on the first timestep, if a valid seepage is not known, the estimate based on current values will be used.
* Step Response
This method calculates the routed seepage based on the step response method of routing. The Seepage slot contains the values for seepage that have not been routed. The routed values are contained in the Routed Seepage slot. Typically, the Routed Seepage slot will be linked.
Note:  This method removes the Seepage from the reach and then routes the Seepage. The routed seepage is stored in the Routed Seepage slot for the current and n future timesteps. As always, Outflow = Inflow - Seepage + Sources - Sinks
This seepage routing method is available for all seepage methods except Head Based Seepage.
Slots Specific to This Method
Lag Coefficients
Type: Table
Units: NONE
Description: The step response lag coefficients
Information: The input will be in rows.
I/O: Required input.
Routed Seepage
Type: Agg Series Slot
Units: Flow
Description: the seepage after it has been routed
Information:  
I/O: Output Only
Future Seepage Timesteps
Type: Scalar
Units: None
Description: The number of timesteps in the future (i.e. past the timestep at which the object is dispatching) at which Routed Seepage will be computed and set.
Information: This slot must be an input integer and greater than or equal to 1. If you do not want it to set future timesteps, input a value of 1.
I/O: Required Input
Information: Not Linkable
This method sets values into the future as follows.
nCoeff = Number of rows in the Lag Coefficients table
nFutureTimesteps = Min (Future Seepage Timesteps, nCoeff)
For each timestep k from (t to (t + nFutureTimesteps - 1))
End for
Thus, the method computes and sets Routed Seepage forward nFutureTimesteps.
When the method is looking for a Seepage for a timestep that is past the dispatching timestep and the value is not valid, the Seepage is assumed to be zero. If the Seepage is not valid for a previous timestep, the calculation will exit the method and post a warning message. No Routed Seepage will be set.
Reach Conductance
Methods in this category allow you to choose how you wish to specify conductance. You can either give values for Conductance or give values for Hydraulic Conductivity and the geometry of the reach and the Conductance will be computed.
* Specify Conductance
This is the default method and does not instantiate any new slots. You must specify the conductance value or an error will be issued.
* Compute Conductance
This method allows you to specify hydraulic conductivity and the geometry.
The following slots are added
Hydraulic Conductivity
Type: Scalar
Units: Velocity
Description: Hydraulic conductivity of the streambed material
Information:  
I/O: Required Input
Riverbed Thickness
Type: Scalar
Units: Length
Description: Thickness of the riverbed
Information: This value is used in the conductance calculation
I/O: Required Input
Seepage Area
Type: Scalar
Units: Area
Description: Area of the river that contributes to seepage
Information:  
I/O: Required Input
At the start of the run, the information in these slots is used to compute the Conductance value according to the following equation:
If there are missing values in the above slots, an error will be issued and the run initialization will be stopped.
The resulting value is set on the scalar Conductance slot. If there are values already in the slot, they will be overwritten.
Note:  The Conductance slot is registered as having a Source slot. When a slot has a source slot, it becomes read-only and displays a cross hatch over the data. It also provides a note indicating the source used to compute the data. This attribute is set at the start of the run, so you must initialize the model to see the display of this slot change. If you deselect this method, you must initialize the run again to unset the source slot.
Drain Elevation
The Drain Elevation category is dependent on the Horizontal and Horizontal and Vertical Gradient Seepage Methods. Each Reach may have horizontal seepage to multiple drains or shallow groundwater aquifers, each of which can have unique drainage characteristics. Drain related slots are designed so that users can add columns to provide information on each drain present. A drain may be a man-made drain or groundwater.
* None
None is the default for the category, and will result in an error if it is selected and a run is started.
* Constant
This method allows the user to set a constant drain elevation.
Slots Specific to the Method
Constant Drain WS Elev
Type: Table
Units: Length
Description: the elevation of the drain
Information: The user may add additional columns if more than one drain is present.
I/O: Required input
* Variable Input
This method allows the user to specify the drain elevation at each timestep.
Slots Specific to This Method
Variable Drain WS Elev
Type: AggSeries
Units: Length
Description: the drain elevation at each timestep
Information: The user may add additional columns if more than one drain is present.
I/O: Required input
* Flow Elevation Interpolation
This method calculates the drain elevation based upon flow through the drain (this method should be used only when drains are man-made as flow is unavailable for groundwater). A table interpolation of the Drain Flow vs Drain Elev table gives the elevation.
Slots for This Method
Drain Flow
Type: Agg Series
Units: Flow
Description: the flow through the drain
Information: The user may add additional columns if more than one drain is present.
I/O: Required input
Drain Flow vs Drain Elev
Type: Table
Units: Flow vs. length
Description: a table relating the drain flow to the drain elevation
Information: The user may add additional columns if more than one drain is present.
I/O: Required Input
* Stage Elevation Interpolation
This method should be used when the drain or groundwater elevation depends on the Reach Avg Stage (water surface elevation). It calculates the drain elevation based upon a specified table relationship of Reach Avg Stage and Drain Elev. The user may also include a time lag using the Drain Time Lag slot representing a lagged relationship between the Reach and drain elevations.
Reach Stage vs Drain Elev
Type: Table
Units: length vs. length
Description: table relating the reach average stage (water surface elevation) to the drain elevation
Information: The user may add additional blocks of columns if more than one drain is present.
I/O: Required Input
Drain Time Lag
Type: Table
Units: TIME
Description: the time for which the elevation should be lagged
Information: The user may add additional columns if more than one drain is present.
I/O: Input only
Outflow Adjustment
This method adjusts outflows after they have been solved for by the dispatch method. This category is available for all Routing methods.
* None
This method is the default for this category. If no adjustment is desired, this should be selected.
There are no slots specifically associated with this method.
* Negative Outflow Unidentified Loss Adjust
The user should select this method when negative outflows need to be avoided. When using this method, negative outflows, as calculated by the Routing method, will be reset to zero.
Slots Specific to This Method
Unidentified Loss
Type: Series
Units: FLOW
Description: a value that give the absolute value of the negative outflow that was set to zero.
Information:  
I/O: Output.
* Autoregressive Outflow
The user should select this method if they want to adjust the current outflow to a weighted sum of the current routed flow and prior outflows. It is available for use with all Routing methods except Step Response and Variable Step Response, but it is only available for Time Lag and No Routing if the selected method in the Local Inflow and Solution Direction category is Specify Local Inflow, Solve Outflow or No Local Inflow, Solve Outflow. That is, this method can only be used when solving downstream.
Slots Specific to This Method
Routed Flow
Type: Series
Units: FLOW
Description: This is the routed flow before the autoregression is applied, set as an output on the slot so the user can see its value.
Information: These values are computed by the Routing method and includes all gains and loss terms on the reach
I/O: Output only.
Autoregressive Flow Coefficients
Type: Table
Units: No Units
Description: The coefficients that will be applied in the autoregression.
Information: The number of rows indicate the number of timesteps to use. The value in the first row is applied to the current Routed Flow. The value in the second row is applied to the first autoregressive term, i.e. Outflow[t-1]. Subsequent coefficients are applied to additional autoregressive terms, i.e. Outflow[t-(row-1)]. These coefficients should sum to 1.0 or an error will be issued at start of run. Select View, then Show Column Sum Row to verify the values sum to 1.0. Most likely, there should be two or more rows.
I/O: Required Input.
The Outflow is computed as follows:
Where B1 through BN are the coefficients in the Autoregressive Flow Coefficients slot. If the Routed Flow or Outflow is not valid, an error will be issued. At the beginning of the run, some prerun Outflows may need to be input for the Routing method to compute the first Routed Flow. If previous outflows are not available, but the timestep is within the first few timesteps of the run (defined as number of autoregressive coefficients plus offset/lag determined by the Routing method), the outflow will be set to the Routed Flow.
Diversion from Reach
This method category controls how the reach handles diversion. This category is available for all Routing methods except Step Response, Time Lag, Storage Routing, and Variable Storage Routing.
* None
This method is the default for this category. If no diversion is desired, this should be selected.
There are no slots specifically associated with this method.
* Available Flow Based Diversion
The user should select this method when an Agg Diversion Site, WaterUser, or a Diversion Object (using Available Flow Diversion) is linked to the Reach. Diversion could also be set as an input.
Slots Specific to This Method
Available for Diversion
Type: Series
Units: FLOW
Description: holds divertable flow in the reach, usually the inflow.
Information:  
I/O: Usually output, but can be input or set by a rule.
Diversion
Type: Series
Units: FLOW
Description: holds diversion value from Agg Diversion Site, or input.
Information:  
I/O: Optional; set to 0.0 if not input and not linked.
Diversion Capacity
Type: Scalar Slot
Units: FLOW
Description: used to hold the maximum diversion physically possible from the reach
Information: This slot is used in the accounting system for allocation purposes and can be used in Rulebased Simulation
I/O: Input only
Method Details
If the Available for Diversion is specified (input or set by a rule) OR the linked slot is specified (input or set by a rule), no further computations are performed. The specified Available for Diversion is used in the dispatch method.
When solving downstream
If a Min Diversion Bypass method is selected, Available for Diversion is calculated as Inflow minus Minimum Diversion Bypass. If there is a minimum specified on the Outflow (in the configuration dialog), the Available for Diversion is set to the Inflow minus the minimum outflow. Otherwise, Available for Diversion is set to the value in the Inflow slot. Available for Diversion is limited to be larger than zero, unless there is a negative inflow.
When solving upstream and Diversion is not valid but linked
Available for Diversion is set to the maximum value specified on the configuration dialog for Available for Diversion. If no maximum is configured, an error will stop the run.
Note:  Local Inflows into the reach are not included in the Available for Diversion.
* Head Based Diversion
This method may be selected when a Diversion Object, using either the Gravity or Pumped Diversion method, is linked to the Reach. The Stage Table Look Up or Inflow Stage Table Look Up method must be selected if this method is selected. See “Stage Table Look Up” and “Inflow Stage Table Look Up” for details.
This method allows the diversion object to check how much water is available to be diverted based on the elevation of the flow in the river.
Slots Specific to This Method
Diversion
Type: Series
Units: FLOW
Description: holds diversion value from Diversion Object, or input.
Information:  
I/O: Optional; set to 0.0 if not input and not linked.
Diversion Capacity
Type: Scalar Slot
Units: FLOW
Description: used to hold the maximum diversion physically possible from the reach
Information: This slot is used in the accounting system for allocation purposes and can be used in Rulebased Simulation
I/O: Input only
Water Elevation at Diversion
Type: Series
Units: FLOW
Description: holds water elevation at diversion
Information: This slot should be linked to the Diversion Object’s Diversion Intake Elevation slot.
I/O: Output only
Min Diversion Bypass
The Min Diversion Bypass methods are only available when Available Flow Based Diversion is selected in the Diversion from Reach method category. It is used to specify the minimum amount of water that should remain in the reach after diversion. After the diversion, however, the reach may lose additional water to seepage or gain water from return flow.
* None
This is the default method. It performs no calculations. There are no slots specifically associated with this method.
* Input Min Bypass
This method is used when the user wants to input the minimum amount of water that bypasses the diversion point.
Slots Specific to This Method
Minimum Diversion Bypass
Type: Series
Units: FLOW
Description: minimum amount of water remaining after diversion
Information:  
I/O: Optional; not used if not input
If Minimum Diversion Bypass is input, it used to calculate Available For Diversion as follows:
* Monthly Min Bypass Values
This method is used when the Minimum Diversion Bypass is dependent upon the month.
Slots Specific to This Method
Minimum Bypass Values
Type: Table
Units: FLOW
Description: a table of minimum diversion bypass values for each month
Information: One value is required for each month.
I/O: Required input
Minimum Diversion Bypass
Type: Series
Units: FLOW
Description: minimum amount of water remaining after diversion
Information: Calculated from the Minimum Bypass Values table
I/O: Output only
Minimum Diversion Bypass is set with a value from the Minimum Bypass Values table for the current month in the simulation. Available For Diversion is then calculated as follows:
* Monthly Min Bypass Coefficients
This method is used to compute Minimum Diversion Bypass from a coefficient that is dependent on the month.
Slots Specific to This Method
Minimum Bypass Coefficients
Type: Table
Units: NONE
Description: a table of bypass coefficients for each month
Information:  
I/O: Required input
Minimum Diversion Bypass
Type: Series
Units: FLOW
Description: minimum amount of water remaining after diversion
Information:  
I/O: Output only
Minimum Diversion Bypass is calculated with a value from the Minimum Bypass Coefficients table for the current month in the simulation by the following equation:
Available For Diversion is then calculated as follows:
* Periodic Min Bypass
This method computed the Minimum Diversion Bypass as a function of date/season as defined in a periodic slot.
Slots Specific to This Method
Periodic Minimum Bypass
Type: Periodic Slot
Units: flow
Description: The minimum diversion bypass as a function of season/date
Information: The current date is used to look up the Minimum Diversion Bypass from this slot.
I/O: Required Input
Minimum Diversion Bypass
Type: Series
Units: FLOW
Description: Minimum amount of water remaining after diversion
Information: This value is determined from the Periodic Minimum Bypass slot.
I/O: Output only
Reach Evaporation
This method category is used to model evaporation on a reach object.
* None
This is the default method. No calculations are performed and there are no slots associated with this method. It should be used if the user does not wish to model evaporation.
* Inflow Exponent Pan Evaporation
This method models evaporation based on empirical equations.The equations are as follows:
Note:  The exponential calculation is carried out in user units. The value set in the Exponent column of the Evaporation Data slot, as set by the user, must be consistent with the user units for the Inflow slot. Changing the user units on the Inflow slot will produce a different result. There will not be an automatic conversion of the Exponent value.
Slots Specific to This Method
Evaporation Data
Type: Table
Units: FLOW, TIME/LENGTH, NONE, AREA, NONE
Description: This table holds various coefficients and constants for the Inflow Exponent Pan Evaporation method. It holds the following values and units: Threshold Flow (FLOW), Coefficient (TIME/LENGTH), Exponent (NONE), Bankfull Surface Area (AREA), PanEvapCoeff (NONE).
Information: The value in the Exponent column must be consistent with the user units for the Inflow slot. If the user units on the Inflow slot are changed, the Exponent must be changed manually to correspond to the new units. Otherwise different results will be produced.
I/O: Input Only
Evaporation
Type: Series Slot
Units: FLOW
Description: This slot is the output to the Inflow Exponent Pan Evaporation method. It holds the losses as calculated by the empirical equations.
Information:  
I/O: Output only
Pan Evaporation
Type: Series
Units: VELOCITY
Description: This slot contains the pan evaporation coefficient
Information: This slot must have a valid value for the Inflow Exponent Pan Evaporation method.
I/O: Input only
* Pan Evaporation
This method models evaporation based on the pan evaporation rate, the surface area of the reach and a pan evaporation coefficient.
Slots Specific to This Method
Evaporation
Type: Series Slot
Units: FLOW
Description: This slot is the output to the Pan Evaporation method. It holds the losses as calculated by the equation.
Information:  
I/O: Output only
Pan Coefficient
Type: Periodic
Units: NoUnits
Description: This slot holds a coefficient that is applied to the computation.
Information: The coefficient should be greater than 0.0.
I/O: Required Input
Inflow Surface Area Table
Type: Table
Units: Flow vs Area
Description: Table relating Inflow to the reach to Surface Area
Information:  
I/O: Input Only
Pan Evaporation
Type: Series
Units: Velocity (Length/Time)
Description: This slot contains the pan evaporation rate.
Information: This slot must have a valid input or an error will occur.
Information: Input only
I/O: Can be linked
Surface Area
Type: Series
Units: Area
Description: The water surface area of the reach.
Information: The value in this slot is found by looking up the Inflow on the Inflow Surface Area Table
I/O: Output only
Method Details
To calculate evaporation, first, the Inflow is looked up on the Inflow Surface Area Table to compute and set the Surface Area. Then, the Pan Coefficient and Pan Evaporation are accessed and verified that there is valid data. Finally, Evaporation is computed as follows:
MODFLOW Link Category Reach
The MODFLOW Link Category is dependent upon the selection of No Routing, Time Lag, Variable Time Lag, Muskingum-Cunge, or Muskingum-Cunge Improved methods.
Caution:  RiverWare’s connection with MODFLOW is currently not functional. This category is hidden and the methods have been disabled and cannot be selected. An error will be posted at model load if this method was previously selected. Contact CADSWES for help.
* No Link to MODFLOW
No computations or slots are associated with the No Link to MODFLOW method, this is the default method for the MODFLOW Link Category.
* Link to MODFLOW
The Link to MODFLOW method will allow a Reach to be linked with MODFLOW. The Link to MODFLOW method does not preform any computations but is used to configure the model. Data transferred between RiverWare and MODFLOW, as well as any interpolation and summation of this data, will be handled within the computational subbasin framework.
Note:  RiverWare assumes a consistent datum throughout all related objects’ elevation and stages slots. See “Reach Object” for a description of the Reach-specific data configuration.
Slots Specific to This Method
Total MODFLOW GainLoss
Type: Series Slot
Units: flow
Description: The total gain or loss between the reach and the aquifer
Information: A positive number represents a gain while a negative number represents a loss, this value is applied to the bottom of the reach, i.e. it is added to the routed flow value calculated from the Routing method)
I/O: Output only
Flux between the reach and underlying groundwater will be calculated in MODFLOW. These individual MODFLOW cell fluxes will be summed within the computational subbasin framework, and the summed value will be automatically mapped to the Total MODFLOW GainLoss slot.
When using the Link to MODFLOW method, either the Inflow Stage Table Look Up or Stage Table Look Up method must be selected. A stage value is needed to calculate the Flux between the River and underlying groundwater and will be transferred through the computational subbasin framework to MODFLOW. See “Inflow Stage Table Look Up” and “Stage Table Look Up” for details.
If desired, when both the Link to MODFLOW method and a Diversion from Reach method are selected the existing Diversion slot value may be transferred to surface water body represented in MODFLOW through the computational subbasin framework.
Note:  The Diversion from Reach Category is not available for the Time Lag routing method.
A return flow from a surface water body represented in MODFLOW to a RiverWare Reach may be desired. When the Link to MODFLOW method and the Local Inflow MODFLOW Return method are selected a surface water return flow may be transferred from MODFLOW to the RiverWare Local Inflow MODFLOW Return slot through the computational subbasin framework.
Alternative Routing on Subbasin
This method category is used to provide alternative routing coefficients for use in subbasin methods.
* None
This is the default method. No calculations are performed and there are no slots associated with this method.
* Variable Step Coefficients
This method is used to provide variable step coefficients for use in subbasin methods that aggregate routing coefficients for a control point. See “Alternative Routing Coefficients Methods” in USACE‑SWD Modeling Techniques for details on the variable routing. This method allows the reach to solve one way in simulation dispatching, but another way in these subbasin methods.
Slots added by the method
Variable Lag Coefficients
Type: Table Slot
Units: Column Map Values - Flow, Table values - No Units
Description: A table defining the step response coefficients for each inflow threshold is shown.
Information: This table has a Column Map which means that each column has an associated numerical value (with units). This numerical value is displayed on as the column label. Columns are added and deleted from this table using the Column menu with the following options: Set Number of Columns, Append Column, Delete Column and Delete Last Column. User units, scale, type, and precision for the Column Map (i.e. the column heading values) are defined in the unit scheme for Flow unit types. Column map values are set from the Column, Set Column Value menu option. When a column value is changed, the columns will re-order to ensure that the column values are increasing left to right. The sum of coefficients in each column should equal 1.0. This can easily be verified by adding a summary row at the bottom of the table using the View, Show Column Sum Row menu option. When used in the Variable Step Response method, the column map values are used as a stair step lookup, e.g. an Inflow of 500cfs uses the first column, an inflow of 10,000cfs uses the second column, and an inflow of 120,000cfs uses the third column. Therefore, the column map values need not bound the highest expected flows; flows greater than the largest column map value use the right most column.
Note:  The left-most set of coefficients should represent the minimum flow in the reach.
I/O: Required Input
Dispatch Methods
The dispatch methods for the Reach allow the various Routing methods to solve, and execute whenever the reach has enough information to solve.
* SolveNROutflow
This method is available for the No Routing user method. It solves for Outflow when Inflow, and possibly Local Inflow, Return Flow, and Diversion are known, based on user method selection and the status of those slots.
Required Knowns
• Inflow
• Local Inflow, if one of the Solve or Contingent Local Inflow or Solve Outflow methods is selected; see “Local Inflow and Solution Direction”.
• Local Inflow MODFLOW Return, if the Local Inflow MODFLOW Return user method is selected.
Required Unknowns
• Outflow
If diversion or return flow is linked, the dispatch method will wait for a value in these slots before solving. If a value is set for the minimum outflow, the solved value for Outflow will be compared to the minimum. If the minimum has not been met, the outflow will be raised to the minimum, and the necessary inflow will be placed in the Local Inflow Adjust slot, if it is visible.
This dispatch method executes the methods in the following order.
1. Stage Calc
2. Reach Seepage (if One Timestep Seepage Lag is not selected)
3. Seepage Routing
4. Min Diversion Bypass
5. Diversion from Reach
6. Reach Evaporation
7. Reach Bank Storage
8. MODFLOW Link Category Reach
9. Gain Loss
10. Mass balance, as follows:
11. Negative Outflow Adjustment
12. Stage Calc
13. Reach Seepage (if One Timestep Seepage Lag is selected)
* SolveNRInflow
This method is available for the No Routing user method. It solves for Inflow when Outflow, and possibly Local Inflow, Return Flow, and Diversion are known, based on user method selection and the status of those slots.
Required Knowns
• Outflow
• Local Inflow, if the Specify Local Inflow, Solve Inflow or Outflow user method is selected; see “Specify Local Inflow, Solve Inflow or Outflow”.
• Local Inflow MODFLOW Return, if the user method is selected.
Required Unknowns
• Inflow
If diversion or return flow is linked, the dispatch method will wait for a value in these slots before solving. This dispatch method executes the methods in the following order.
1. Stage Calc
2. Diversion from Reach
3. MODFLOW Link Category Reach
4. Gain Loss
5. Reach Bank Storage
6. Reach Seepage (if One Timestep Seepage Lag is not selected)
7. Seepage Routing
8. Mass balance, as follows:
9. Stage Calc
10. Reach Seepage (if One Timestep Seepage Lag is selected)
* SolveNRLocalInflow
This method is available for the No Routing user method. It solves for Local Inflow when Inflow and Outflow, and possibly Return Flow, and Diversion are known, based on user method selection and the status of those slots.
Required Knowns
• Inflow
• Outflow
Required Unknowns
• Local Inflow
If diversion or return flow is linked, the dispatch method will wait for a value in these slots before solving. This dispatch method executes the methods in the following order.
1. Stage Calc
2. Reach Seepage (if One Timestep Seepage Lag is not selected)
3. Seepage Routing
4. Reach Evaporation
5. Min Diversion Bypass
6. Diversion from Reach
It then solves up for the following:
7. MODFLOW Link Category Reach
8. Gain Loss
9. Reach Bank Storage
It then solves mass balance as follows:
* solveTLInflow
This dispatch method is available for the Time Lag routing user method. This is a front for the Time Lag, Stage Calc, and Volume Calc methods, which do all the work. Inflow is found at some previous time when Outflow is known at the current timestep.
Required Knowns
• Outflow
Required Unknowns
• Inflow
* solveTLOutflow
This dispatch method is available for the Time Lag routing user method. This is a front for the Time Lag, Stage Calc, and Volume Calc methods, which do all the work. Outflow is found at some future time when Inflow is known at the current timestep.
Required Knowns
• Inflow
Required Unknowns
• Outflow
* solveTLInflowOutflow
This dispatch method is available for the Time Lag routing user method. This is a front for the Time Lag, Stage Calc, and Volume Calc methods, which do all the work. Outflow is found at some future date, and inflow is found at some previous time, when both are known at the current timestep.
Required Knowns
• Inflow
• Outflow
* solveTLOutflowDSOnly
This dispatch method is available if Time Lag routing is selected and the Specify Local Inflow, Solve Outflow or No Local Inflow, Solve Outflow user methods are selected. Outflow is found at some future timestep when inflow is known on the current timestep. Unlike the solveTLOutflow dispatch method which is able to solve both upstream and downstream depending on the knowns and unknowns, solveTLOutflowDSOnly can only solve in the downstream direction. In addition, this dispatch method calls the Stage Calc and Volume Calc methods. See “Specify Local Inflow, Solve Outflow” and “No Local Inflow, Solve Outflow” for details.
Required Knowns
• Inflow
* Solve Storage Routing Outflow
This dispatch method is available for the Storage Routing, Variable Storage Routing, and Modified Puls routing methods. The dispatch method executes the Routing, Stage Calc, and Volume Calc methods, which do all the work. Outflow is found at the current timestep when inflow is known at the current timestep.
Required Knowns
• Inflow
Required Unknowns
• Outflow
* solveOutflow
This is the dispatch method which all other Routing methods use. It executes the Stage, Min Diversion Bypass, Diversion from Reach, and then the Routing user methods. After the routing method, the Stage method is called again.
Required Knowns
• Inflow
Required Unknowns
• Outflow
Note:  If the Step Response, Variable Step Response, or Variable Time Lag routing method is selected, Outflow is not a required unknown. See “Step Response”, “Variable Step Response”, and “Variable Time Lag” for details.
 

1 Chow, Ven Te, David R. Maidment, and Larry W. Mays. Applied Hydrology. McGraw-Hill, NewYork, 1988.

2 Chow, Ven Te, David R. Maidment, and Larry W. Mays. Applied Hydrology. McGraw-Hill, NewYork, 1988.

3 Todini, E. 2007, A mass conservation and water storage consistent variable parameter Muskingum-Cunge approach, Hydrology and Earth System Sciences, vol 11, 1645-1659) http://www.hydrol-earth-syst-sci.net/11/1645/2007/hess-11-1645-2007.pdf

4 Chow, Ven Te, David R. Maidment, and Larry W. Mays. Applied Hydrology. McGraw-Hill, NewYork, 1988.

Revised: 06/03/2019