Pump

Pump water from a source node to a destination node. The set flow rate will be pumped unless the intake storage is less than \(10~m^3\), in which case the flow rate will be linearly reduced to \(0~m^3/s\). The intake must be either a Basin or LevelBoundary. When PID controlled, the pump must point away from the controlled basin in terms of links.

1 Tables

1.1 Static

column type unit restriction
node_id Int32 -
flow_rate Float64 \(\text{m}^3/\text{s}\) non-negative
min_flow_rate Float64 \(\text{m}^3/\text{s}\) (optional, default 0.0)
max_flow_rate Float64 \(\text{m}^3/\text{s}\) (optional)
min_upstream_level Float64 \(\text{m}\) (optional)
max_downstream_level Float64 \(\text{m}\) (optional)
control_state String - (optional)

1.2 Time

This table is the transient form of the Pump table. With this all parameters can be updated over time. In between the given times the values are block interpolated (forward fill), and outside the values are constant given by the nearest time value. Note that a node_id can be either in this table or in the static one, but not both.

column type unit restriction
node_id Int32 -
time DateTime -
flow_rate Float64 \(\text{m}^3/\text{s}\) non-negative
min_flow_rate Float64 \(\text{m}^3/\text{s}\) (optional, default 0.0)
max_flow_rate Float64 \(\text{m}^3/\text{s}\) (optional)
min_upstream_level Float64 \(\text{m}\) (optional)
max_downstream_level Float64 \(\text{m}\) (optional)

2 Equations

The behavior of a Pump is simple if these nodes are not PID controlled. Their flow is given by a fixed flow rate \(q\), multiplied by reduction factors:

\[ Q = \mathrm{clamp}(\phi Q_\text{set}, Q_{\min}, Q_{\max}) \]

  • \(Q\) is the realized Pump flow rate.
  • \(Q_\text{set}\) is the Pump’s target flow_rate.
  • \(Q_{\min}\) and \(Q_{\max}\) are the Pump min_flow_rate and max_flow_rate.
  • \(\phi\) is the reduction factor, which smoothly reduces flow based on all of these criteria:
    • The upstream volume is below the equivalent of a water depth of \(10 \;\text{cm}\) (change with solver setting depth_threshold, the others below with level_difference_threshold).
    • The upstream level is below min_upstream_level + \(0.02 \;\text{m}\)
    • The downstream level is above max_downstream_level - \(0.02 \;\text{m}\)