Buildings.Fluid.HydronicConfigurations.PassiveNetworks

Package of hydronic configurations for passive networks

Information

This package contains models of hydronic configurations compatible with passive primary networks.

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

Package Content

Name Description
Buildings.Fluid.HydronicConfigurations.PassiveNetworks.DualMixing DualMixing Dual mixing circuit
Buildings.Fluid.HydronicConfigurations.PassiveNetworks.SingleMixing SingleMixing Single mixing circuit
Buildings.Fluid.HydronicConfigurations.PassiveNetworks.Examples Examples Example models

Buildings.Fluid.HydronicConfigurations.PassiveNetworks.DualMixing Buildings.Fluid.HydronicConfigurations.PassiveNetworks.DualMixing

Dual mixing circuit

Buildings.Fluid.HydronicConfigurations.PassiveNetworks.DualMixing

Information

Summary

This configuration (see schematic below) is used instead of Buildings.Fluid.HydronicConfigurations.PassiveNetworks.SingleMixing when the primary and secondary circuits have a different design supply temperature. Contrary to the single mixing circuit, the use of this configuration is restricted to constant flow secondary circuits due to the constraint on the fixed bypass pressure differential that must remain sufficiently high.

Schematic

The following table presents the main characteristics of this configuration.

Primary circuit Variable flow
Secondary (consumer) circuit Constant flow
Typical applications Consumer circuit supply temperature different from primary circuit such as underfloor heating systems
Non-recommended applications Applications where primary and secondary supply temperature must be equal as secondary flow recirculation cannot be avoided.
Built-in valve control options Supply temperature
Control valve selection
(See the nomenclature in the schematic.)
β = ΔpA-AB / ΔpK-L = ΔpA-AB / (Δp1 + ΔpA-AB)
The control valve is sized with a pressure drop equal to the maximum of Δp1 and 3e3 Pa at 1, design (see below).
Balancing requirement

The three-way valve should be fully open at design conditions.
dpBal3_nominal=dpValve_nominal+dp1_nominal for a design flow rate in the fixed bypass equal to: 3, design = ṁ2, design - ṁ1, design = ṁ2, design * (T1, sup, design - T2, sup, design) / (T1, sup, design - T2, ret, design)
The primary design flow rate is: 1, design = ṁ2, design * (T2, sup, design - T2, ret, design) / (T1, sup, design - T2, ret, design)

Lumped flow resistance includes
(With the setting use_lumFloRes=true.)
Control valve val only
(So the option has no effect here: the balancing valves are always modeled as distinct flow resistances.)

Additional comments

The bypass balancing valve works together with the secondary pump to generate the pressure differential differential at the boundaries of the control valve. So it is paramount for proper operation of the consumer circuit that the bypass balancing valve generates enough pressure drop at its design flow rate 3, design otherwise the consumer circuit is starved with primary flow rate despite the control valve being fully open. So oversizing the bypass balancing valve (yielding a lower pressure drop) is detrimental to the consumer circuit operation. Undersizing the bypass balancing valve (yielding a lower pressure drop) does not disturb the secondary circuit operation as the control valve then compensates for the elevated pressure differential by working at a lower opening on average. However, the secondary pump head is increased and so is the electricity consumption. See Buildings.Fluid.HydronicConfigurations.PassiveNetworks.Examples.DualMixing for a numerical illustration of those effects.

The parameter dp1_nominal stands for the potential primary back pressure and must be provided as an absolute value. By default the secondary pump is parameterized with a design pressure rise equal to dp2_nominal + dpBal2_nominal + dpBal3_nominal.

Extends from HydronicConfigurations.Interfaces.PartialHydronicConfiguration.

Parameters

