Troubleshooting Controls in WaterCAD and WaterGEMS

  Product(s): WaterGEMS, WaterCAD
  Version(s): V8i, CONNECT Edition
  Area:  Modeling


Controls do not appear to be working as expected. For example pumps (or other elements such as valves) do not appear to be following their controls.


There are a few things that should be checked to ensure that the controls are set up properly:

1) Control Sets: Check to make sure that the controls in question are enabled in the Operational Alternative. First, with the scenario in question active, navigate to Analysis > Alternatives, then open the Operational alternative assigned to that scenario. Note the control set, click the ellipsis button (...), then make sure that the controls are present in that control set. If they are not, add them.

2) Simple controls calculation option for Steady State: If you are computing a steady state simulation, check the calculation option set assigned to your scenario and check if the "Use simple controls in steady state?" is set to True. If it is, ensure that the controls in question are marked as Simple control (as opposed to logical, which are only supported in Extended Period Simulations - EPS). There are also some types of controls that are not supported in steady state (you'll see  User Notification for these) in which case you can simply manually set the initial status of the action element based on the condition in that steady state.

3) Check for multiple, conflicting controls and properly set Priority: Make sure you're accounting for all controls currently set on the element in question. For example if the problem is with a pump, open the pump's properties and click the ellipsis button next to the "Controls" "Collection". This will display all the controls currently being used on that element. You may find that there are multiple controls and/or conditions that control the element in question. If this is expected, check the "Priority", noting that 5 is the highest priority and 1 is the lowest. Note that Priority only works with Logical controls, so ensure that all controls that could have conflicting actions are set as a logical controls, if you need to use Priority.

4) Check for endless-loop conditions: Make sure that your controls are not set up in such a way that a particular control's action does not immediately result in conditions that cause the opposite control to trigger. If the status of the action element doesn't appear to be correct based on the controls, check the "Intra-Trial Status Messages" tab in the Calculation Summary (available in SELECTSeries 5 and higher, build This will display status changes that occur during a trial. If you see certain elements switching status in a given time step, it's an indication that there is some instability causing the status to oscillate.

For example if you have a pump turn on and off based on pressure at a junction, it's possible that the act of turning on the pump may instantly trigger the pump to turn back off based on the pressure set points. In this case you will want to model the "dead range" by introducing a gap between the on and off pressure conditions. For example If P>90 Then Off / If P<81 Then On.

In another example, if you have a single control set to turn a pump on at some condition, with the "Else" statement used to turn it off, then the act of turning the pump on may cause the pump=on condition to no longer be true, and the Else statement would trigger the pump to immediately turn back off. In this case it is better to use two controls, one to turn the pump on and the other to turn it off, with some range between them.

This could also happen for example when using flow as a condition. In this case, the time step may balance on a condition that may appear to be at odds with the control. In this case, you will notice the pump changing status in the Intra-Trial Status Messages tab, when clicking on the time step in question. Another common example would be dynamic valves like PRVs and PSVs. For example a PRV becoming active may cause another PRV to become active, which then causes the first one to become open, and so on. If this occurs, you'll see the PRVs show up multiple times in the intra-trial status messages tab.

5) Simplify complex controls - if you're trying to model a complex control, consider splitting into its components pieces, with a "Dead range" introduced (rather than trying to use single controls with many "and" and "or" operators.) For time-based controls if you have multiple ranges during the simulation, be aware of the differences between "time from start" and "clock time" controls and consider using a pattern instead. See: Using "Clock Time" and "Time From Start" Controls

6) Use graphs to view the conditions and actions. For example, if the control is based on tank hydraulic grade and pump status, select both the tank and the pump, Right-click > Graph, then select hydraulic grade for the tank and flow for the pump. From here, you can get a good visual of the condition and the action, to double-check if the action is occurring when the condition warrants.

7) HGL vs. Level: For tank-based controls, check to make sure the correct values are used based on the tank condition's "storage attribute". If "hydraulic grade" is selected, the values used should be hydraulic grades (sea level datum) whereas if "level" is used, the values are distances above the tank bottom.

8) Use of equals-to: Check the operator on any controls that include tanks. Controls that exclusively use an equals (=) sign can skip over the value entered in the control. For instance, if a pump is set to turn on when the tank level is less than 5 feet and you enter the condition of the control as "IF Tank Level = 5 feet THEN..." the control will only be triggered if the tank level is exactly 5.00 feet. If it is a little less or a little more, it will not. It is better to use the greater than or less than operator for tank elevations and levels. This will assure that the condition is met.

9) Ensure all timesteps are displayed: Check to make sure that you are seeing all time steps in your graph. In the calculation options, set "Reporting Time Step" to "All", to ensure that intermediate timesteps are not being skipped over on graphs.

10) Make sure the model is balanced during the time steps when the control should be operating. In the Calculation Summary, you will see a red icon next to a trial if it is not balanced, plus a message in the tabs at the bottom and in the User Notification window. An unbalanced network indicates instability in the calculation which needs to be resolved before the results can be trusted. See more here: Troubleshooting the Network Unbalanced or Cannot solve network hydraulic equations user notification

11) Trace the flow/HGL: If you believe a tank should be filling yet the model shows it draining (or vice versa) because of pump controls that appear to be operating correctly, try tracing the HGL using profiles. For example a tank may still be filling when upstream pumps turn off, because of a high HGL from elsewhere in the system, such as another pump/tank, or from an inflow (negative demands). Select a timestep when this occurs, and follow the flow arrows starting at the tank in question, checking the HGL along the way. You can also use tracing tools in Network Navigator.

12) Make sure the correct elements are used for the conditions and actions. If there are duplicate labels for elements, this may lead to some confusion. Based the controls on the element ID, which is always unique or relabel elements to be unique. 

13) Controls for pumps might not be applied because the Pattern is overriding the controls.  Try setting the pumps to Is Variable Speed Pump? = False.

14) Check if conditions and actions are shared with other controls. See how you can determine if they are shared and ways to remedy it here: How to determine if a condition or action is being shared with other controls?

See Also

What is the difference between a Simple Control and a Logical Control?

Creating Controls - Conditions, Actions, and Control Sets (CONNECT Edition and V8i SELECTseries 6)