This blog was created by Kevin Fagot of WEST Consultants to demonstrate the modeling of reservoir systems in HEC-ResSim. Programming examples in Python and Jython (scripting language used in HEC-ResSim) are also shown. Since data development and analysis plays an important part in the development and use of this model, you will also find examples of this using Python, Microsoft Excel, and HEC-DSSVue. The posts are labeled by topic so you can use the menu below or search by topic.
For many studies involving ResSim, various operating criteria are applied to an existing system. In this post, I provide an example of using multiple watershed configurations to study the addition of a new reservoir to the system.
The figure below shows the existing system. In this system, there is a single reservoir located on the main stem. This configuration is named "existing system".
We can look at the details of this configuration. Notice that the reservoir is listed as being an existing reservoir.
To model a proposed reservoir on the tributary, we can save this configuration under the name, "proposed system" and add a reservoir on the tributary.
When looking at the details of this configuration, we notice that the proposed reservoir is not listed as being an existing reservoir.
This blog post details a study that I performed several years ago using HEC-ResSim. I presented the results of this analysis at the 2011 U.S. Society on Dams Annual Conference.
This analysis was necessary since two of the six spillway gates at this project had the potential to become inoperable. If this were to occur, an alternative reservoir operating plan would be needed.
The reservoir has the following pools:
The top of the flood pool corresponds to the top of the spillway gates in their closed position. Once the pool level is projected to exceed to the top of the flood pool, the spillway gates are opened creating a surcharge operation. However, if two gates are stuck in the down position, the surcharge operation is impacted by flow going over the top of the two gates stuck in the down position.
At this project, a family of curves is used to determine the surcharge operation. As can be seen in the figure below, the release increases much more significantly with pool elevation changes at the higher elevations (shown by the flattening of the curves). As one would expect, releases are greater for high inflows. These curves define the minimum release value for a given combination of pool elevation and inflow.
To develop the alternative operating plan, I analyzed several combinations of a reduced top of conservation level along with alterations to the surcharge curves. The alterations lead to a more aggressive release at a given pool elevation. The curve below shows the original surcharge envelope curve and the revised envelope curve. For the revised curve, the original curve is dropped down 1 foot. However, it should also be noted that it is shifted over to the right due to the values being increased by 35%. The original minimum required release at elevation 636.0 feet is approximately 25,000 cfs while the revised minimum required release is closer to 40,000 cfs.
I studied historical and synthetic events for this study. The figure below shows a comparison of results from various alternatives applied to the 1919 inflow event. Peak pool elevations and peak releases are shown.
For this study, there were numerous alternatives that would satisfy the desired parameters, however, some were discarded based on their impacts. For example, in the table above, one alternative involves dropping the top of conservation down to elevation 620.0 feet. This alternative was not desirable since it left this project with no conservation storage.
This post demonstrates the use of state variables to set a maximum release from a dam based on conditions on a specific date.
The first state variable that I created is named "relcode". In this state variable, I am setting a release code based on the pool elevation on 02 April. This code can be either 1, 2, or 3. The code remains at its current value if the date is not 02 April.
The second state variable is named "maxrel". In this state variable, I receive the value of "relcode". Based on that value, I then select the maximum release from the list within the state variable.
Since I initialized "relcode" to a value of 1, the maximum release is 400 cfs until the computation on 02 April occurs. Once this occurs, the pool elevation is high enough to allow for a release of 1,100 cfs. The use of the state variable in the rule set and the results of the simulation are shown below.
The release is shown by the green line on the bottom plot.
This is a simple demonstration on setting and holding a release based on the conditions at a given time step. Caution should be exercised in implementing this type of rule. In the example above, it should be noted that the maximum release would be held until 02 April occurs again. If this is the desired operation, the rules are sufficient; however, if it is not, additional rules would need to be written to incorporate the rules of operation.