Buildings.Experimental.DHC.Plants.Combined.Subsystems

Package of models for subsystems of combined plants

Information

This package contains models of components used in combined heating and cooling plants.

Extends from Modelica.Icons.VariantsPackage (Icon for package containing variants).

Package Content

Name Description
Buildings.Experimental.DHC.Plants.Combined.Subsystems.ChillerGroup ChillerGroup Model of multiple identical chillers in parallel
Buildings.Experimental.DHC.Plants.Combined.Subsystems.ChillerHeatRecoveryGroup ChillerHeatRecoveryGroup Model of multiple identical heat recovery chillers in parallel
Buildings.Experimental.DHC.Plants.Combined.Subsystems.CoolingTowerGroup CoolingTowerGroup Model of multiple identical cooling towers in parallel
Buildings.Experimental.DHC.Plants.Combined.Subsystems.HeatPumpGroup HeatPumpGroup Model of multiple identical air-source heat pumps in parallel
Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsDp MultiplePumpsDp Model of multiple identical pumps in parallel with dp-controlled pump model
Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsFlow MultiplePumpsFlow Model of multiple identical pumps in parallel with flow-controlled pump model
Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsSpeed MultiplePumpsSpeed Model of multiple identical pumps in parallel with speed-controlled pump model
Buildings.Experimental.DHC.Plants.Combined.Subsystems.Validation Validation Package with validation models
Buildings.Experimental.DHC.Plants.Combined.Subsystems.BaseClasses BaseClasses Package with base classes

Buildings.Experimental.DHC.Plants.Combined.Subsystems.ChillerGroup Buildings.Experimental.DHC.Plants.Combined.Subsystems.ChillerGroup

Model of multiple identical chillers in parallel

Buildings.Experimental.DHC.Plants.Combined.Subsystems.ChillerGroup

Information

This model represents a set of identical water-cooled compression chillers that are piped in parallel. Modulating isolation valves are included on condenser and evaporator side.

Control points

The following input and output points are available.

Details

Modeling approach

In a parallel arrangement, all operating units have the same operating point, provided that the isolation valves are commanded to the same position. This allows modeling the heat transfer through the condenser and evaporator barrel with a single instance of Buildings.Fluid.Chillers.ElectricReformulatedEIR. Hydronics are resolved with mass flow rate multiplier components in conjunction with instances of Buildings.Experimental.DHC.Plants.Combined.Subsystems.BaseClasses.MultipleValves which represent the parallel network of valves and fixed resistances.

Actuators

By default, linear valve models are used. Those are configured with a pressure drop varying linearly with the flow rate, as opposed to the quadratic dependency usually considered for a turbulent flow regime. This is because the whole plant model contains large nonlinear systems of equations and this configuration limits the risk of solver failure while reducing the time to solution. This has no significant impact on the operating point of the circulation pumps when a control loop is used to modulate the valve opening and maintain the flow rate or the leaving temperature at setpoint. Then, whatever the modeling assumptions for the valve, the control loop ensures that the valve creates the adequate pressure drop and flow, which will simply be reached at a different valve opening with the above simplification.

Extends from Buildings.Fluid.Interfaces.PartialFourPortInterface (Partial model transporting fluid between two ports without storing mass or energy).

Parameters