TypeNameDefaultDescription
replaceable package MediumWaterMedium in the component
Configuration
Booleanuse_siztrueSet to true for built-in sizing of control valve and optional pump
Booleanuse_dp1use_sizSet to true to enable dp1_nominal
Booleanuse_dp2use_siz and typPum <> Buildi...Set to true to enable dp2_nominal
ValvetypValBuildings.Fluid.HydronicConf...Type of control valve
Booleanhave_typVarfalseSet to true to enable the choice of the controlled variable
Nominal condition
MassFlowRatem1_flow_nominal Mass flow rate in primary circuit at design conditions [kg/s]
MassFlowRatem2_flow_nominal Mass flow rate in consumer circuit at design conditions [kg/s]
PressureDifferencedp1_nominal Primary circuit pressure differential at design conditions [Pa]
PressureDifferencedp2_nominal Consumer circuit pressure differential at design conditions [Pa]
Control valve
ValveCharacteristictypChaBuildings.Fluid.HydronicConf...Control valve characteristic
PressureDifferencedpValve_nominalmax(dp1_nominal, 3e3)Control valve pressure drop at design conditions [Pa]
GenericflowCharacteristics Table with flow characteristics
GenericflowCharacteristics1 Table with flow characteristics for direct flow path at port_1
GenericflowCharacteristics3 Table with flow characteristics for bypass flow path at port_3
Pump
PumptypPumBuildings.Fluid.HydronicConf...Type of secondary pump
PumpModeltypPumModBuildings.Fluid.HydronicConf...Type of pump model
MassFlowRatemPum_flow_nominalm2_flow_nominalPump head at design conditions [kg/s]
PressureDifferencedpPum_nominaldp2_nominal + dpBal2_nominal...Pump head at design conditions [Pa]
GenericperPumredeclare parameter Movers.D...Pump parameters
Controls
ControltypCtlBuildings.Fluid.HydronicConf...Type of built-in controls
ControlVariabletypVarBuildings.Fluid.HydronicConf...Controlled variable
SimpleControllercontrollerTypeBuildings.Controls.OBC.CDL.T...Type of controller
Realk0.1Gain of controller
RealTi120Time constant of integrator block [s]
Balancing valves
PressureDifferencedpBal1_nominal0Primary balancing valve pressure drop at design conditions [Pa]
PressureDifferencedpBal2_nominal0Secondary balancing valve pressure drop at design conditions [Pa]
PressureDifferencedpBal3_nominaldp1_nominal + dpValve_nominalBypass balancing valve pressure drop at design conditions [Pa]
Assumptions
Booleanuse_lumFloRestrueSet to true to use a lumped flow resistance when possible
BooleanallowFlowReversaltrue= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
Advanced
Diagnostics
Booleanshow_Tfalse= true, if actual temperature at port is computed

Connectors

TypeNameDescription
FluidPort_aport_a1Primary supply port
FluidPort_bport_b1Primary return port
FluidPort_aport_a2Secondary return port
FluidPort_bport_b2Secondary supply port
input RealInputyValValve control signal [1]
input RealInputsetSet point [K]
input RealInputyPumPump control signal (variable speed) [1]
input IntegerInputmodeOperating mode
output RealOutputyVal_actualValve position feedback [1]
output RealOutputyPum_actualActual pump input value that is used for computations [1]
output RealOutputPPumPump electrical power [W]

Modelica definition

