Release Notes Version 1.2

This document describes new features, enhancements, and changes included in RiverWare Version 1.2, released on October 27, 1997.

These changes are new to the executable since the release of RiverWare Version 1.1 on July 7, 1997.

Please direct questions to CADSWES Technical Support at (303) 492-0908 or support@cadswes.colorado.edu

Required Model File Updates:

• Models using the Peak Power Calc or Peak Base Power Calc must be modified. The minimum and maximum Operating Head data which were input in the Min and Max fields of the Operating Head slot configuration must now be set on a new slot added for this purpose. See section 2B for more details.

Special Attention Notes:

• Unlinked Inflow slots of Reservoir objects no longer default to zero if not input by the user. All Reservoirs which are at the upstream boundaries of riverbasin models should be checked for proper inputs. If Inflow is an intended known value for dispatching of a Reservoir, it must either be propagated from an upstream link or directly input on the Inflow slot. Similarly, Water Quality Inflow Mass parameters no longer default to zero if the Reservoir Inflow is unlinked and not input. See section 1A for more details.

Simulation

Default Inflow

Unlinked Inflow slots of Reservoirs no longer default to zero for timesteps where they do not have user input values. This previous behavior had some undesirable effects on simulation and often caused confusion in the modeling approach. Existing models which rely on Inflow slot default values of zero for dispatching of upper-most reservoirs must be updated to produce the same results under RiverWare 1.2. For both Simulation and Rulebased Simulation, previously defaulted Inflow slots should be explicitly set to “0” for all simulation timesteps.

Models which perform water quality computations will also need to be updated. Water quality constituent Inflow quantities no longer default to zero when the Reservoir Inflow is unlinked. The following slots will now need user input of “0” for all simulation timesteps to produce the same results as previous RiverWare versions:

• Inflow Heat

• Inflow Salt Mass

• Inflow Detritus Mass

• Inflow Dissolved Organics Mass

• Inflow Ammonia Mass

• Inflow Dissolved Oxygen Mass

Slot Maximum Iterations

Exceeding the user-specified maximum iterations when setting a slot value now aborts the simulation run. This occurs when, during iteration, a slot’s value is set too many times. Normally, the iteration is terminated when the new slot value and the old slot value differ by less than the specified convergence value. Previously, when the maximum iterations was exceeded, a diagnostic warning message was posted, the new slot value was not set, and simulation proceeded. Since this could result in a violation of mass balance beyond the limits of the user-specified convergence value, the behavior was eliminated.

The iteration count of a slot is incremented every time a new value is set. There is a different iteration count for each timestep of the simulation and for each series slot of a model. Maximum iterations are set to 20 by default, but may be changed in each series slot’s Configuration menu. Exceeding maximum iterations is rare. Slow convergence of the solution can indicate a modeling problem. The cause of excessive iterations should be determined before arbitrarily increasing the maximum. In certain cases, the problem can also be solved by relaxing the slot’s convergence criteria.

This change applies both to Simulation and Rulebased Simulation. In Rulebased Simulation, however, iteration counting is turned off by default. To enable the checking of maximum iterations in Rulebased Simulation, turn on the Check Iterations checkbox in the Run Control Panel’s View Controller Specific Parameters Dialog. Rulebased slot iteration counters for all slots are reset each time a rule begins to execute.

Engineering Objects

Reservoirs

Listed below are all modifications made to Reservoir Objects.

Seepage Calculation Category

A new User Method Category called Seepage Calc has been added to all Reservoirs. The new Category is used to account for seepage through and around the face of a dam. There are two User Methods available for selection in this Category: the default No Seepage and Linear Seepage Calc. The default Method performs no computations and instantiates no slots.

The Linear Seepage Calc method calculates dam seepage based on the Pool Elevation of the Reservoir and a set of coefficients. The coefficients are a seepage base elevation, a linear slope coefficient, and a linear intercept coefficient. All three are input into the Seepage Coefficients table slot. The seepage is computed as:

