modelDecoupling
Extends from Fluid.HydronicConfigurations.Interfaces.PartialHydronicConfiguration.
Information
Summary
This configuration (see schematic below) is used for variable flow primary and consumer circuits where the consumer circuit has the same supply temperature set point as the primary circuit. The fixed bypass prevents the primary pressure differential from being transmitted to the consumer circuit. This allows a proper operation of the terminal control valves on the consumer side when the primary pressure differential is either too low or too high or varying too much. The self-acting Δp control valve maintains a nearly constant bypass mass flow rate, set by default to 5% of the consumer circuit design mass flow rate.
The following table presents the main characteristics of this configuration.
| Primary circuit | Variable flow |
| Secondary (consumer) circuit | Variable flow |
| Typical applications |
Same consumer circuit supply temperature set point as primary circuit (Otherwise use either this model in conjunction with Buildings.Fluid.HydronicConfigurations.PassiveNetworks.SingleMixing, or Buildings.Fluid.HydronicConfigurations.ActiveNetworks.InjectionTwoWay) Primary pressure differential either too low or too high or varying too much such as in DHC systems |
| Non-recommended applications |
Heating systems with condensing boilers due to the recirculating primary flow rate (Since the recirculating primary flow rate is controlled to a nearly constant value, this configuration is used in DHC systems.) |
| Built-in valve control options | Self-acting Δp control valve with a proportional band of ±20% around the pressure differential set point |
|
Control valve selection (See the nomenclature in the schematic.) |
β = ΔpA-B /
(Δp1 + ΔpA-J)
≈ ΔpA-B / Δp1 The valve is sized with a pressure drop of Δp1 / 2 for a mass flow rate 5 to 10% higher than m2_flow_nominal.
|
| Balancing requirement |
The design pressure drop of the bypass balancing valve
dpBal3_nominal is typically around 10 kPa
for a mass flow rate of m1_flow_nominal-m2_flow_nominal.
No primary balancing valve is needed in addition to the self-acting
Δp control valve.(For an actuated control valve with external controls, the same balancing requirements as for Buildings.Fluid.HydronicConfigurations.ActiveNetworks.InjectionTwoWay hold. No bypass balancing valve is needed.) |
|
Lumped flow resistance includes (With the setting use_lumFloRes=true.)
|
Control valve val and primary balancing valve res1
|
Additional comments
The P-controller used in the model mimics a self-acting Δp control valve with a proportional band of ±20% around the pressure differential set point. This set point corresponds to the design pressure drop of the bypass balancing valve. Note that this configuration yields a nearly constant bypass mass flow rate, as opposed to a constant percentage of the consumer circuit mass flow rate provided by a control based on the return temperature upstream and downstream of the bypass. However, as illustrated in Buildings.Fluid.HydronicConfigurations.ActiveNetworks.Examples.DecouplingTemperature the latter control logic is flawed at low load, and the primary mass flow rate potentially maxed out. Since there is no standard strategy to counteract that effect, the configuration with built-in controls based on return temperature is not included in this package.
The specific built-in control option implemented in this model does not
depend on the actual function of the consumer circuit
(such as cooling, heating, or change-over).
Therefore, the model remains the same whatever the value
assigned to the parameter typCtl except if
None (no built-in controls) is selected.
In that latter case only, no built-in controls are included and the user
must connect a control signal to modulate the valve.
For consumer circuits with a different supply temperature set point, this configuration is sometimes used in conjunction with Buildings.Fluid.HydronicConfigurations.PassiveNetworks.SingleMixing, see the example Buildings.Fluid.HydronicConfigurations.ActiveNetworks.Examples.DecouplingMixing.
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| Real | n (from PartialHydronicConfiguration) | 2 | Flow exponent, n1=1 for laminar, n1=2 for turbulent |
| Movers.Data.Generic | perPum (from PartialHydronicConfiguration) | ||
| Configuration | |||
| Boolean | use_siz (from PartialHydronicConfiguration) | true | Set to true for built-in sizing of control valve and optional pump |
| Boolean | use_dp1 (from PartialHydronicConfiguration) | Set to true to enable dp1_nominal | |
| Boolean | use_dp2 (from PartialHydronicConfiguration) | Set to true to enable dp2_nominal | |
| Buildings.Fluid.HydronicConfigurations.Types.Valve | typVal (from PartialHydronicConfiguration) | Type of control valve | |
| Boolean | have_typVar (from PartialHydronicConfiguration) | true | Set to true to enable the choice of the controlled variable |
| Nominal condition | |||
| Modelica.Units.SI.MassFlowRate | m1_flow_nominal (from PartialHydronicConfiguration) | Mass flow rate in primary circuit at design conditions | |
| Modelica.Units.SI.MassFlowRate | m2_flow_nominal (from PartialHydronicConfiguration) | Mass flow rate in consumer circuit at design conditions | |
| Modelica.Units.SI.PressureDifference | dp1_nominal (from PartialHydronicConfiguration) | Primary circuit pressure differential at design conditions | |
| Modelica.Units.SI.PressureDifference | dp2_nominal (from PartialHydronicConfiguration) | Consumer circuit pressure differential at design conditions | |
| Control valve | |||
| Buildings.Fluid.HydronicConfigurations.Types.ValveCharacteristic | typCha (from PartialHydronicConfiguration) | Buildings.Fluid.HydronicConfigurations.Types.ValveCharacteristic.EqualPercentage | Control valve characteristic |
| Modelica.Units.SI.PressureDifference | dpValve_nominal (from PartialHydronicConfiguration) | Control valve pressure drop at design conditions | |
| Actuators.Valves.Data.Generic | flowCharacteristics (from PartialHydronicConfiguration) | Table with flow characteristics | |
| Actuators.Valves.Data.Generic | flowCharacteristics1 (from PartialHydronicConfiguration) | Table with flow characteristics for direct flow path at port_1 | |
| Actuators.Valves.Data.Generic | flowCharacteristics3 (from PartialHydronicConfiguration) | Table with flow characteristics for bypass flow path at port_3 | |
| Pump | |||
| Buildings.Fluid.HydronicConfigurations.Types.Pump | typPum (from PartialHydronicConfiguration) | Buildings.Fluid.HydronicConfigurations.Types.Pump.VariableInput | Type of secondary pump |
| Buildings.Fluid.HydronicConfigurations.Types.PumpModel | typPumMod (from PartialHydronicConfiguration) | Buildings.Fluid.HydronicConfigurations.Types.PumpModel.Speed | Type of pump model |
| Modelica.Units.SI.MassFlowRate | mPum_flow_nominal (from PartialHydronicConfiguration) | m2_flow_nominal | Pump head at design conditions |
| Modelica.Units.SI.PressureDifference | dpPum_nominal (from PartialHydronicConfiguration) | dp2_nominal + dpBal2_nominal | Pump head at design conditions |
| Controls | |||
| Buildings.Fluid.HydronicConfigurations.Types.Control | typCtl (from PartialHydronicConfiguration) | Buildings.Fluid.HydronicConfigurations.Types.Control.None | Type of built-in controls |
| Buildings.Fluid.HydronicConfigurations.Types.ControlVariable | typVar (from PartialHydronicConfiguration) | Buildings.Fluid.HydronicConfigurations.Types.ControlVariable.SupplyTemperature | Controlled variable |
| Buildings.Controls.OBC.CDL.Types.SimpleController | controllerType (from PartialHydronicConfiguration) | Buildings.Controls.OBC.CDL.Types.SimpleController.PI | Type of controller |
| Real | k (from PartialHydronicConfiguration) | 0.1 | Gain of controller |
| Real | Ti (from PartialHydronicConfiguration) | 120 | Time constant of integrator block |
| Assumptions | |||
| Boolean | use_lumFloRes (from PartialHydronicConfiguration) | true | Set to true to use a lumped flow resistance when possible |
| Boolean | allowFlowReversal (from PartialHydronicConfiguration) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1 |
| Balancing valves | |||
| Modelica.Units.SI.PressureDifference | dpBal1_nominal (from PartialHydronicConfiguration) | 0 | Primary balancing valve pressure drop at design conditions |
| Modelica.Units.SI.PressureDifference | dpBal2_nominal (from PartialHydronicConfiguration) | 0 | Secondary balancing valve pressure drop at design conditions |
| Modelica.Units.SI.PressureDifference | dpBal3_nominal (from PartialHydronicConfiguration) | 0 | Bypass balancing valve pressure drop at design conditions |
| Dynamics › Conservation equations | |||
| Modelica.Fluid.Types.Dynamics | energyDynamics (from PartialHydronicConfiguration) | Modelica.Fluid.Types.Dynamics.FixedInitial | Type of energy balance: dynamic (3 initialization options) or steady state |
| Advanced › Diagnostics | |||
| Boolean | show_T (from PartialHydronicConfiguration) | false | = true, if actual temperature at port is computed |
Connectors
Components
| Type | Name | Default | Description |
|---|---|---|---|
| Medium.MassFlowRate | m1_flow (from PartialHydronicConfiguration) | port_a1.m_flow | Mass flow rate from port_a1 to port_b1 (m1_flow > 0 is design flow direction) |
| Modelica.Units.SI.PressureDifference | dp1 (from PartialHydronicConfiguration) | port_a1.p - port_b1.p | Pressure difference between port_a1 and port_b1 |
| Medium.MassFlowRate | m2_flow (from PartialHydronicConfiguration) | port_a2.m_flow | Mass flow rate from port_a2 to port_b2 (m2_flow > 0 is design flow direction) |
| Modelica.Units.SI.PressureDifference | dp2 (from PartialHydronicConfiguration) | port_a2.p - port_b2.p | Pressure difference between port_a2 and port_b2 |
| Medium.ThermodynamicState | sta_a1 (from PartialHydronicConfiguration) | if allowFlowReversal then Medium.setState_phX(port_a1.p, noEvent(actualStream(port_a1.h_outflow)), noEvent(actualStream(port_a1.Xi_outflow))) else Medium.setState_phX(port_a1.p, inStream(port_a1.h_outflow), inStream(port_a1.Xi_outflow)) | Medium properties in port_a1 |
| Medium.ThermodynamicState | sta_b1 (from PartialHydronicConfiguration) | if allowFlowReversal then Medium.setState_phX(port_b1.p, noEvent(actualStream(port_b1.h_outflow)), noEvent(actualStream(port_b1.Xi_outflow))) else Medium.setState_phX(port_b1.p, port_b1.h_outflow, port_b1.Xi_outflow) | Medium properties in port_b1 |
| Medium.ThermodynamicState | sta_a2 (from PartialHydronicConfiguration) | if allowFlowReversal then Medium.setState_phX(port_a2.p, noEvent(actualStream(port_a2.h_outflow)), noEvent(actualStream(port_a2.Xi_outflow))) else Medium.setState_phX(port_a2.p, inStream(port_a2.h_outflow), inStream(port_a2.Xi_outflow)) | Medium properties in port_a2 |
| Medium.ThermodynamicState | sta_b2 (from PartialHydronicConfiguration) | if allowFlowReversal then Medium.setState_phX(port_b2.p, noEvent(actualStream(port_b2.h_outflow)), noEvent(actualStream(port_b2.Xi_outflow))) else Medium.setState_phX(port_b2.p, port_b2.h_outflow, port_b2.Xi_outflow) | Medium properties in port_b2 |
| FixedResistances.Junction | junBypSup | Junction | |
| FixedResistances.Junction | junBypRet | Junction | |
| Components.TwoWayValve | val | Control valve | |
| FixedResistances.PressureDrop | res1 | Primary balancing valve | |
| FixedResistances.PressureDrop | res2 | Secondary balancing valve | |
| Buildings.Controls.OBC.CDL.Integers.GreaterThreshold | isEna | Returns true if enabled | |
| Components.Pump | pum | Pump | |
| Sensors.TemperatureTwoPort | T2Sup | Consumer circuit supply temperature sensor | |
| Controls.PIDWithOperatingMode | ctl | Controller | |
| Sensors.TemperatureTwoPort | T2Ret | Consumer circuit return temperature sensor | |
| FixedResistances.PressureDrop | res3 | Bypass balancing valve | |
| Sensors.RelativePressure | dp3 | Pressure drop across bypass balancing valve | |
| Buildings.Controls.OBC.CDL.Reals.Sources.Constant | dp3Set | Pressure differential set point | |
| Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger | enaCtl | Enable signal for control loop |
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. -
June 30, 2022, by Antoine Gautier:
First implementation.