model DualMixing "Dual mixing circuit" extends HydronicConfigurations.Interfaces.PartialHydronicConfiguration( dpValve_nominal=max(dp1_nominal, 3e3), dpBal3_nominal=dp1_nominal+dpValve_nominal, dpPum_nominal=dp2_nominal + dpBal2_nominal + dpBal3_nominal, set(final unit="K", displayUnit="degC"), final dpBal1_nominal=0, final typVal=Buildings.Fluid.HydronicConfigurations.Types.Valve.ThreeWay, final typVar=Buildings.Fluid.HydronicConfigurations.Types.ControlVariable.SupplyTemperature, final have_typVar=false, final use_dp1=use_siz, final use_dp2=use_siz and typPum<>Buildings.Fluid.HydronicConfigurations.Types.Pump.None); Buildings.Fluid.HydronicConfigurations.Components.ThreeWayValve val( redeclare final package Medium=Medium, final typCha=typCha, final energyDynamics=energyDynamics, use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, final portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional else Modelica.Fluid.Types.PortFlowDirection.Entering, final portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional else Modelica.Fluid.Types.PortFlowDirection.Leaving, final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional else Modelica.Fluid.Types.PortFlowDirection.Entering, final m_flow_nominal=m1_flow_nominal, final dpValve_nominal=dpValve_nominal, final dpFixed_nominal={0,0}, final flowCharacteristics1=flowCharacteristics1, final flowCharacteristics3=flowCharacteristics3) "Control valve"; FixedResistances.Junction jun( redeclare final package Medium = Medium, final energyDynamics=energyDynamics, final portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional else Modelica.Fluid.Types.PortFlowDirection.Entering, final portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional else Modelica.Fluid.Types.PortFlowDirection.Leaving, final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional else Modelica.Fluid.Types.PortFlowDirection.Leaving, final m_flow_nominal=m1_flow_nominal .* {1,-1,-1}, final dp_nominal=fill(0, 3)) "Junction"; FixedResistances.PressureDrop res2( redeclare final package Medium = Medium, final allowFlowReversal=allowFlowReversal, final m_flow_nominal=m2_flow_nominal, final dp_nominal=dpBal2_nominal) "Secondary balancing valve"; Buildings.Fluid.HydronicConfigurations.Components.Pump pum( redeclare final package Medium = Medium, final typ=typPum, final typMod=typPumMod, final m_flow_nominal=mPum_flow_nominal, final dp_nominal=dpPum_nominal, final energyDynamics=energyDynamics, final allowFlowReversal=allowFlowReversal, use_inputFilter=energyDynamics<>Modelica.Fluid.Types.Dynamics.SteadyState, final per=perPum) "Pump"; Sensors.TemperatureTwoPort T2Sup( redeclare final package Medium = Medium, final m_flow_nominal=m2_flow_nominal, final allowFlowReversal=allowFlowReversal, tau=if energyDynamics == Modelica.Fluid.Types.Dynamics.SteadyState then 0 else 1) "Consumer circuit supply temperature sensor"; FixedResistances.Junction junBypSup( redeclare final package Medium = Medium, final energyDynamics=energyDynamics, final portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional else Modelica.Fluid.Types.PortFlowDirection.Entering, final portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional else Modelica.Fluid.Types.PortFlowDirection.Leaving, final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional else Modelica.Fluid.Types.PortFlowDirection.Leaving, final m_flow_nominal=(m2_flow_nominal - m1_flow_nominal) .* {1,-1,1}, final dp_nominal=fill(0, 3)) "Junction"; FixedResistances.Junction junBypRet( redeclare final package Medium = Medium, final energyDynamics=energyDynamics, final portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional else Modelica.Fluid.Types.PortFlowDirection.Entering, final portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional else Modelica.Fluid.Types.PortFlowDirection.Leaving, final portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional else Modelica.Fluid.Types.PortFlowDirection.Leaving, final m_flow_nominal=(m2_flow_nominal - m1_flow_nominal) .* {1,-1,-1}, final dp_nominal=fill(0, 3)) "Junction"; Sensors.TemperatureTwoPort T2Ret( redeclare final package Medium = Medium, final m_flow_nominal=m2_flow_nominal, final allowFlowReversal=allowFlowReversal, tau=if energyDynamics == Modelica.Fluid.Types.Dynamics.SteadyState then 0 else 1) "Consumer circuit return temperature sensor"; Buildings.Controls.OBC.CDL.Integers.GreaterThreshold isEna(final t=Controls.OperatingModes.disabled) "Returns true if enabled"; Controls.PIDWithOperatingMode ctl( u_s(final unit="K", displayUnit="degC"), u_m(final unit="K", displayUnit="degC"), final reverseActing=typCtl == Buildings.Fluid.HydronicConfigurations.Types.Control.Heating, final yMin=0, final yMax=1, final controllerType=controllerType, final k=k, final Ti=Ti) if typCtl <> Buildings.Fluid.HydronicConfigurations.Types.Control.None "Controller"; FixedResistances.PressureDrop res3( redeclare final package Medium = Medium, final allowFlowReversal=allowFlowReversal, final m_flow_nominal=m2_flow_nominal - m1_flow_nominal, final dp_nominal=dpBal3_nominal) "Bypass balancing valve"; initial equation assert( m2_flow_nominal > m1_flow_nominal, "In " + getInstanceName() + ": Primary mass flow rate must be strictly lower than consumer circuit mass flow rate " + "at design conditions."); if dpBal3_nominal <= dpValve_nominal then Modelica.Utilities.Streams.print( "*** Warning: In " + getInstanceName() + ": The bypass balancing valve should generate a pressure drop higher than " + "the control valve at design conditions to provide sufficient primary flow."); end if; equation connect(val.port_3, jun.port_3); connect(jun.port_2, port_b1); connect(val.port_1, port_a1); connect(junBypRet.port_2, jun.port_1); connect(pum.port_b, T2Sup.port_a); connect(T2Sup.port_b, port_b2); connect(pum.port_a, junBypSup.port_2); connect(val.port_2, junBypSup.port_1); connect(port_a2, T2Ret.port_a); connect(T2Ret.port_b, res2.port_a); connect(res2.port_b, junBypRet.port_1); connect(mode, isEna.u); connect(set, ctl.u_s); connect(T2Sup.T, ctl.u_m); connect(ctl.y, val.y); connect(mode, ctl.mode); connect(junBypSup.port_3, res3.port_b); connect(res3.port_a, junBypRet.port_3); connect(yVal, val.y); connect(pum.P, PPum); connect(pum.y_actual, yPum_actual); connect(val.y_actual, yVal_actual); connect(pum.y1, isEna.y); connect(yPum, pum.y); end DualMixing;

Buildings.Fluid.HydronicConfigurations.PassiveNetworks.SingleMixing Buildings.Fluid.HydronicConfigurations.PassiveNetworks.SingleMixing

Single mixing circuit

Buildings.Fluid.HydronicConfigurations.PassiveNetworks.SingleMixing

Information

Summary