Seepage = (average Pool Elevation - base elevation) x slope + intercept

Coefficients may be specified which produce a negative seepage; however, since seepage is not permitted to be less than zero, negative seepage values are automatically reset to zero. Seepage is a Reservoir loss in the mass balance, but is not considered part of any Outflows or Spills. Seepage may be linked to another slot if desired. The Inputs and Outputs for this Method are:

Slots with Required Input Data

• Seepage Coefficients (seepageCoeff)

– TableSlot

– LENGTH, AREAperTIME, FLOW

– base elevation, slope, and intercept of the linear equation

Slots with Output Data

• Seepage (seepage)

– SeriesSlot

– FLOW

– flow of water through and around the dam face

Hydrologic Inflow and Loss

A new User Method, Hydrologic Inflow and Loss, has been added to Level Power Reservoirs and Storage Reservoirs. This Method is selected in the Hydrologic Inflow Calculation Category. The Method allows Hydrologic Inflow and Hydrologic Inflow Adjust to be input by the user. If these slots are not linked, any timesteps which do not have input values default to zero. Hydrologic Inflow Net is then computed as the sum of the Hydrologic Inflow and the Hydrologic Inflow Adjust. All of this behavior occurs during the beginning of run, and is identical to the existing Input Hydrologic Inflow User Method.

The Hydrologic Inflow and Loss Method has special behavior when solving for Inflow using one of the following dispatch methods:

• solveMB_givenOutflowStorage

• solveMB_givenOutflowHW

• solveMB_givenEnergyStorage

• solveMB_givenEnergyHW

In these cases, the dispatching slot values may force the computation of a negative Inflow. If the dispatch method calculates a negative Inflow, the Hydrologic Inflow and Loss Method is invoked a second time. When the Method is invoked from a dispatch, it sets the Hydrologic Inflow Adjust to the value of the Inflow (a negative value), sets Inflow to zero, and recalculates the Hydrologic Inflow Net. If Hydrologic Inflow Adjust or Hydrologic Inflow Net are user input at this timestep, the run aborts with an error.

Slots with Optional Input Data

• Hydrologic Inflow (hydrologicInflow)

– SeriesSlot

– FLOW

– additional flow gain to the reservoir

– This value defaults to zero for any timesteps where it is not input.

• Hydrologic Inflow Adjust (hydrologicInflowAdjust)

– SeriesSlot

– FLOW

– adjustment to the additional flow gain to the reservoir

– This value defaults to zero for any timesteps where it is not input. The slot is set to a negative value for any timesteps where a negative Inflow would otherwise result. Under this circumstance, there may not be a user input value at the same timestep.

Slots with Output Data

• Hydrologic Inflow Net(hydrologicInflowNet)

– SeriesSlot

– FLOW

– net additional flow gain to the reservoir

– This slot value is the sum of the Hydrologic Inflow and Hydrologic Inflow Net.

Power Reservoirs

Listed below are all modifications made to Power Reservoir Objects.

Peak Power Calc and Peak Base Power Calc

The Peak Power Calc and Peak Base Power Calc User Methods have two modifications. A warning is no longer posted in the Diagnostics Output Window when the reservoir Pool Elevation is too low to generate power. The low Pool Elevation is not considered a modeling or system error. The Method accurately models this case, and simulation is unaffected.

The second modification concerns the minimum and maximum Operating Head. Previously, these values were set in the Min and Max fields of the Operating Head slot’s Configuration Dialog. This resulted in a warning message every time these criteria were violated. Since violation of the minimum or maximum Operating Head is common and acceptable for these Methods, the values are not the true minimum and maximum for the slot itself. These values are in fact Method parameters, and are now set on the Min and Max Operating Head slot. The new table slot has two rows, the first for minimum Operating Head, and the second for maximum Operating Head.

New Slot with Required Input Data

• Min and Max Operating Head (minMaxOpHead)

– TableSlot

