OpenSWMM Engine  6.0.0-alpha.1
Data-oriented, plugin-extensible SWMM Engine (6.0.0-alpha.1)
Loading...
Searching...
No Matches
Controls.hpp File Reference

Rule-based control engine — full legacy parity. More...

#include <vector>
#include <string>
#include <unordered_map>
#include "../math/MathExpr.hpp"
Include dependency graph for Controls.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  openswmm::controls::Premise
 
struct  openswmm::controls::Action
 
struct  openswmm::controls::PIDState
 
struct  openswmm::controls::NamedVariable
 
struct  openswmm::controls::Rule
 
class  openswmm::controls::ControlEngine
 
struct  openswmm::controls::ControlEngine::PremiseSoA
 Pre-sorted premise index for batch evaluation. More...
 

Namespaces

namespace  openswmm
 
namespace  openswmm::controls
 

Enumerations

enum class  openswmm::controls::CompareOp : int {
  openswmm::controls::EQ = 0 ,
  openswmm::controls::NE = 1 ,
  openswmm::controls::LT = 2 ,
  openswmm::controls::LE = 3 ,
  openswmm::controls::GT = 4 ,
  openswmm::controls::GE = 5
}
 
enum class  openswmm::controls::LogicOp : int {
  openswmm::controls::AND = 0 ,
  openswmm::controls::OR = 1
}
 
enum class  openswmm::controls::ConditionVar : int {
  openswmm::controls::NODE_DEPTH = 0 ,
  openswmm::controls::NODE_MAXDEPTH = 1 ,
  openswmm::controls::NODE_HEAD = 2 ,
  openswmm::controls::NODE_VOLUME = 3 ,
  openswmm::controls::NODE_INFLOW = 4 ,
  openswmm::controls::LINK_FLOW = 10 ,
  openswmm::controls::LINK_DEPTH = 11 ,
  openswmm::controls::LINK_SETTING = 12 ,
  openswmm::controls::LINK_STATUS = 13 ,
  openswmm::controls::LINK_FULLFLOW = 14 ,
  openswmm::controls::LINK_FULLDEPTH = 15 ,
  openswmm::controls::LINK_VELOCITY = 16 ,
  openswmm::controls::LINK_LENGTH = 17 ,
  openswmm::controls::LINK_SLOPE = 18 ,
  openswmm::controls::LINK_TIMEOPEN = 19 ,
  openswmm::controls::LINK_TIMECLOSED = 20 ,
  openswmm::controls::GAGE_RAIN = 30 ,
  openswmm::controls::GAGE_RAIN_PAST = 31 ,
  openswmm::controls::SIM_TIME = 40 ,
  openswmm::controls::SIM_DATE = 41 ,
  openswmm::controls::CLOCK_TIME = 42 ,
  openswmm::controls::SIM_DAY = 43 ,
  openswmm::controls::SIM_MONTH = 44 ,
  openswmm::controls::SIM_DAYOFYEAR = 45
}
 
enum class  openswmm::controls::ActionType : int {
  openswmm::controls::NUMERIC = 0 ,
  openswmm::controls::CURVE = 1 ,
  openswmm::controls::TIMESERIES = 2 ,
  openswmm::controls::PID = 3
}
 

Detailed Description

Rule-based control engine — full legacy parity.

Complete reimplementation matching legacy controls.c capabilities:

  • All condition variable types (node/link/gage/system attributes)
  • All action types (direct, curve-based, timeseries-based, PID)
  • Named variables and math expression evaluation
  • Time-aware comparison with half-step tolerance
  • Priority-based action deduplication
  • Short-circuit AND evaluation
Note
Legacy reference: src/legacy/engine/controls.c
Author
Caleb Buahin caleb.nosp@m..bua.nosp@m.hin@g.nosp@m.mail.nosp@m..com
License\n MIT License