This configuration (see schematic below) is used for variable flow primary circuits and either constant flow or variable flow secondary circuits that have a design supply temperature identical to the primary circuit but a varying set point during operation.

Schematic

The following table presents the main characteristics of this configuration.

Primary circuit Variable flow
Secondary (consumer) circuit Constant or variable flow
Typical applications Widely used in heating applications as it is very simple to achieve.
Non-recommended applications Low-temperature systems that would require the control valve to be operated on a limited opening range: use Buildings.Fluid.HydronicConfigurations.PassiveNetworks.DualMixing instead.
Built-in valve control options Supply temperature
Control valve selection
(See the nomenclature in the schematic.)
β = ΔpA-AB / (Δp1 + ΔpA-AB)
The control valve is sized with a pressure drop equal to the maximum of Δp1 and 3e3 Pa.
Balancing requirement In most cases the bypass balancing valve is not needed. However, it may be needed to counter negative back pressure created by other served circuits, see Buildings.Fluid.HydronicConfigurations.PassiveNetworks.Examples.SingleMixingOpenLoop.
Lumped flow resistance includes
(With the setting use_lumFloRes=true.)
Control valve val and primary balancing valve res1

Additional comments

The parameter dp1_nominal stands for the potential primary back pressure and must be provided as an absolute value. By default the secondary pump is parameterized with a design pressure rise equal to dp2_nominal + dpBal2_nominal + max({val.dpValve_nominal + dp1_nominal, val.dp3Valve_nominal + dpBal3_nominal}.

Extends from BaseClasses.SingleMixing (Single mixing circuit).

Parameters

TypeNameDefaultDescription
replaceable package MediumWaterMedium in the component
Configuration
Booleanuse_siztrueSet to true for built-in sizing of control valve and optional pump
Nominal condition
MassFlowRatem2_flow_nominal Mass flow rate in consumer circuit at design conditions [kg/s]
PressureDifferencedp1_nominal Primary circuit pressure differential at design conditions [Pa]
PressureDifferencedp2_nominal Consumer circuit pressure differential at design conditions [Pa]
Control valve
ValveCharacteristictypChaBuildings.Fluid.HydronicConf...Control valve characteristic
PressureDifferencedpValve_nominalmax(dp1_nominal, 3E3)Control valve pressure drop at design conditions [Pa]
GenericflowCharacteristics Table with flow characteristics
GenericflowCharacteristics1 Table with flow characteristics for direct flow path at port_1
GenericflowCharacteristics3 Table with flow characteristics for bypass flow path at port_3
Pump
PumptypPumBuildings.Fluid.HydronicConf...Type of secondary pump
PumpModeltypPumModBuildings.Fluid.HydronicConf...Type of pump model
MassFlowRatemPum_flow_nominalm2_flow_nominalPump head at design conditions [kg/s]
PressureDifferencedpPum_nominaldp2_nominal + dpBal2_nominal...Pump head at design conditions [Pa]
GenericperPumredeclare parameter Movers.D...Pump parameters
Controls
ControltypCtlBuildings.Fluid.HydronicConf...Type of built-in controls
ControlVariabletypVarBuildings.Fluid.HydronicConf...Controlled variable
SimpleControllercontrollerTypeBuildings.Controls.OBC.CDL.T...Type of controller
Realk0.1Gain of controller
RealTi120Time constant of integrator block [s]
Balancing valves
PressureDifferencedpBal1_nominal0Primary balancing valve pressure drop at design conditions [Pa]
PressureDifferencedpBal2_nominal0Secondary balancing valve pressure drop at design conditions [Pa]
PressureDifferencedpBal3_nominal0Bypass balancing valve pressure drop at design conditions [Pa]
Assumptions
Booleanuse_lumFloRestrueSet to true to use a lumped flow resistance when possible
BooleanallowFlowReversaltrue= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
Advanced
Diagnostics
Booleanshow_Tfalse= true, if actual temperature at port is computed

Connectors

TypeNameDescription
FluidPort_aport_a1Primary supply port
FluidPort_bport_b1Primary return port
FluidPort_aport_a2Secondary return port
FluidPort_bport_b2Secondary supply port
input RealInputyValValve control signal [1]
input RealInputsetSet point [K]
input RealInputyPumPump control signal (variable speed) [1]
input IntegerInputmodeOperating mode
output RealOutputyVal_actualValve position feedback [1]
output RealOutputyPum_actualActual pump input value that is used for computations [1]
output RealOutputPPumPump electrical power [W]

Modelica definition

model SingleMixing "Single mixing circuit" extends BaseClasses.SingleMixing( dpPum_nominal=dp2_nominal + dpBal2_nominal + max({val.dpValve_nominal + dp1_nominal, val.dp3Valve_nominal + dpBal3_nominal}), final dpBal1_nominal=0); end SingleMixing;