– LENGTH, LENGTH

– the minimum and maximum recommended operating head

Storage Reservoirs

Listed below are all modifications made to Storage Reservoirs.

Cubic Bank Storage Calc

A new User Method, called Cubic Bank Storage Calc, has been added to the Bank Storage Calc Category of Storage Reservoirs. This Method has been developed to duplicate historical reservoir loss calculations for Brantley Reservoir. The calculated Change in Bank Storage is the volume of “net overall loss” including seepage, bank storage, and other unaccounted losses. Empirical coefficients are used to calculate a flow loss according to the following equation:

where y is the Reservoir flow loss, a and b are specific constants, and x is the current reservoir Pool Elevation. A different set of equation constants are used depending on whether the Reservoir Pool Elevation is rising or falling during the current timestep. The coefficients corresponding to rising and falling elevations are specified in the Cubic Bank Storage Rising Coeffs table and the Cubic Bank Storage Falling Coeffs table, respectively. If the Pool Elevation remains constant over the timestep, the coefficients corresponding to the last Pool Elevation change are used. If the Pool Elevation is constant during the first timestep(s) of the simulation, the falling coefficients table is used by default. Finally, the computed flow loss is converted to a volume loss for the timestep.

Slots with Required Input Data

• Cubic Bank Storage Falling Coefficients (cubicFallingCoeffs)

– TableSlot

– FLOW, PER_TIME

– constants for equation when reservoir level is falling

– The first coefficient is the constant term, and the second is the cubic coefficient.

• Cubic Bank Storage Rising Coefficients (cubicRisingCoeffs)

– TableSlot

– FLOW, PER_TIME

– constants for equation when reservoir level is rising

– The first coefficient (column zero) is the constant term, and the second is the cubic coefficient.

Slots with Output Data

• Change in Bank Storage (deltaBankStorage)

– SeriesSlot

– VOLUME

– change in volume of water stored in the reservoir banks

Rulebased Simulation

Due to many changes in the Rulebased Simulation Controller and Rule Processor over the past several releases, an overview is included at the end of these release notes. See the overview for a complete picture of the current Rulesbased Simulation logic.

Maximum Rule Execution Iterations

The Rulebased Simulation controller now keeps track of Rule execution iterations. The iteration count is used to interrupt a run if a Rule executes more than 50 times in a single timestep. Previously, there was no way to interrupt infinite loops in the iteration between Rules and Simulation.

Group Set of Slot Assignments

Checking of dispatch conditions is now delayed until all of a Rule’s slot assignments have been made. Previously, objects checked their dispatch conditions whenever a dispatching slot value was set. For Rules which only set a single slot, this created no ambiguity. For Rules which set multiple slots, however, this allowed objects to be placed on the dispatch queue even if the Rule had other slots yet to be set on this object. In some cases, the slots remaining to be set would have forced a different dispatch method to be selected. To alleviate any ambiguity, dispatch conditions are no longer checked until all of a Rule’s slot assignments have been made.

Simulation Errors During Rule Execution

Errors generated during Rule execution calls to Simulation functions no longer abort the run. Errors are now returned to the Rule Processor for interpretation. Previously, any error generated in a Simulation engineering function which was called during the execution of a Rule automatically posted a message and aborted the run (the Simulation Controller still behaves this way). The Rule Processor, however, now catches simulation errors and terminates the executing rule instead. The rule does not continue, and no slot assignments are made. The rule may re-fire at a later time.

RiverWare Tcl procedures which invoke methods on the Engineering Objects are prevented from aborting the run. Since these functions solve hypothetical problems for the rules only and do not set slots, their failure should only impact the currently executing rule. All Tcl procedures, however, will continue to abort the run if fundamental errors are detected (incomplete arguments, invalid dates/times, etc.). The effects of errors in each of the currently defined Tcl procedures included in RiverWare are as follows:

RiverWare Tcl Procedure | Effect of Error | RiverWare Tcl Procedure | Effect of Error |
---|---|---|---|

