modelPartialPumpParallel
Partial model for pump parallel
Extends from Buildings.Fluid.Interfaces.PartialTwoPortInterface (Partial model with two ports and declaration of quantities that are used by many models), Buildings.Fluid.Actuators.BaseClasses.ValveParameters (Model with parameters for valves).
Information
Partial model for num parallel pumps, each with an isolation valve to
avoid recirculation.
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| Buildings.Fluid.Movers.Data.Generic[num] | per | ||
| Boolean | homotopyInitialization | true | = true, use homotopy method |
| Integer | num | 2 | The number of pumps |
| Real | threshold | 0.05 | Hysteresis threshold |
| Assumptions | |||
| Boolean | allowFlowReversal (from PartialTwoPort) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal |
| Nominal condition | |||
| Modelica.Units.SI.MassFlowRate | m_flow_nominal (from PartialTwoPortInterface) | Nominal mass flow rate | |
| Modelica.Units.SI.PressureDifference | dpValve_nominal (from ValveParameters) | Nominal pressure drop of fully open valve, used if CvData=Buildings.Fluid.Types.CvTypes.OpPoint | |
| Advanced | |||
| Modelica.Units.SI.MassFlowRate | m_flow_small (from PartialTwoPortInterface) | 1E-4*abs(m_flow_nominal) | Small mass flow rate for regularization of zero flow |
| Advanced › Diagnostics | |||
| Boolean | show_T (from PartialTwoPortInterface) | false | = true, if actual temperature at port is computed |
| Flow Coefficient | |||
| Buildings.Fluid.Types.CvTypes | CvData (from ValveParameters) | Buildings.Fluid.Types.CvTypes.OpPoint | Selection of flow coefficient |
| Real | Kv (from ValveParameters) | Kv (metric) flow coefficient [m3/h/(bar)^(1/2)] | |
| Real | Cv (from ValveParameters) | Cv (US) flow coefficient [USG/min/(psi)^(1/2)] | |
| Modelica.Units.SI.Area | Av (from ValveParameters) | Av (metric) flow coefficient | |
| Pressure-flow linearization | |||
| Real | deltaM (from ValveParameters) | 0.02 | Fraction of nominal flow rate where linearization starts, if y=1 |
| Advanced › Nominal condition | |||
| Modelica.Units.SI.Density | rhoStd (from ValveParameters) | Inlet density for which valve coefficients are defined | |
| Pump | |||
| Boolean | addPowerToMedium | false | Set to false to avoid any power (=heat and flow work) being added to medium (may give simpler equations) |
| Dynamics › Pump | |||
| Modelica.Units.SI.Time | tau | 1 | Time constant at nominal flow (if energyDynamics <> SteadyState) |
| Boolean | use_riseTime | true | Set to true to continuously change motor speed |
| Modelica.Units.SI.Time | riseTime | 30 | Time needed to change motor speed |
| Modelica.Blocks.Types.Init | init | Modelica.Blocks.Types.Init.InitialOutput | Type of initialization (no init/steady state/initial state/initial output) |
| Real | yPump_start | fill(0, num) | Initial value of pump signals |
| Dynamics › Valve | |||
| Boolean | use_strokeTime | true | Set to true to continuously change valve position |
| Modelica.Units.SI.Time | strokeTime | riseTime | Time needed to open or close valve |
| Real | yValve_start | fill(1, num) | Initial value of valve signals |
| Two-way valve | |||
| Real | l | 0.0001 | Valve leakage, l=Kv(y=0)/Kv(y=1) |
| Dynamics › Conservation equations | |||
| Modelica.Fluid.Types.Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamics.DynamicFreeInitial | Type of energy balance: dynamic (3 initialization options) or steady state |
| Initialization | |||
| Medium.AbsolutePressure | p_start | Medium.p_default | Start value of pressure |
| Medium.Temperature | T_start | Medium.T_default | Start value of temperature |
| Medium.MassFraction[Medium.nX] | X_start | Medium.X_default | Start value of mass fractions m_i/m |
| Medium.ExtraProperty[Medium.nC] | C_start | fill(0, Medium.nC) | Start value of trace substances |
| Medium.ExtraProperty[Medium.nC] | C_nominal | fill(1E-2, Medium.nC) | Nominal value of trace substances. (Set to typical order of magnitude.) |
| Flow resistance | |||
| Boolean | from_dp | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
| Boolean | linearizeFlowResistance | false | = true, use linear relation between m_flow and dp for any flow rate |
Connectors
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Fluid.Interfaces.FluidPort_a | port_a (from PartialTwoPort) | Fluid connector a (positive design flow direction is from port_a to port_b) | |
| Modelica.Fluid.Interfaces.FluidPort_b | port_b (from PartialTwoPort) | Fluid connector b (positive design flow direction is from port_a to port_b) | |
| Modelica.Blocks.Interfaces.RealInput[num] | u | Continuous input signal for the flow machine | |
| Modelica.Blocks.Interfaces.RealOutput[num] | P | Electrical power consumed by the pumps |
Components
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Units.SI.MassFlowRate | m_flow (from PartialTwoPortInterface) | port_a.m_flow | Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) |
| Modelica.Units.SI.PressureDifference | dp (from PartialTwoPortInterface) | port_a.p - port_b.p | Pressure difference between port_a and port_b |
| Medium.ThermodynamicState | sta_a (from PartialTwoPortInterface) | if allowFlowReversal then Medium.setState_phX(port_a.p, noEvent(actualStream(port_a.h_outflow)), noEvent(actualStream(port_a.Xi_outflow))) else Medium.setState_phX(port_a.p, noEvent(inStream(port_a.h_outflow)), noEvent(inStream(port_a.Xi_outflow))) | Medium properties in port_a |
| Medium.ThermodynamicState | sta_b (from PartialTwoPortInterface) | if allowFlowReversal then Medium.setState_phX(port_b.p, noEvent(actualStream(port_b.h_outflow)), noEvent(actualStream(port_b.Xi_outflow))) else Medium.setState_phX(port_b.p, noEvent(port_b.h_outflow), noEvent(port_b.Xi_outflow)) | Medium properties in port_b |
| Buildings.Fluid.Movers.BaseClasses.PartialFlowMachine[num] | pum | ||
| Buildings.Fluid.Actuators.Valves.TwoWayLinear[num] | val | Isolation valves | |
| Buildings.Controls.OBC.CDL.Reals.Hysteresis[num] | hys | Hysteresis for isolation valves | |
| Buildings.Controls.OBC.CDL.Reals.Switch[num] | swi | Switch to enable pump only once the valve is commanded open |
Revisions
-
June 17, 2026, by Michael Wetter:
Updated implementation to allow a flow coefficientnthat is different from2. This allows use of the model for not fully turbulent flow.
This is for Buildings, #4620. -
March 1, 2023, by Michael Wetter:
Changed constants from0to0.0and1to1.0.
This is for #3267. -
November 16, 2022, by Michael Wetter:
Improved sequence to avoid switching pump on when the valve is commanded off. -
November 15, 2022, by Michael Wetter:
Set initial state of valve to be open, and changed rise time of valve to be the same as pump.
This is for IBPSA, issue 1659. -
March 3, 2022, by Michael Wetter:
MovedmassDynamicstoAdvancedtab and added assertion for correct combination of energy and mass dynamics.
This is for IBPSA, issue 1542. -
April 14, 2020, by Michael Wetter:
ChangedhomotopyInitializationto a constant.
This is for IBPSA, Buildings, #1341. -
September 2, 2017, by Michael Wetter:
Removed sign with hysteresis to avoid chattering. -
June 30, 2017, by Yangyang Fu:
First implementation.