TypeNameDefaultDescription
replaceable package Medium1PartialMediumMedium 1 in the component
replaceable package Medium2PartialMediumMedium 2 in the component
IntegernUni Number of units operating at design conditions
Genericdatredeclare parameter Fluid.Ch...Chiller parameters (each unit)
Nominal condition
MassFlowRatem1_flow_nominalmConWat_flow_nominalNominal mass flow rate [kg/s]
MassFlowRatem2_flow_nominalmChiWat_flow_nominalNominal mass flow rate [kg/s]
PressureDifferencedpEva_nominal Design chiller evaporator pressure drop (each unit) [Pa]
PressureDifferencedpCon_nominal Chiller condenser design pressure drop (each unit) [Pa]
Assumptions
BooleanallowFlowReversal1true= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1
BooleanallowFlowReversal2true= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 2
Advanced
MassFlowRatem1_flow_small1E-4*abs(m1_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
MassFlowRatem2_flow_small1E-4*abs(m2_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
Diagnostics
Booleanshow_Tfalse= true, if actual temperature at port is computed
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
Filtered opening
Booleanuse_inputFilterenergyDynamics <> Modelica.F...= true, if opening is filtered with a 2nd order CriticalDamping filter
TimeriseTime120Rise time of the filter (time to reach 99.6 % of an opening step) [s]
InitinitModelica.Blocks.Types.Init.I...Type of initialization (no init/steady state/initial state/initial output)
Realy_start1Initial position of actuator

Connectors

TypeNameDescription
FluidPort_aport_a1Fluid connector a1 (positive design flow direction is from port_a1 to port_b1)
FluidPort_bport_b1Fluid connector b1 (positive design flow direction is from port_a1 to port_b1)
FluidPort_aport_a2Fluid connector a2 (positive design flow direction is from port_a2 to port_b2)
FluidPort_bport_b2Fluid connector b2 (positive design flow direction is from port_a2 to port_b2)
input BooleanInputy1[nUni]Chiller On/Off command
input RealInputTSetSupply temperature setpoint [K]
output RealOutputPPower drawn [W]
input RealInputyValCon[nUni]Chiller condenser isolation valve commanded position [1]
input RealInputyValEva[nUni]Chiller evaporator isolation valve commanded position [1]
output RealOutputTConLvg[nUni]Chiller condenser leaving temperature [K]
output RealOutputmCon_flow[nUni]Chiller condenser barrel mass flow rate [kg/s]
output RealOutputTEvaLvg[nUni]Chiller evaporator leaving temperature [K]
output RealOutputmEva_flow[nUni]Chiller evaporator barrel mass flow rate [kg/s]

Modelica definition

model ChillerGroup "Model of multiple identical chillers in parallel" extends Buildings.Fluid.Interfaces.PartialFourPortInterface( final m1_flow_nominal = mConWat_flow_nominal, final m2_flow_nominal = mChiWat_flow_nominal); parameter Integer nUni(final min=1, start=1) "Number of units operating at design conditions"; final parameter Modelica.Units.SI.Temperature TChiWatSup_nominal= dat.TEvaLvg_nominal "Design (minimum) CHW supply temperature"; final parameter Modelica.Units.SI.Temperature TConWatLvg_nominal= dat.TConLvg_nominal "Design (maximum) CW leaving temperature"; final parameter Modelica.Units.SI.HeatFlowRate QChiWatUni_flow_nominal= dat.QEva_flow_nominal "Design cooling heat flow rate (each unit, <0)"; final parameter Modelica.Units.SI.HeatFlowRate QConWatUni_flow_nominal= -dat.QEva_flow_nominal * (1 + 1 / dat.COP_nominal * dat.etaMotor) "Design CW heat flow rate (each unit, >0)"; final parameter Modelica.Units.SI.HeatFlowRate QChiWat_flow_nominal= nUni * QChiWatUni_flow_nominal "Design cooling heat flow rate (all units, <0)"; final parameter Modelica.Units.SI.HeatFlowRate QConWat_flow_nominal= nUni * QConWatUni_flow_nominal "Design CW heat flow rate (all units, >0)"; final parameter Modelica.Units.SI.MassFlowRate mChiWatUni_flow_nominal( final min=0)=dat.mEva_flow_nominal "Design chiller CHW mass flow rate (each unit)"; final parameter Modelica.Units.SI.MassFlowRate mConWatUni_flow_nominal( final min=0)=dat.mCon_flow_nominal "Design chiller CW mass flow rate (each unit)"; final parameter Modelica.Units.SI.MassFlowRate mChiWat_flow_nominal( final min=0)=nUni * mChiWatUni_flow_nominal "Design CHW mass flow rate (all units)"; final parameter Modelica.Units.SI.MassFlowRate mConWat_flow_nominal( final min=0)=nUni * mConWatUni_flow_nominal "Design CW mass flow rate (all units)"; parameter Modelica.Units.SI.PressureDifference dpEva_nominal(displayUnit="Pa") "Design chiller evaporator pressure drop (each unit)"; parameter Modelica.Units.SI.PressureDifference dpCon_nominal(displayUnit="Pa") "Chiller condenser design pressure drop (each unit)"; replaceable parameter Fluid.Chillers.Data.ElectricReformulatedEIR.Generic dat "Chiller parameters (each unit)"; // Assumptions parameter Modelica.Fluid.Types.Dynamics energyDynamics= Modelica.Fluid.Types.Dynamics.DynamicFreeInitial "Type of energy balance: dynamic (3 initialization options) or steady state"; parameter Boolean use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState "= true, if opening is filtered with a 2nd order CriticalDamping filter"; parameter Modelica.Units.SI.Time riseTime=120 "Rise time of the filter (time to reach 99.6 % of an opening step)"; parameter Modelica.Blocks.Types.Init init=Modelica.Blocks.Types.Init.InitialOutput "Type of initialization (no init/steady state/initial state/initial output)"; parameter Real y_start=1 "Initial position of actuator"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput y1[nUni] "Chiller On/Off command"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TSet( final unit="K", displayUnit="degC") "Supply temperature setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput P( final unit="W") "Power drawn"; Buildings.Controls.OBC.CDL.Interfaces.RealInput yValCon[nUni]( each final unit="1", each final min=0, each final max=1) "Chiller condenser isolation valve commanded position"; Buildings.Controls.OBC.CDL.Interfaces.RealInput yValEva[nUni]( each final unit="1", each final min=0, each final max=1) "Chiller evaporator isolation valve commanded position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TConLvg[nUni](each final unit="K", each displayUnit="degC") "Chiller condenser leaving temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput mCon_flow[nUni]( each final unit="kg/s") "Chiller condenser barrel mass flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TEvaLvg[nUni](each final unit="K", each displayUnit="degC") "Chiller evaporator leaving temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput mEva_flow[nUni]( each final unit="kg/s") "Chiller evaporator barrel mass flow rate"; Fluid.Chillers.ElectricReformulatedEIR chi( PLR1(start=0), final per=dat, redeclare final package Medium1=Medium1, redeclare final package Medium2=Medium2, final have_switchover=false, final dp1_nominal=0, final dp2_nominal=0, final allowFlowReversal1=allowFlowReversal1, final allowFlowReversal2=allowFlowReversal2, final energyDynamics=energyDynamics, final show_T=show_T) "Chiller"; Fluid.BaseClasses.MassFlowRateMultiplier mulConInl( redeclare final package Medium = Medium1, final allowFlowReversal=allowFlowReversal1, final use_input=true) "Flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulConOut( redeclare final package Medium = Medium1, final allowFlowReversal=allowFlowReversal1, final use_input=true) "Flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulEvaInl( redeclare final package Medium = Medium2, final allowFlowReversal=allowFlowReversal2, final use_input=true) "Flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulEvaOut( redeclare final package Medium = Medium2, final allowFlowReversal=allowFlowReversal2, final use_input=true) "Flow rate multiplier"; BaseClasses.MultipleCommands com( final nUni=nUni) "Convert command signals"; BaseClasses.MultipleValves valEva( redeclare final package Medium = Medium2, redeclare final Buildings.Fluid.Actuators.Valves.TwoWayLinear val, linearized=true, final nUni=nUni, final mUni_flow_nominal=mChiWatUni_flow_nominal, final dpFixed_nominal=dpEva_nominal, dpValve_nominal=1E3, final allowFlowReversal=allowFlowReversal2, final energyDynamics=energyDynamics, final use_inputFilter=use_inputFilter, final riseTime=riseTime, final init=init, final y_start=y_start, final show_T=show_T) "Chiller evaporator isolation valves"; BaseClasses.MultipleValves valCon( redeclare final package Medium = Medium1, redeclare final Buildings.Fluid.Actuators.Valves.TwoWayLinear val, linearized=true, final nUni=nUni, final mUni_flow_nominal=mConWatUni_flow_nominal, final dpFixed_nominal=dpCon_nominal, dpValve_nominal=1E3, final allowFlowReversal=allowFlowReversal1, final energyDynamics=energyDynamics, final use_inputFilter=use_inputFilter, final riseTime=riseTime, final init=init, final y_start=y_start, final show_T=show_T) "Chiller condenser isolation valves"; Buildings.Controls.OBC.CDL.Reals.Multiply mulP "Scale power"; Fluid.Sensors.TemperatureTwoPort temConLvg( redeclare final package Medium = Medium1, final m_flow_nominal=mConWatUni_flow_nominal, final allowFlowReversal=allowFlowReversal1) "Chiller condenser leaving temperature"; Fluid.Sensors.TemperatureTwoPort temEvaLvg( redeclare final package Medium = Medium2, final m_flow_nominal=mChiWatUni_flow_nominal, final allowFlowReversal=allowFlowReversal2) "Chiller evaporator leaving temperature"; Fluid.Sensors.MassFlowRate floCon( redeclare final package Medium =Medium1, final allowFlowReversal=allowFlowReversal1) "Chiller condenser barrel mass flow rate"; Fluid.Sensors.MassFlowRate floEva( redeclare final package Medium =Medium2, final allowFlowReversal=allowFlowReversal2) "Chiller evaporator barrel mass flow rate"; Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep(nout=nUni) "Replicate"; Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep1(nout=nUni) "Replicate"; Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep2(nout=nUni) "Replicate"; Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator rep3(nout=nUni) "Replicate"; equation connect(mulEvaInl.port_b,chi. port_a2); connect(TSet,chi. TSet); connect(mulConOut.uInv, mulConInl.u); connect(mulEvaOut.uInv, mulEvaInl.u); connect(port_a1, mulConInl.port_a); connect(port_a2, mulEvaInl.port_a); connect(port_b2, valEva.port_b); connect(mulEvaOut.port_b, valEva.port_a); connect(y1, com.y1); connect(chi.P, mulP.u1); connect(com.nUniOn, mulP.u2); connect(yValCon, valCon.y); connect(yValEva, valEva.y); connect(mulConInl.port_b,chi. port_a1); connect(mulP.y, P); connect(com.nUniOnBou, mulConOut.u); connect(mulConInl.uInv, mulEvaOut.u); connect(com.y1One,chi. on); connect(valCon.port_b, port_b1); connect(mulConOut.port_b, valCon.port_a); connect(temEvaLvg.port_a, chi.port_b2); connect(chi.port_b1, temConLvg.port_a); connect(temConLvg.port_b, floCon.port_a); connect(floCon.port_b, mulConOut.port_a); connect(temEvaLvg.port_b, floEva.port_a); connect(floEva.port_b, mulEvaOut.port_a); connect(rep.y, TConLvg); connect(rep1.y, mCon_flow); connect(floCon.m_flow, rep1.u); connect(temConLvg.T, rep.u); connect(rep3.y, TEvaLvg); connect(rep2.y, mEva_flow); connect(floEva.m_flow, rep2.u); connect(temEvaLvg.T, rep3.u); end ChillerGroup;

Buildings.Experimental.DHC.Plants.Combined.Subsystems.ChillerHeatRecoveryGroup Buildings.Experimental.DHC.Plants.Combined.Subsystems.ChillerHeatRecoveryGroup

Model of multiple identical heat recovery chillers in parallel

Buildings.Experimental.DHC.Plants.Combined.Subsystems.ChillerHeatRecoveryGroup

Information

This model represents a set of identical heat recovery chillers that are piped in parallel. Modulating isolation valves and modulating switchover valves are included on condenser and evaporator side. The switchover valves allow indexing the condenser (resp. the evaporator) either to the CWC loop or to the HW loop (resp. to the CWE loop or to the CHW loop). Modulating valves are used to allow for sequences of operation that bleed CWE into the HW return flow to modulate the condenser entering temperature.

Control points

The following input and output points are available.

Details

HRC performance data

The performance data should cover the HRC lift envelope, that is when the HRC is operating in direct heat recovery mode, producing CHW and HW at their setpoint value at full load. In this case, and to allow for cascading heat recovery where a third fluid circuit is used to generate a cascade of thermodynamic cycles, two additional parameters TCasEntCoo_nominal and TCasEntHea_nominal are exposed to specify the entering temperature of the third fluid circuit when the HRC is operating in cooling mode and in heating mode, respectively. In cooling mode the third fluid circuit is connected to the condenser barrel. In heating mode, the third fluid circuit is connected to the evaporator barrel. The parameters TCasEnt*_nominal are then used to assess the design capacity in heating and cooling mode, respectively.

Actuators

By default, linear valve models are used. Those are configured with a pressure drop varying linearly with the flow rate, as opposed to the quadratic dependency usually considered for a turbulent flow regime. This is because the whole plant model contains large nonlinear systems of equations and this configuration limits the risk of solver failure while reducing the time to solution. This has no significant impact on the operating point of the circulation pumps when a control loop is used to modulate the valve opening and maintain the flow rate or the leaving temperature at setpoint. Then, whatever the modeling assumptions for the valve, the control loop ensures that the valve creates the adequate pressure drop and flow, which will simply be reached at a different valve opening with the above simplification.

Extends from Buildings.Fluid.Interfaces.PartialEightPortInterface (Partial model transporting fluid between eight ports without storing mass or energy).

Parameters

TypeNameDefaultDescription
replaceable package Medium1PartialMediumMedium 1 in the component
replaceable package Medium2PartialMediumMedium 2 in the component
replaceable package Medium3PartialMediumMedium 3 in the component
replaceable package Medium4PartialMediumMedium 4 in the component
replaceable package MediumBuildings.Media.WaterMedium model for all four fluid circuits
IntegernUni Number of units operating at design conditions
TemperatureTCasHeaEnt_nominal298.15Design evaporator entering temperature in cascading heating mode [K]
TemperatureTCasCooEnt_nominal288.15Design condenser entering temperature in cascading cooling mode [K]
Genericdatredeclare parameter Fluid.Ch...Chiller parameters (each unit)
Nominal condition
MassFlowRatem1_flow_nominalmConWat_flow_nominalNominal mass flow rate [kg/s]
MassFlowRatem2_flow_nominalmChiWat_flow_nominalNominal mass flow rate [kg/s]
MassFlowRatem3_flow_nominalmConWat_flow_nominalNominal mass flow rate [kg/s]
MassFlowRatem4_flow_nominalmChiWat_flow_nominalNominal mass flow rate [kg/s]
PressureDifferencedpEva_nominal Design evaporator pressure drop (each unit) [Pa]
PressureDifferencedpCon_nominal Design condenser pressure drop (each unit) [Pa]
Assumptions
BooleanallowFlowReversal1allowFlowReversal= true to allow flow reversal in medium 1, false restricts to design direction (port_a -> port_b)
BooleanallowFlowReversal2allowFlowReversal= true to allow flow reversal in medium 2, false restricts to design direction (port_a -> port_b)
BooleanallowFlowReversal3allowFlowReversal= true to allow flow reversal in medium 3, false restricts to design direction (port_a -> port_b)
BooleanallowFlowReversal4allowFlowReversal= true to allow flow reversal in medium 4, false restricts to design direction (port_a -> port_b)
BooleanallowFlowReversaltrue= false to simplify equations, assuming, but not enforcing, no flow reversal
Advanced
Initialization
SpecificEnthalpyh_outflow_a1_startMedium1.h_defaultStart value for enthalpy flowing out of port a1 [J/kg]
SpecificEnthalpyh_outflow_b1_startMedium1.h_defaultStart value for enthalpy flowing out of port b1 [J/kg]
SpecificEnthalpyh_outflow_a2_startMedium2.h_defaultStart value for enthalpy flowing out of port a2 [J/kg]
SpecificEnthalpyh_outflow_b2_startMedium2.h_defaultStart value for enthalpy flowing out of port b2 [J/kg]
SpecificEnthalpyh_outflow_a3_startMedium3.h_defaultStart value for enthalpy flowing out of port a1 [J/kg]
SpecificEnthalpyh_outflow_b3_startMedium3.h_defaultStart value for enthalpy flowing out of port b1 [J/kg]
SpecificEnthalpyh_outflow_a4_startMedium4.h_defaultStart value for enthalpy flowing out of port a1 [J/kg]
SpecificEnthalpyh_outflow_b4_startMedium4.h_defaultStart value for enthalpy flowing out of port b1 [J/kg]
MassFlowRatem1_flow_small1E-4*abs(m1_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
MassFlowRatem2_flow_small1E-4*abs(m2_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
MassFlowRatem3_flow_small1E-4*abs(m3_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
MassFlowRatem4_flow_small1E-4*abs(m4_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
Diagnostics
Booleanshow_Tfalse= true, if actual temperature at port is computed
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
Filtered opening
Booleanuse_inputFilterenergyDynamics <> Modelica.F...= true, if opening is filtered with a 2nd order CriticalDamping filter
TimeriseTime120Rise time of the filter (time to reach 99.6 % of an opening step) [s]
InitinitModelica.Blocks.Types.Init.I...Type of initialization (no init/steady state/initial state/initial output)
Realy_start1Initial position of actuator

Connectors

TypeNameDescription
replaceable package Medium1Medium 1 in the component
replaceable package Medium2Medium 2 in the component
replaceable package Medium3Medium 3 in the component
replaceable package Medium4Medium 4 in the component
FluidPort_aport_a1Fluid connector a1 (positive design flow direction is from port_a1 to port_b1)
FluidPort_bport_b1Fluid connector b1 (positive design flow direction is from port_a1 to port_b1)
FluidPort_aport_a2Fluid connector a2 (positive design flow direction is from port_a2 to port_b2)
FluidPort_bport_b2Fluid connector b2 (positive design flow direction is from port_a2 to port_b2)
FluidPort_aport_a3Fluid connector a1 (positive design flow direction is from port_a3 to port_b3)
FluidPort_bport_b3Fluid connector b2 (positive design flow direction is from port_a3 to port_b3)
FluidPort_aport_a4Fluid connector a1 (positive design flow direction is from port_a4 to port_b4)
FluidPort_bport_b4Fluid connector b2 (positive design flow direction is from port_a4 to port_b4)
replaceable package MediumMedium model for all four fluid circuits
input BooleanInputy1[nUni]Chiller On/Off command
input BooleanInputy1Coo[nUni]Cooling switchover command: true for cooling, false for heating
input RealInputTSet[nUni]Supply temperature setpoint [K]
input RealInputyValConSwi[nUni]Chiller condenser switchover valve commanded position [1]
input RealInputyValEvaSwi[nUni]Chiller evaporator switchover valve commanded position [1]
output RealOutputPPower drawn [W]
input RealInputyValCon[nUni]Chiller condenser isolation valve commanded position [1]
input RealInputyValEva[nUni]Chiller evaporator isolation valve commanded position [1]
output RealOutputmEva_flow[nUni]Chiller evaporator barrel mass flow rate [kg/s]
output RealOutputTEvaLvg[nUni]Chiller evaporator leaving temperature [K]
output RealOutputmCon_flow[nUni]Chiller condenser barrel mass flow rate [kg/s]
output RealOutputTConLvg[nUni]Chiller condenser leaving temperature [K]
output RealOutputTConEnt[nUni]Chiller condenser entering temperature [K]

Modelica definition

model ChillerHeatRecoveryGroup "Model of multiple identical heat recovery chillers in parallel" extends Buildings.Fluid.Interfaces.PartialEightPortInterface( redeclare final package Medium1=Medium, redeclare final package Medium2=Medium, redeclare final package Medium3=Medium, redeclare final package Medium4=Medium, final m1_flow_nominal = mConWat_flow_nominal, final m2_flow_nominal = mChiWat_flow_nominal, final m3_flow_nominal = mConWat_flow_nominal, final m4_flow_nominal = mChiWat_flow_nominal, final allowFlowReversal1=allowFlowReversal, final allowFlowReversal2=allowFlowReversal, final allowFlowReversal3=allowFlowReversal, final allowFlowReversal4=allowFlowReversal); replaceable package Medium=Buildings.Media.Water constrainedby Modelica.Media.Interfaces.PartialMedium "Medium model for all four fluid circuits"; parameter Integer nUni(final min=1, start=1) "Number of units operating at design conditions"; parameter Modelica.Units.SI.Temperature TCasHeaEnt_nominal=298.15 "Design evaporator entering temperature in cascading heating mode"; parameter Modelica.Units.SI.Temperature TCasCooEnt_nominal=288.15 "Design condenser entering temperature in cascading cooling mode"; final parameter Modelica.Units.SI.Temperature TChiWatSup_nominal= dat.TEvaLvg_nominal "Design (minimum) CHW supply temperature"; final parameter Modelica.Units.SI.Temperature THeaWatSup_nominal= dat.TConLvg_nominal "Design (maximum) HW supply temperature"; final parameter Modelica.Units.SI.HeatFlowRate QChiWatUni_flow_nominal= dat.QEva_flow_nominal "Design cooling heat flow rate (each unit, <0)"; final parameter Modelica.Units.SI.HeatFlowRate QHeaWatUni_flow_nominal= -dat.QEva_flow_nominal * (1 + 1 / dat.COP_nominal * dat.etaMotor) "Design heating heat flow rate in direct heat recovery mode (each unit, >0)"; final parameter Modelica.Units.SI.Efficiency COPCasHea_nominal(fixed=false) "Coefficient of performance in cascading heating mode"; final parameter Modelica.Units.SI.Efficiency COPCasCoo_nominal(fixed=false) "Coefficient of performance in cascading cooling mode"; final parameter Modelica.Units.SI.Temperature TCasHeaLvg_nominal(fixed=false) "Design value of evaporator leaving temperature in cascading heating mode"; final parameter Modelica.Units.SI.Temperature TCasCooLvg_nominal(fixed=false) "Design value of condenser leaving temperature in cascading cooling mode"; final parameter Modelica.Units.SI.HeatFlowRate QEvaCasHeaUni_flow_nominal( fixed=false, start=QChiWatUni_flow_nominal * (1 + 2E-2 * (TCasHeaEnt_nominal - (dat.TEvaLvg_nominal - QChiWatUni_flow_nominal / mChiWatUni_flow_nominal / cpCas)))) "Design evaporator heat flow rate in cascading heating mode (each unit, <0)"; final parameter Modelica.Units.SI.HeatFlowRate QChiWatCasCooUni_flow_nominal( fixed=false, start=QChiWatUni_flow_nominal * (1 - 2E-2 * (TCasCooEnt_nominal - (dat.TConLvg_nominal - QHeaWatUni_flow_nominal / mConWatUni_flow_nominal / cpCas)))) "Design cooling heat flow rate in cascading cooling mode (each unit, <0)"; final parameter Modelica.Units.SI.HeatFlowRate QHeaWatCasHeaUni_flow_nominal= -QEvaCasHeaUni_flow_nominal * (1 + 1 / COPCasHea_nominal * dat.etaMotor) "Design heating heat flow rate in cascading heating mode (each unit, >0)"; final parameter Modelica.Units.SI.HeatFlowRate QConCasCooUni_flow_nominal= -QChiWatCasCooUni_flow_nominal * (1 + 1 / COPCasCoo_nominal * dat.etaMotor) "Design condenser heat flow rate in cascading cooling mode (each unit, >0)"; final parameter Modelica.Units.SI.HeatFlowRate QChiWat_flow_nominal= nUni * QChiWatUni_flow_nominal "Design cooling heat flow rate (all units, <0)"; final parameter Modelica.Units.SI.HeatFlowRate QHeaWat_flow_nominal= nUni * QHeaWatUni_flow_nominal "Design heating heat flow rate (all units, >0)"; final parameter Modelica.Units.SI.HeatFlowRate QEvaCasHea_flow_nominal= nUni * QEvaCasHeaUni_flow_nominal "Design evaporator heat flow rate in cascading heating mode (all units, <0)"; final parameter Modelica.Units.SI.HeatFlowRate QChiWatCasCoo_flow_nominal= nUni * QChiWatCasCooUni_flow_nominal "Design cooling heat flow rate in cascading cooling mode (all units, <0)"; final parameter Modelica.Units.SI.HeatFlowRate QHeaWatCasHea_flow_nominal= nUni * QHeaWatCasHeaUni_flow_nominal "Design heating heat flow rate in cascading heating mode (all units, >0)"; final parameter Modelica.Units.SI.HeatFlowRate QConCasCoo_flow_nominal= nUni * QConCasCooUni_flow_nominal "Design condenser heat flow rate in cascading cooling mode (all units, >0)"; final parameter Modelica.Units.SI.MassFlowRate mChiWatUni_flow_nominal( final min=0)=dat.mEva_flow_nominal "Design CHW mass flow rate (each unit)"; final parameter Modelica.Units.SI.MassFlowRate mConWatUni_flow_nominal( final min=0)=dat.mCon_flow_nominal "Design CW mass flow rate (each unit)"; final parameter Modelica.Units.SI.MassFlowRate mChiWat_flow_nominal( final min=0)=nUni * mChiWatUni_flow_nominal "Design CHW mass flow rate (all units)"; final parameter Modelica.Units.SI.MassFlowRate mConWat_flow_nominal( final min=0)=nUni * mConWatUni_flow_nominal "Design CW mass flow rate (all units)"; parameter Modelica.Units.SI.PressureDifference dpEva_nominal(displayUnit="Pa") "Design evaporator pressure drop (each unit)"; parameter Modelica.Units.SI.PressureDifference dpCon_nominal(displayUnit="Pa") "Design condenser pressure drop (each unit)"; replaceable parameter Fluid.Chillers.Data.ElectricReformulatedEIR.Generic dat "Chiller parameters (each unit)"; // Assumptions parameter Boolean allowFlowReversal = true "= false to simplify equations, assuming, but not enforcing, no flow reversal"; parameter Modelica.Fluid.Types.Dynamics energyDynamics= Modelica.Fluid.Types.Dynamics.DynamicFreeInitial "Type of energy balance: dynamic (3 initialization options) or steady state"; parameter Boolean use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState "= true, if opening is filtered with a 2nd order CriticalDamping filter"; parameter Modelica.Units.SI.Time riseTime=120 "Rise time of the filter (time to reach 99.6 % of an opening step)"; parameter Modelica.Blocks.Types.Init init=Modelica.Blocks.Types.Init.InitialOutput "Type of initialization (no init/steady state/initial state/initial output)"; parameter Real y_start=1 "Initial position of actuator"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput y1[nUni] "Chiller On/Off command"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput y1Coo[nUni] "Cooling switchover command: true for cooling, false for heating"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TSet[nUni]( each final unit="K", each displayUnit="degC") "Supply temperature setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealInput yValConSwi[nUni]( each final unit="1", each final min=0, each final max=1) "Chiller condenser switchover valve commanded position"; Buildings.Controls.OBC.CDL.Interfaces.RealInput yValEvaSwi[nUni]( each final unit="1", each final min=0, each final max=1) "Chiller evaporator switchover valve commanded position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput P( final unit="W") "Power drawn"; Buildings.Controls.OBC.CDL.Interfaces.RealInput yValCon[nUni]( each final unit="1", each final min=0, each final max=1) "Chiller condenser isolation valve commanded position"; Buildings.Controls.OBC.CDL.Interfaces.RealInput yValEva[nUni]( each final unit="1", each final min=0, each final max=1) "Chiller evaporator isolation valve commanded position"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput mEva_flow[nUni](each final unit="kg/s") "Chiller evaporator barrel mass flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TEvaLvg[nUni]( each final unit="K", each displayUnit="degC") "Chiller evaporator leaving temperature"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput mCon_flow[nUni]( each final unit="kg/s") "Chiller condenser barrel mass flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TConLvg[nUni]( each final unit="K", each displayUnit="degC") "Chiller condenser leaving temperature"; Fluid.Chillers.ElectricReformulatedEIR chi[nUni]( PLR1(each start=0), each final per=dat, redeclare each final package Medium1 = Medium, redeclare final package Medium2 = Medium, each final have_switchover=true, each final dp1_nominal=0, each final dp2_nominal=0, each final allowFlowReversal1=allowFlowReversal, each final allowFlowReversal2=allowFlowReversal, each final energyDynamics=energyDynamics, each final show_T=show_T) "Chiller"; Fluid.Actuators.Valves.TwoWayLinear valCon[nUni]( redeclare each final package Medium = Medium, each linearized=true, each final CvData=Buildings.Fluid.Types.CvTypes.OpPoint, each final m_flow_nominal=mConWatUni_flow_nominal, each dpValve_nominal=1E3, each final dpFixed_nominal=dpCon_nominal, each final allowFlowReversal=allowFlowReversal, each final use_inputFilter=use_inputFilter, each final riseTime=riseTime, each final init=init, each final y_start=y_start) "Condenser isolation valve"; Fluid.Actuators.Valves.TwoWayLinear valEva[nUni]( redeclare each final package Medium = Medium, each linearized=true, each final CvData=Buildings.Fluid.Types.CvTypes.OpPoint, each final m_flow_nominal=mChiWatUni_flow_nominal, each dpValve_nominal=1E3, each final dpFixed_nominal=dpEva_nominal, each final allowFlowReversal=allowFlowReversal, each final use_inputFilter=use_inputFilter, each final riseTime=riseTime, each final init=init, each final y_start=y_start) "Evaporator isolation valve"; Fluid.FixedResistances.Junction junConWatEvaOut[nUni]( redeclare each final package Medium = Medium, each final m_flow_nominal=mChiWatUni_flow_nominal*{1,-1,1}, each final dp_nominal=fill(1E3, 3), each final energyDynamics=energyDynamics, each final portFlowDirection_1=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, each final portFlowDirection_2=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, each final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional else Modelica.Fluid.Types.PortFlowDirection.Entering) "Fluid junction"; Fluid.FixedResistances.Junction junConWatEvaInl[nUni]( redeclare each final package Medium = Medium, each final m_flow_nominal=mChiWatUni_flow_nominal*{1,-1,-1}, each final dp_nominal=fill(1E3, 3), each final energyDynamics=energyDynamics, each final portFlowDirection_1=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, each final portFlowDirection_2=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, each final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional else Modelica.Fluid.Types.PortFlowDirection.Leaving) "Fluid junction"; Fluid.Sensors.TemperatureTwoPort temEvaLvg[nUni]( redeclare each final package Medium = Medium, each final m_flow_nominal=mChiWatUni_flow_nominal, each final allowFlowReversal=allowFlowReversal) "Chiller evaporator leaving temperature"; Fluid.FixedResistances.Junction junHeaWatConInl[nUni]( redeclare each final package Medium = Medium, each final m_flow_nominal=mConWatUni_flow_nominal*{1,-1,-1}, each final dp_nominal=fill(1E3, 3), each final energyDynamics=energyDynamics, each final portFlowDirection_1=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, each final portFlowDirection_2=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, each final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional else Modelica.Fluid.Types.PortFlowDirection.Leaving) "Fluid junction"; Fluid.FixedResistances.Junction junHeaWatConOut[nUni]( redeclare each final package Medium = Medium, each final m_flow_nominal=mConWatUni_flow_nominal*{1,-1,1}, each final dp_nominal=fill(1E3, 3), each final energyDynamics=energyDynamics, each final portFlowDirection_1=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, each final portFlowDirection_2=Modelica.Fluid.Types.PortFlowDirection.Bidirectional, each final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional else Modelica.Fluid.Types.PortFlowDirection.Entering) "Fluid junction"; Fluid.Sensors.TemperatureTwoPort temConEnt[nUni]( redeclare each final package Medium = Medium, each final m_flow_nominal=mConWatUni_flow_nominal, each final allowFlowReversal=allowFlowReversal) "Chiller condenser entering temperature"; Fluid.Sensors.TemperatureTwoPort temConLvg[nUni]( redeclare each final package Medium = Medium, each final m_flow_nominal=mConWatUni_flow_nominal, each final allowFlowReversal=allowFlowReversal) "Chiller condenser leaving temperature"; Buildings.Controls.OBC.CDL.Reals.MultiSum mulSum(nin=nUni) "Sum up power of all units"; Fluid.Sensors.MassFlowRate floEva[nUni]( redeclare each final package Medium =Medium, each final allowFlowReversal=allowFlowReversal) "Chiller evaporator barrel mass flow rate"; Fluid.Sensors.MassFlowRate floCon[nUni]( redeclare each final package Medium =Medium, each final allowFlowReversal=allowFlowReversal) "Chiller condenser barrel mass flow rate"; Fluid.Actuators.Valves.TwoWayLinear valConSwi[nUni]( redeclare each final package Medium = Medium, each linearized=true, each final CvData=Buildings.Fluid.Types.CvTypes.OpPoint, each final m_flow_nominal=mConWatUni_flow_nominal, each dpValve_nominal=1E3, each final dpFixed_nominal=0, each final allowFlowReversal=true, each final use_inputFilter=use_inputFilter, each final riseTime=riseTime, each final init=init, each final y_start=y_start) "Condenser switchover valve"; Fluid.Actuators.Valves.TwoWayLinear valEvaSwi[nUni]( redeclare each final package Medium = Medium, each linearized=true, each final CvData=Buildings.Fluid.Types.CvTypes.OpPoint, each final m_flow_nominal=mChiWatUni_flow_nominal, each dpValve_nominal=1E3, each final dpFixed_nominal=0, each final allowFlowReversal=true, each final use_inputFilter=use_inputFilter, each final riseTime=riseTime, each final init=init, each final y_start=y_start) "Evaporator switchover valve"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TConEnt[nUni](each final unit="K", each displayUnit="degC") "Chiller condenser entering temperature"; protected parameter Medium.ThermodynamicState staCas=Medium.setState_pTX( T=(TCasHeaEnt_nominal + TCasCooEnt_nominal) / 2, p=Medium.p_default, X=Medium.X_default) "State of source medium in cascading mode (at mean source temperature)"; parameter Modelica.Units.SI.SpecificHeatCapacity cpCas= Medium.specificHeatCapacityCp(state=staCas) "Heat capacity of source medium in cascading mode"; initial equation TCasHeaLvg_nominal = TCasHeaEnt_nominal + QEvaCasHeaUni_flow_nominal / cpCas / mConWatUni_flow_nominal; TCasCooLvg_nominal = TCasCooEnt_nominal + QConCasCooUni_flow_nominal / cpCas / mConWatUni_flow_nominal; QEvaCasHeaUni_flow_nominal = dat.QEva_flow_nominal * Buildings.Utilities.Math.Functions.biquadratic( a=dat.capFunT, x1=Modelica.Units.Conversions.to_degC(TCasHeaLvg_nominal), x2=Modelica.Units.Conversions.to_degC(THeaWatSup_nominal)); QChiWatCasCooUni_flow_nominal = dat.QEva_flow_nominal * Buildings.Utilities.Math.Functions.biquadratic( a=dat.capFunT, x1=Modelica.Units.Conversions.to_degC(TChiWatSup_nominal), x2=Modelica.Units.Conversions.to_degC(TCasCooLvg_nominal)); COPCasHea_nominal = dat.COP_nominal / Buildings.Utilities.Math.Functions.biquadratic( a=dat.EIRFunT, x1=Modelica.Units.Conversions.to_degC(TCasCooLvg_nominal), x2=Modelica.Units.Conversions.to_degC(THeaWatSup_nominal)); COPCasCoo_nominal = dat.COP_nominal / Buildings.Utilities.Math.Functions.biquadratic( a=dat.EIRFunT, x1=Modelica.Units.Conversions.to_degC(TChiWatSup_nominal), x2=Modelica.Units.Conversions.to_degC(TCasCooLvg_nominal)); equation if nUni > 1 then connect(junHeaWatConOut[1:nUni - 1].port_1, junHeaWatConOut[2:nUni].port_2); connect(valEvaSwi[1:nUni - 1].port_a, junConWatEvaInl[2:nUni].port_2); connect(valConSwi[1:nUni - 1].port_a, junHeaWatConInl[2:nUni].port_2); connect(junConWatEvaOut[1:nUni - 1].port_1, junConWatEvaOut[2:nUni].port_2); end if; connect(port_a4, valEvaSwi[nUni].port_a); connect(yValConSwi, valConSwi.y); connect(y1, chi.on); connect(TSet, chi.TSet); connect(y1Coo, chi.coo); connect(yValCon, valCon.y); connect(chi.port_b2, temEvaLvg.port_a); connect(yValEva, valEva.y); connect(temConEnt.port_b, chi.port_a1); connect(chi.port_b1, temConLvg.port_a); connect(valCon.port_b, junHeaWatConOut.port_3); connect(valEva.port_b,junConWatEvaOut. port_3); connect(chi.P, mulSum.u); connect(temEvaLvg.port_b, floEva.port_a); connect(floEva.port_b, valEva.port_a); connect(mulSum.y, P); connect(floEva.m_flow, mEva_flow); connect(temEvaLvg.T, TEvaLvg); connect(temConLvg.port_b, floCon.port_a); connect(floCon.port_b, valCon.port_a); connect(temConLvg.T, TConLvg); connect(floCon.m_flow, mCon_flow); connect(junConWatEvaInl.port_3, chi.port_a2); connect(yValEvaSwi, valEvaSwi.y); connect(junHeaWatConInl.port_3, temConEnt.port_a); connect(port_a1, junHeaWatConInl[1].port_2); connect(valConSwi.port_b, junHeaWatConInl.port_1); connect(junHeaWatConOut[1].port_2, port_b1); connect(valEvaSwi.port_b, junConWatEvaInl.port_1); connect(port_a2, junConWatEvaInl[1].port_2); connect(junHeaWatConOut[nUni].port_1, port_b3); connect(junConWatEvaOut[1].port_2, port_b2); connect(junConWatEvaOut[nUni].port_1, port_b4); connect(valConSwi[nUni].port_a, port_a3); connect(temConEnt.T, TConEnt); end ChillerHeatRecoveryGroup;

Buildings.Experimental.DHC.Plants.Combined.Subsystems.CoolingTowerGroup Buildings.Experimental.DHC.Plants.Combined.Subsystems.CoolingTowerGroup

Model of multiple identical cooling towers in parallel

Buildings.Experimental.DHC.Plants.Combined.Subsystems.CoolingTowerGroup

Information

This model represents a set of identical cooling towers that are piped in parallel. No actuated isolation valves are included.

Control points

The following input and output points are available.

Details

Modeling approach

In a parallel arrangement, all operating units have the same operating point. This allows modeling the heat transfer from outdoor air to condenser water with a single instance of Buildings.Fluid.HeatExchangers.CoolingTowers.Merkel. Hydronics are resolved with mass flow rate multiplier components. Note that the elevation head of open-circuit cooling towers is not modeled, which is an inherent limitation of the cooling tower component model.

The fan cycling On and Off is implicitly modeled in the cooling tower component which uses a low limit of the control signal to switch to a free convection regime at zero fan power.

Extends from Buildings.Fluid.Interfaces.PartialTwoPortInterface (Partial model transporting fluid between two ports without storing mass or energy).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
IntegernUni Number of units operating at design conditions
RealyFan_min0.1CT fan minimum speed [1]
Nominal condition
MassFlowRatemConWatUni_flow_nominal CW design mass flow rate (each unit) [kg/s]
PressureDifferencedpConWatFriUni_nominal CW flow-friction losses through tower and piping only (without elevation head or valve) [Pa]
MassFlowRatemAirUni_flow_nominal Air mass flow rate (each unit) [kg/s]
TemperatureTWetBulEnt_nominal Entering air wetbulb temperature [K]
TemperatureTConWatRet_nominal CW return temperature (tower entering) [K]
TemperatureTConWatSup_nominal CW supply temperature (tower leaving) [K]
PowerPFanUni_nominal Fan power (each unit) [W]
Assumptions
BooleanallowFlowReversaltrue= false to simplify equations, assuming, but not enforcing, no flow reversal
Advanced
MassFlowRatem_flow_small1E-4*abs(m_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
Diagnostics
Booleanshow_Tfalse= true, if actual temperature at port is computed
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
Nominal condition
Timetau30Time constant of fluid volume for nominal flow, used if energy or mass balance is dynamic [s]

Connectors

TypeNameDescription
FluidPort_aport_aFluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_bport_bFluid connector b (positive design flow direction is from port_a to port_b)
input BooleanInputy1[nUni]Cooling tower Start command
input RealInputyCooling tower speed (common to all tower cells) [1]
BusweaBusBus with weather data
output RealOutputPPower drawn by tower fans [W]
output RealOutputTConWatSupCW supply temperature (tower leaving) [K]

Modelica definition

model CoolingTowerGroup "Model of multiple identical cooling towers in parallel" extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( final m_flow_nominal(final min=Modelica.Constants.small)=mConWat_flow_nominal); parameter Integer nUni(final min=1, start=1) "Number of units operating at design conditions"; parameter Modelica.Units.SI.MassFlowRate mConWatUni_flow_nominal( final min=0) "CW design mass flow rate (each unit)"; final parameter Modelica.Units.SI.MassFlowRate mConWat_flow_nominal( final min=0)=nUni * mConWatUni_flow_nominal "CW design mass flow rate (all units)"; parameter Modelica.Units.SI.PressureDifference dpConWatFriUni_nominal( displayUnit="Pa") "CW flow-friction losses through tower and piping only (without elevation head or valve)"; parameter Modelica.Units.SI.MassFlowRate mAirUni_flow_nominal( final min=0, start=mConWatUni_flow_nominal / 1.45) "Air mass flow rate (each unit)"; parameter Modelica.Units.SI.Temperature TWetBulEnt_nominal( final min=273.15) "Entering air wetbulb temperature"; parameter Modelica.Units.SI.Temperature TConWatRet_nominal( final min=273.15) "CW return temperature (tower entering)"; parameter Modelica.Units.SI.Temperature TConWatSup_nominal( final min=273.15) "CW supply temperature (tower leaving)"; parameter Modelica.Units.SI.Power PFanUni_nominal( final min=0, start=340 * mConWatUni_flow_nominal) "Fan power (each unit)"; parameter Real yFan_min(unit="1")=0.1 "CT fan minimum speed"; // Assumptions parameter Modelica.Fluid.Types.Dynamics energyDynamics= Modelica.Fluid.Types.Dynamics.DynamicFreeInitial "Type of energy balance: dynamic (3 initialization options) or steady state"; parameter Modelica.Units.SI.Time tau=30 "Time constant of fluid volume for nominal flow, used if energy or mass balance is dynamic"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput y1[nUni] "Cooling tower Start command"; Buildings.Controls.OBC.CDL.Interfaces.RealInput y( final unit="1", final min=0) "Cooling tower speed (common to all tower cells)"; BoundaryConditions.WeatherData.Bus weaBus "Bus with weather data"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput P(final unit="W") "Power drawn by tower fans"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput TConWatSup( final unit="K", displayUnit="degC") "CW supply temperature (tower leaving)"; Fluid.BaseClasses.MassFlowRateMultiplier mulInl( redeclare final package Medium = Medium, final allowFlowReversal=allowFlowReversal, final use_input=false, final k=1/nUni) "Flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulOut( redeclare final package Medium = Medium, final allowFlowReversal=allowFlowReversal, final use_input=false, final k=nUni) "Flow rate multiplier"; BaseClasses.MultipleCommands com(final nUni=nUni) "Convert command signals"; Buildings.Controls.OBC.CDL.Reals.Multiply mulP "Scale power"; Fluid.HeatExchangers.CoolingTowers.Merkel coo( redeclare final package Medium = Medium, final m_flow_nominal=mConWatUni_flow_nominal, final dp_nominal=dpConWatFriUni_nominal, final yMin=yFan_min, final ratWatAir_nominal=mConWatUni_flow_nominal/mAirUni_flow_nominal, final TAirInWB_nominal=TWetBulEnt_nominal, final TWatIn_nominal=TConWatRet_nominal, final TWatOut_nominal=TConWatSup_nominal, final PFan_nominal=PFanUni_nominal, final tau=tau, final allowFlowReversal=allowFlowReversal, final show_T=show_T, final energyDynamics=energyDynamics) "Cooling tower"; Buildings.Controls.OBC.CDL.Logical.Pre preY1[nUni] "Left limit of signal avoiding direct feedback of status to controller"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Convert to real"; Buildings.Controls.OBC.CDL.Reals.Multiply inp "Compute pump input signal"; equation connect(com.nUniOn, mulP.u2); connect(mulP.y, P); connect(mulOut.port_b, port_b); connect(mulInl.port_b, coo.port_a); connect(coo.port_b, mulOut.port_a); connect(weaBus.TWetBul, coo.TAir); connect(coo.PFan, mulP.u1); connect(coo.TLvg, TConWatSup); connect(y1, preY1.u); connect(preY1.y, com.y1); connect(com.y1One, booToRea.u); connect(inp.y, coo.y); connect(y, inp.u1); connect(booToRea.y, inp.u2); connect(port_a, mulInl.port_a); end CoolingTowerGroup;

Buildings.Experimental.DHC.Plants.Combined.Subsystems.HeatPumpGroup Buildings.Experimental.DHC.Plants.Combined.Subsystems.HeatPumpGroup

Model of multiple identical air-source heat pumps in parallel

Buildings.Experimental.DHC.Plants.Combined.Subsystems.HeatPumpGroup

Information

This model represents a set of identical air-to-water heat pumps that are piped in parallel. Dedicated constant-speed condenser pumps are included.

Control points

The following input and output points are available.

Details

Modeling approach

In a parallel arrangement, all operating units have the same operating point. This allows modeling the heat transfer from outdoor air to condenser water with a single instance of Buildings.Fluid.HeatPumps.EquationFitReversible. Hydronics are resolved with mass flow rate multiplier components.

The model Buildings.Fluid.HeatPumps.EquationFitReversible does not capture the sensitivity of the heat pump performance to the HW supply temperature setpoint. This means that a varying HW supply temperature setpoint has no impact on the heat pump COP (all other variables such as the HW return temperature being kept invariant). This is a limitation of the model.

Extends from Buildings.Fluid.Interfaces.PartialTwoPortInterface (Partial model transporting fluid between two ports without storing mass or energy).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
replaceable package MediumAirBuildings.Media.AirAir medium
IntegernUni Number of units operating at design conditions
Genericdatredeclare parameter Building...Heat pump parameters (each unit)
GenericdatPumredeclare parameter Fluid.Mo...Condenser pump parameters (each unit)
Nominal condition
PressureDifferencedpPumHeaWatUni_nominaldat.dpHeaLoa_nominalHW pump design head (each unit) [Pa]
Assumptions
BooleanallowFlowReversaltrue= false to simplify equations, assuming, but not enforcing, no flow reversal
Advanced
MassFlowRatem_flow_small1E-4*abs(m_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
Diagnostics
Booleanshow_Tfalse= true, if actual temperature at port is computed
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
Nominal condition
Timetau30Time constant of fluid volume for nominal HW flow, used if energy or mass balance is dynamic [s]
Filtered pump speed
Booleanuse_inputFilterenergyDynamics <> Modelica.F...= true, if signal is filtered with a 2nd order CriticalDamping filter
TimeriseTime30Rise time of the filter (time to reach 99.6 % of the speed) [s]
InitinitModelica.Blocks.Types.Init.I...Type of initialization (no init/steady state/initial state/initial output)
Realy_start1Initial position of actuator

Connectors

TypeNameDescription
FluidPort_aport_aFluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_bport_bFluid connector b (positive design flow direction is from port_a to port_b)
replaceable package MediumAirAir medium
input BooleanInputy1[nUni]Heat pump On/Off command
input RealInputTSetSupply temperature setpoint [K]
BusweaBusBus with weather data
output RealOutputPPumPower drawn by HW pumps [W]
output RealOutputPPower drawn by heat pumps [W]

Modelica definition

model HeatPumpGroup "Model of multiple identical air-source heat pumps in parallel" extends Buildings.Fluid.Interfaces.PartialTwoPortInterface( final m_flow_nominal(final min=Modelica.Constants.small)=mHeaWat_flow_nominal); replaceable package MediumAir=Buildings.Media.Air "Air medium"; parameter Integer nUni(final min=1, start=1) "Number of units operating at design conditions"; final parameter Modelica.Units.SI.HeatFlowRate capUni_nominal( final min=0)=dat.hea.Q_flow "Heat pump design capacity (each unit)"; final parameter Modelica.Units.SI.MassFlowRate mHeaWatUni_flow_nominal( final min=0)=dat.hea.mLoa_flow "HW design mass flow rate (each unit)"; final parameter Modelica.Units.SI.MassFlowRate mAirUni_flow_nominal( final min=0)=dat.hea.mSou_flow "Air design mass flow rate (each unit)"; final parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal( final min=0)=nUni * mHeaWatUni_flow_nominal "HW design mass flow rate (all units)"; parameter Modelica.Units.SI.PressureDifference dpPumHeaWatUni_nominal( final min=0, displayUnit="Pa")=dat.dpHeaLoa_nominal "HW pump design head (each unit)"; replaceable parameter Buildings.Fluid.HeatPumps.Data.EquationFitReversible.Generic dat "Heat pump parameters (each unit)"; replaceable parameter Fluid.Movers.Data.Generic datPum constrainedby Fluid.Movers.Data.Generic( pressure(V_flow={0,1,2}*mHeaWatUni_flow_nominal/rho_nominal, dp={1.14,1,0.42}*dpPumHeaWatUni_nominal), motorCooledByFluid=false) "Condenser pump parameters (each unit)"; // Assumptions parameter Modelica.Fluid.Types.Dynamics energyDynamics= Modelica.Fluid.Types.Dynamics.DynamicFreeInitial "Type of energy balance: dynamic (3 initialization options) or steady state"; parameter Modelica.Units.SI.Time tau=30 "Time constant of fluid volume for nominal HW flow, used if energy or mass balance is dynamic"; // Pump speed filter parameters parameter Boolean use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState "= true, if signal is filtered with a 2nd order CriticalDamping filter"; parameter Modelica.Units.SI.Time riseTime=30 "Rise time of the filter (time to reach 99.6 % of the speed)"; parameter Modelica.Blocks.Types.Init init=Modelica.Blocks.Types.Init.InitialOutput "Type of initialization (no init/steady state/initial state/initial output)"; parameter Real y_start=1 "Initial position of actuator"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput y1[nUni] "Heat pump On/Off command"; Buildings.Controls.OBC.CDL.Interfaces.RealInput TSet( final unit="K", displayUnit="degC") "Supply temperature setpoint"; BoundaryConditions.WeatherData.Bus weaBus "Bus with weather data"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput PPum( final unit="W") "Power drawn by HW pumps"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput P( final unit="W") "Power drawn by heat pumps"; Fluid.BaseClasses.MassFlowRateMultiplier mulConInl( redeclare final package Medium = Medium, final allowFlowReversal=allowFlowReversal, final use_input=true) "Flow rate multiplier"; Fluid.BaseClasses.MassFlowRateMultiplier mulConOut( redeclare final package Medium = Medium, final allowFlowReversal=allowFlowReversal, final use_input=true) "Flow rate multiplier"; BaseClasses.MultipleCommands com(final nUni=nUni) "Convert command signals"; Buildings.Controls.OBC.CDL.Reals.Multiply mulP "Scale power"; Fluid.HeatPumps.EquationFitReversible heaPum( redeclare final package Medium1=Medium, redeclare final package Medium2=MediumAir, final per=dat, final tau1=tau, final show_T=show_T, final energyDynamics=energyDynamics, final allowFlowReversal1=allowFlowReversal, final allowFlowReversal2=false) "Heat pump"; Fluid.Movers.SpeedControlled_y pum( redeclare final package Medium = Medium, inputType=Buildings.Fluid.Types.InputType.Continuous, final tau=tau, final show_T=show_T, final allowFlowReversal=allowFlowReversal, final energyDynamics=energyDynamics, final use_inputFilter=use_inputFilter, final riseTime=riseTime, final init=init, final per=datPum, addPowerToMedium=false) "HW pump"; Fluid.Sources.MassFlowSource_WeatherData airSou( redeclare final package Medium=MediumAir, final use_m_flow_in=true, final nPorts=1) "Air flow source"; Fluid.Sources.Boundary_pT airSin( redeclare final package Medium=MediumAir, final nPorts=1) "Air flow sink"; Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter comFan( final k=mAirUni_flow_nominal) "Convert On/Off command to air flow setpoint"; Buildings.Controls.OBC.CDL.Reals.Multiply mulP1 "Scale power"; Buildings.Controls.OBC.CDL.Logical.Pre preY1[nUni] "Left limit of signal avoiding direct feedback of status to controller"; Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea "Convert to real"; Buildings.Controls.OBC.CDL.Reals.Multiply inp "Compute pump input signal"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant cst(final k=1) "Constant"; Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt "Convert to integer"; protected parameter Medium.ThermodynamicState sta_nominal=Medium.setState_pTX( T=dat.hea.TRefLoa, p=3E5, X=Medium.X_default) "State of the medium at the medium default properties"; parameter Modelica.Units.SI.Density rho_nominal=Medium.density(sta_nominal) "Density at the medium default properties"; equation connect(mulConOut.uInv, mulConInl.u); connect(com.nUniOn, mulP.u2); connect(mulP.y, P); connect(com.nUniOnBou, mulConOut.u); connect(pum.port_b, heaPum.port_a1); connect(heaPum.port_b1, mulConOut.port_a); connect(mulConInl.port_b, pum.port_a); connect(mulConOut.port_b, port_b); connect(heaPum.P, mulP.u1); connect(port_a, mulConInl.port_a); connect(airSou.ports[1], heaPum.port_a2); connect(airSin.ports[1], heaPum.port_b2); connect(TSet, heaPum.TSet); connect(comFan.y, airSou.m_flow_in); connect(weaBus, airSou.weaBus); connect(mulP1.y, PPum); connect(pum.P, mulP1.u1); connect(com.nUniOn, mulP1.u2); connect(y1, preY1.u); connect(preY1.y, com.y1); connect(com.y1One, booToRea.u); connect(inp.y, pum.y); connect(booToRea.y, comFan.u); connect(booToRea.y, inp.u2); connect(cst.y, inp.u1); connect(booToRea.y, reaToInt.u); connect(reaToInt.y, heaPum.uMod); end HeatPumpGroup;

Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsDp Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsDp

Model of multiple identical pumps in parallel with dp-controlled pump model

Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsDp

Information

This model represents a set of identical dp-controlled variable speed pumps that are piped in parallel. An optional check valve in series with each pump is included.

Control points

The following input and output points are available.

Details

See the base class Buildings.Experimental.DHC.Plants.Combined.Subsystems.BaseClasses.PartialMultiplePumps. for a description of the modeling approach.

Extends from BaseClasses.PartialMultiplePumps (Base class for modeling multiple identical pumps in parallel).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
IntegernPum Number of pumps
Booleanhave_varhave_varSetSet to true for variable speed pumps, false for constant speed
Booleanhave_valvetrueSet to true for inline check valve
Genericperredeclare parameter Fluid.Mo...Pump parameters
Booleanhave_varSettrueSet to true for variable setpoint, false for constant setpoint (design value)
Nominal condition
MassFlowRatemPum_flow_nominal Design mass flow rate (each pump) [kg/s]
PressureDifferencedpPum_nominal Design head (each pump) [Pa]
PressureDifferencedpValve_nominal10000Pressure drop of check valve fully open [Pa]
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
Nominal condition
Timetau1Time constant of fluid volume for nominal flow, used if energy or mass balance is dynamic [s]
Filtered speed
Booleanuse_inputFiltertrue= true, if speed is filtered with a 2nd order CriticalDamping filter
TimeriseTime30Rise time of the filter (time to reach 99.6 % of the speed) [s]
InitinitModelica.Blocks.Types.Init.I...Type of initialization (no init/steady state/initial state/initial output)
Initialization
AbsolutePressurep_startMedium.p_defaultStart value of pressure [Pa]
TemperatureT_startMedium.T_defaultStart value of temperature [K]
MassFractionX_start[Medium.nX]Medium.X_defaultStart value of mass fractions m_i/m [kg/kg]
ExtraPropertyC_start[Medium.nC]fill(0, Medium.nC)Start value of trace substances
ExtraPropertyC_nominal[Medium.nC]fill(1E-2, Medium.nC)Nominal value of trace substances. (Set to typical order of magnitude.)
Assumptions
BooleanallowFlowReversaltrue= false to simplify equations, assuming, but not enforcing, no flow reversal
Advanced
MassFlowRatem_flow_small1E-4*abs(m_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
Diagnostics
Booleanshow_Tfalse= true, if actual temperature at port is computed

Connectors

TypeNameDescription
FluidPort_aport_aFluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_bport_bFluid connector b (positive design flow direction is from port_a to port_b)
input BooleanInputy1[nPum]Start signal (VFD Run or motor starter contact)
output RealOutputPTotal power (all pumps) [W]
output BooleanOutputy1_actual[nPum]Pump status
input RealInputdp_inDifferential pressure setpoint [Pa]

Modelica definition

model MultiplePumpsDp "Model of multiple identical pumps in parallel with dp-controlled pump model" extends BaseClasses.PartialMultiplePumps( final have_var=have_varSet, redeclare final Buildings.Fluid.Movers.FlowControlled_dp pum( final m_flow_nominal=mPum_flow_nominal, final dp_nominal=dpPum_nominal), cst(final k=dpPum_nominal)); parameter Boolean have_varSet = true "Set to true for variable setpoint, false for constant setpoint (design value)"; Buildings.Controls.OBC.CDL.Interfaces.RealInput dp_in( final unit="Pa", final min=0) if have_var "Differential pressure setpoint"; equation connect(dp_in, inp.u1); connect(inp.y, pum.dp_in); end MultiplePumpsDp;

Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsFlow Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsFlow

Model of multiple identical pumps in parallel with flow-controlled pump model

Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsFlow

Information

This model represents a set of identical flow-controlled variable speed pumps that are piped in parallel. An optional check valve in series with each pump is included.

Control points

The following input and output points are available.

Details

See the base class Buildings.Experimental.DHC.Plants.Combined.Subsystems.BaseClasses.PartialMultiplePumps. for a description of the modeling approach.

Extends from BaseClasses.PartialMultiplePumps (Base class for modeling multiple identical pumps in parallel).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
IntegernPum Number of pumps
Booleanhave_varhave_varSetSet to true for variable speed pumps, false for constant speed
Booleanhave_valvetrueSet to true for inline check valve
Genericperredeclare parameter Fluid.Mo...Pump parameters
Booleanhave_varSettrueSet to true for variable setpoint, false for constant setpoint (design value)
Nominal condition
MassFlowRatemPum_flow_nominal Design mass flow rate (each pump) [kg/s]
PressureDifferencedpPum_nominal Design head (each pump) [Pa]
PressureDifferencedpValve_nominal10000Pressure drop of check valve fully open [Pa]
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
Nominal condition
Timetau1Time constant of fluid volume for nominal flow, used if energy or mass balance is dynamic [s]
Filtered speed
Booleanuse_inputFiltertrue= true, if speed is filtered with a 2nd order CriticalDamping filter
TimeriseTime30Rise time of the filter (time to reach 99.6 % of the speed) [s]
InitinitModelica.Blocks.Types.Init.I...Type of initialization (no init/steady state/initial state/initial output)
Initialization
AbsolutePressurep_startMedium.p_defaultStart value of pressure [Pa]
TemperatureT_startMedium.T_defaultStart value of temperature [K]
MassFractionX_start[Medium.nX]Medium.X_defaultStart value of mass fractions m_i/m [kg/kg]
ExtraPropertyC_start[Medium.nC]fill(0, Medium.nC)Start value of trace substances
ExtraPropertyC_nominal[Medium.nC]fill(1E-2, Medium.nC)Nominal value of trace substances. (Set to typical order of magnitude.)
Assumptions
BooleanallowFlowReversaltrue= false to simplify equations, assuming, but not enforcing, no flow reversal
Advanced
MassFlowRatem_flow_small1E-4*abs(m_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
Diagnostics
Booleanshow_Tfalse= true, if actual temperature at port is computed

Connectors

TypeNameDescription
FluidPort_aport_aFluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_bport_bFluid connector b (positive design flow direction is from port_a to port_b)
input BooleanInputy1[nPum]Start signal (VFD Run or motor starter contact)
output RealOutputPTotal power (all pumps) [W]
output BooleanOutputy1_actual[nPum]Pump status
input RealInputm_flow_inMass flow rate setpoint (total over all pumps) [kg/s]

Modelica definition

model MultiplePumpsFlow "Model of multiple identical pumps in parallel with flow-controlled pump model" extends BaseClasses.PartialMultiplePumps( final have_var=have_varSet, redeclare final Buildings.Fluid.Movers.FlowControlled_m_flow pum( final m_flow_nominal=mPum_flow_nominal, final dp_nominal=dpPum_nominal), cst(final k=mPum_flow_nominal)); parameter Boolean have_varSet = true "Set to true for variable setpoint, false for constant setpoint (design value)"; Buildings.Controls.OBC.CDL.Interfaces.RealInput m_flow_in( final unit="kg/s", final min=0) if have_var "Mass flow rate setpoint (total over all pumps)"; Buildings.Controls.OBC.CDL.Reals.Divide div1 "Divide total flow setpoint by number of pumps commanded On"; equation connect(m_flow_in, div1.u1); connect(com.nUniOnBou, div1.u2); connect(div1.y, inp.u1); connect(inp.y, pum.m_flow_in); end MultiplePumpsFlow;

Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsSpeed Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsSpeed

Model of multiple identical pumps in parallel with speed-controlled pump model

Buildings.Experimental.DHC.Plants.Combined.Subsystems.MultiplePumpsSpeed

Information

This model represents a set of identical speed-controlled pumps that are piped in parallel. The model may be configured to represent either constant speed pumps or variable speed pumps. An optional check valve in series with each pump is included.

Control points

The following input and output points are available.

Details

See the base class Buildings.Experimental.DHC.Plants.Combined.Subsystems.BaseClasses.PartialMultiplePumps. for a description of the modeling approach.

Extends from Buildings.Experimental.DHC.Plants.Combined.Subsystems.BaseClasses.PartialMultiplePumps (Base class for modeling multiple identical pumps in parallel).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
IntegernPum Number of pumps
Booleanhave_vartrueSet to true for variable speed pumps, false for constant speed
Booleanhave_valvetrueSet to true for inline check valve
Genericperredeclare parameter Fluid.Mo...Pump parameters
Nominal condition
MassFlowRatemPum_flow_nominal Design mass flow rate (each pump) [kg/s]
PressureDifferencedpPum_nominal Design head (each pump) [Pa]
PressureDifferencedpValve_nominal10000Pressure drop of check valve fully open [Pa]
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
Nominal condition
Timetau1Time constant of fluid volume for nominal flow, used if energy or mass balance is dynamic [s]
Filtered speed
Booleanuse_inputFiltertrue= true, if speed is filtered with a 2nd order CriticalDamping filter
TimeriseTime30Rise time of the filter (time to reach 99.6 % of the speed) [s]
InitinitModelica.Blocks.Types.Init.I...Type of initialization (no init/steady state/initial state/initial output)
Initialization
AbsolutePressurep_startMedium.p_defaultStart value of pressure [Pa]
TemperatureT_startMedium.T_defaultStart value of temperature [K]
MassFractionX_start[Medium.nX]Medium.X_defaultStart value of mass fractions m_i/m [kg/kg]
ExtraPropertyC_start[Medium.nC]fill(0, Medium.nC)Start value of trace substances
ExtraPropertyC_nominal[Medium.nC]fill(1E-2, Medium.nC)Nominal value of trace substances. (Set to typical order of magnitude.)
Assumptions
BooleanallowFlowReversaltrue= false to simplify equations, assuming, but not enforcing, no flow reversal
Advanced
MassFlowRatem_flow_small1E-4*abs(m_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
Diagnostics
Booleanshow_Tfalse= true, if actual temperature at port is computed

Connectors

TypeNameDescription
FluidPort_aport_aFluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_bport_bFluid connector b (positive design flow direction is from port_a to port_b)
input BooleanInputy1[nPum]Start signal (VFD Run or motor starter contact)
output RealOutputPTotal power (all pumps) [W]
output BooleanOutputy1_actual[nPum]Pump status
input RealInputyPump speed (common to all pumps) [1]

Modelica definition

model MultiplePumpsSpeed "Model of multiple identical pumps in parallel with speed-controlled pump model" extends Buildings.Experimental.DHC.Plants.Combined.Subsystems.BaseClasses.PartialMultiplePumps ( redeclare final Buildings.Fluid.Movers.SpeedControlled_y pum, cst(final k=1)); Buildings.Controls.OBC.CDL.Interfaces.RealInput y( final unit="1", final min=0, final max=1) if have_var "Pump speed (common to all pumps)"; equation connect(y, inp.u1); connect(inp.y, pum.y); end MultiplePumpsSpeed;