C_SolveInflow | Terminate Rule | all C_<Get/Set><Value/List> | Abort Run |

C_SolveOutflow | Terminate Rule | C_IsNaN | Abort Run |

C_SolveStorage | Terminate Rule | all C_Sum<Table/Object>List | Abort Run |

C_TableInterpolate | Terminate Rule | C_Exit | Abort Run |

C_StorageToArea | Terminate Rule | C_GetAllNamedBasins | Abort Run |

C_ElevationToArea | Terminate Rule | C_GetObjectsInBasin | Abort Run |

C_ElevationToStorage | Terminate Rule | all C_AggOver<Obj/Time> | Abort Run |

C_ElevationToMaxRegulatedSpill | Terminate Rule | C_ConvertValue | Abort Run |

C_ElevationToUnregulatedSpill | Terminate Rule | C_FlowToVolume | Abort Run |

C_OperatingHeadToMaxRelease | Terminate Rule | C_VolumeToFlow | Abort Run |

C_GetMaxOutflowGivenInflow | Terminate Rule | all C_CopySlot<s> | Abort Run |

C_GetMaxOutflowGivenStorage | Terminate Rule | all C_ConstrainSlot | Abort Run |

C_GetMaxOutflowGivenHW | Terminate Rule | all C_Get<Date/Time> | Abort Run |

C_NetNonShortDiversionRequirement | Terminate Rule | all C_Incr<Date/Time> | Abort Run |

C_Six02a | Terminate Rule | all C_Decr<Date/Time> | Abort Run |

C_CriticalPeriodUBDepletions | Terminate Rule | all C_<reset>RandDev | Abort Run |

C_TargetSpace | Terminate Rule | C_GetStepSeconds | Abort Run |

C_MaxAllowableStorage | Terminate Rule | C_Min | Abort Run |

C_ReleaseNeeded | Terminate Rule | C_Max | Abort Run |

C_InflowAbove | Terminate Rule | C_Print | Abort Run |

C_ConsumptionAbove | Terminate Rule | C_Trace | Abort Run |

C_PredictedInflow | Terminate Rule |

Average Pool Elevation for Max Outflow Tcl Routines

The average Pool Elevation over the current timestep is now used to determine the maximum Release and Spill for C_getMaxOutflowGiven<Inflow/Storage/HW> Custom Tcl Routines. Previously, the Pool Elevation at the end of the current timestep (current Pool Elevation) was used. Now, the Pool Elevation at the beginning of the current timestep (previous Pool Elevation) is averaged with the most recent estimate of the Pool Elevation at the end of the current timestep. This average elevation is used in the Max Release/Max Turbine Q, Unregulated Spill Table, and Regulated Spill Table (if applicable) to determine the maximum Outflow.

getMaxOutflowGivenInflow Tcl Routine

The getMaxOutflowGivenInflow Custom Tcl Routine has been modified to not require a Pool Elevation value as a seed to the iterative solution. The new arguments for this function are as follows:

• C_getMaxOutflowGivenInflow reservoir inflow inflowScale inflowUnits

• outflowReturnScale

• outflowReturnUnits

Change Requests Completed

The following is a list of the bugs which were fixed for this release. If you wish to view the details for a specific bug, please browse to http://cadswes.colorado.edu/users/gnats-query.html and search our bug database. You will need a RiverWare user login and password.

959 | 1014 | 1269 | 1274 | 1285 | 1286 | 1302 |

1309 | 1317 | 1321 | 1324 | 1325 | 1340 | 1345 |

1347 | 1349 | 1351 | 1352 | 1357 | 1359 | 1360 |

1362 | 1363 | 1364 | 1365 | 1367 | 1368 | 1374 |

1375 | 1379 | 1380 | 1381 | 1389 | 1396 | 1397 |

1399 | 1404 | 1407 | 1408 | 1419 | 1420 |

Revised: 06/03/2019