modelInjectionThreeWay

Injection circuit with three-way valve

Extends from Fluid.HydronicConfigurations.Interfaces.PartialHydronicConfiguration.

Information

Summary

This configuration (see schematic below) is used for constant flow primary and consumer circuits where the consumer circuit has a different supply temperature set point, either at design conditions or varying during operation. Although this configuration may theoretically still be used if the primary and secondary design temperatures are equal, it loses its main advantage which is that the control valve can be sized for a lower flow rate and can therefore be smaller. The fixed bypass ensures a consumer circuit operation hydronically decoupled from the primary side and the control valve position.

Schematic

The following table presents the main characteristics of this configuration.

Primary circuit Constant flow
Secondary (consumer) circuit Constant flow
Typical applications Consumer circuit supply temperature different from primary circuit such as underfloor heating systems
(Otherwise use Buildings.Fluid.HydronicConfigurations.ActiveNetworks.Decoupling)
Primary pressure differential either too low or too high or varying too much
Non-recommended applications DHC systems due to the significant recirculating primary flow rate at low load
Heating systems with condensing boilers for the same reason
Built-in valve control options Supply temperature
Return temperature
Control valve selection
β = ΔpA-AB / ΔpJ-AB ≈ 1
Sizing is only based on a minimum pressure drop of 3 kPa at design flow rate 1, design (see below).
Balancing requirement The three-way valve should be fully open at design conditions.
dpBal3_nominal=dp1_nominal-dpValve_nominal for the primary design flow rate 1, design = ṁ2, design * (T2, sup, design - T2, ret, design) / (T1, sup, design - T2, ret, design)
Lumped flow resistances include
(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 reduced flow through the control valve due to the intermediary bypass allows selecting a smaller valve for the same design pressure drop. The pressure drop through the control valve is compensated by the primary pump, reducing the secondary pump head.

The balancing procedure should ensure that the three-way valve is fully open at design conditions. Oversizing the primary balancing valve (yielding a lower pressure drop) is not detrimental to the consumer circuit operation: the control valve compensates by working at a lower opening fraction on average. However, the primary circuit operation is degraded with a lower ΔT and a higher mass flow rate. See Buildings.Fluid.HydronicConfigurations.ActiveNetworks.Examples.InjectionThreeWay for a numerical illustration of those effects.

Parameters

TypeNameDefaultDescription
Realn (from PartialHydronicConfiguration)2Flow exponent, n1=1 for laminar, n1=2 for turbulent
Movers.Data.GenericperPum (from PartialHydronicConfiguration)
Configuration
Booleanuse_siz (from PartialHydronicConfiguration)trueSet to true for built-in sizing of control valve and optional pump
Booleanuse_dp1 (from PartialHydronicConfiguration)Set to true to enable dp1_nominal
Booleanuse_dp2 (from PartialHydronicConfiguration)Set to true to enable dp2_nominal
Buildings.Fluid.HydronicConfigurations.Types.ValvetypVal (from PartialHydronicConfiguration)Type of control valve
Booleanhave_typVar (from PartialHydronicConfiguration)trueSet to true to enable the choice of the controlled variable
Nominal condition
Modelica.Units.SI.MassFlowRatem1_flow_nominal (from PartialHydronicConfiguration)Mass flow rate in primary circuit at design conditions
Modelica.Units.SI.MassFlowRatem2_flow_nominal (from PartialHydronicConfiguration)Mass flow rate in consumer circuit at design conditions
Modelica.Units.SI.PressureDifferencedp1_nominal (from PartialHydronicConfiguration)Primary circuit pressure differential at design conditions
Modelica.Units.SI.PressureDifferencedp2_nominal (from PartialHydronicConfiguration)Consumer circuit pressure differential at design conditions
Control valve
Buildings.Fluid.HydronicConfigurations.Types.ValveCharacteristictypCha (from PartialHydronicConfiguration)Buildings.Fluid.HydronicConfigurations.Types.ValveCharacteristic.EqualPercentageControl valve characteristic
Modelica.Units.SI.PressureDifferencedpValve_nominal (from PartialHydronicConfiguration)Control valve pressure drop at design conditions
Actuators.Valves.Data.GenericflowCharacteristics (from PartialHydronicConfiguration)Table with flow characteristics
Actuators.Valves.Data.GenericflowCharacteristics1 (from PartialHydronicConfiguration)Table with flow characteristics for direct flow path at port_1
Actuators.Valves.Data.GenericflowCharacteristics3 (from PartialHydronicConfiguration)Table with flow characteristics for bypass flow path at port_3
Pump
Buildings.Fluid.HydronicConfigurations.Types.PumptypPum (from PartialHydronicConfiguration)Buildings.Fluid.HydronicConfigurations.Types.Pump.VariableInputType of secondary pump
Buildings.Fluid.HydronicConfigurations.Types.PumpModeltypPumMod (from PartialHydronicConfiguration)Buildings.Fluid.HydronicConfigurations.Types.PumpModel.SpeedType of pump model
Modelica.Units.SI.MassFlowRatemPum_flow_nominal (from PartialHydronicConfiguration)m2_flow_nominalPump head at design conditions
Modelica.Units.SI.PressureDifferencedpPum_nominal (from PartialHydronicConfiguration)dp2_nominal + dpBal2_nominalPump head at design conditions
Controls
Buildings.Fluid.HydronicConfigurations.Types.ControltypCtl (from PartialHydronicConfiguration)Buildings.Fluid.HydronicConfigurations.Types.Control.NoneType of built-in controls
Buildings.Fluid.HydronicConfigurations.Types.ControlVariabletypVar (from PartialHydronicConfiguration)Buildings.Fluid.HydronicConfigurations.Types.ControlVariable.SupplyTemperatureControlled variable
Buildings.Controls.OBC.CDL.Types.SimpleControllercontrollerType (from PartialHydronicConfiguration)Buildings.Controls.OBC.CDL.Types.SimpleController.PIType of controller
Realk (from PartialHydronicConfiguration)0.1Gain of controller
RealTi (from PartialHydronicConfiguration)120Time constant of integrator block
Assumptions
Booleanuse_lumFloRes (from PartialHydronicConfiguration)trueSet to true to use a lumped flow resistance when possible
BooleanallowFlowReversal (from PartialHydronicConfiguration)true= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1
Balancing valves
Modelica.Units.SI.PressureDifferencedpBal1_nominal (from PartialHydronicConfiguration)0Primary balancing valve pressure drop at design conditions
Modelica.Units.SI.PressureDifferencedpBal2_nominal (from PartialHydronicConfiguration)0Secondary balancing valve pressure drop at design conditions
Modelica.Units.SI.PressureDifferencedpBal3_nominal (from PartialHydronicConfiguration)0Bypass balancing valve pressure drop at design conditions
Dynamics › Conservation equations
Modelica.Fluid.Types.DynamicsenergyDynamics (from PartialHydronicConfiguration)Modelica.Fluid.Types.Dynamics.FixedInitialType of energy balance: dynamic (3 initialization options) or steady state
Advanced › Diagnostics
Booleanshow_T (from PartialHydronicConfiguration)false= true, if actual temperature at port is computed

Connectors

TypeNameDefaultDescription
Modelica.Fluid.Interfaces.FluidPort_aport_a1 (from PartialHydronicConfiguration)Primary supply port
Modelica.Fluid.Interfaces.FluidPort_bport_b1 (from PartialHydronicConfiguration)Primary return port
Modelica.Fluid.Interfaces.FluidPort_aport_a2 (from PartialHydronicConfiguration)Secondary return port
Modelica.Fluid.Interfaces.FluidPort_bport_b2 (from PartialHydronicConfiguration)Secondary supply port
Buildings.Controls.OBC.CDL.Interfaces.RealInputyVal (from PartialHydronicConfiguration)Valve control signal
Buildings.Controls.OBC.CDL.Interfaces.RealInputset (from PartialHydronicConfiguration)Set point
Buildings.Controls.OBC.CDL.Interfaces.RealInputyPum (from PartialHydronicConfiguration)Pump control signal (variable speed)
Buildings.Controls.OBC.CDL.Interfaces.IntegerInputmode (from PartialHydronicConfiguration)Operating mode
Buildings.Controls.OBC.CDL.Interfaces.RealOutputyVal_actual (from PartialHydronicConfiguration)Valve position feedback
Buildings.Controls.OBC.CDL.Interfaces.RealOutputyPum_actual (from PartialHydronicConfiguration)Actual pump input value that is used for computations
Buildings.Controls.OBC.CDL.Interfaces.RealOutputPPum (from PartialHydronicConfiguration)Pump electrical power

Components

TypeNameDefaultDescription
Medium.MassFlowRatem1_flow (from PartialHydronicConfiguration)port_a1.m_flowMass flow rate from port_a1 to port_b1 (m1_flow > 0 is design flow direction)
Modelica.Units.SI.PressureDifferencedp1 (from PartialHydronicConfiguration)port_a1.p - port_b1.pPressure difference between port_a1 and port_b1
Medium.MassFlowRatem2_flow (from PartialHydronicConfiguration)port_a2.m_flowMass flow rate from port_a2 to port_b2 (m2_flow > 0 is design flow direction)
Modelica.Units.SI.PressureDifferencedp2 (from PartialHydronicConfiguration)port_a2.p - port_b2.pPressure difference between port_a2 and port_b2
Medium.ThermodynamicStatesta_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.ThermodynamicStatesta_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.ThermodynamicStatesta_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.ThermodynamicStatesta_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
Buildings.Fluid.HydronicConfigurations.Components.ThreeWayValvevalControl valve
FixedResistances.JunctionjunJunction
FixedResistances.JunctionjunBypSupJunction
FixedResistances.JunctionjunBypRetJunction
FixedResistances.PressureDropres1Primary balancing valve
FixedResistances.PressureDropres2Secondary balancing valve
Buildings.Fluid.HydronicConfigurations.Components.PumppumPump
Sensors.TemperatureTwoPortT2SupConsumer circuit supply temperature sensor
Controls.PIDWithOperatingModectlController
Buildings.Controls.OBC.CDL.Integers.GreaterThresholdisEnaReturns true if enabled
Sensors.TemperatureTwoPortT2RetConsumer circuit return temperature sensor
Buildings.Controls.OBC.CDL.Routing.RealExtractorextIndSigSelect measured signal
Buildings.Controls.OBC.CDL.Integers.Sources.ConstantctlVarControlled variable selector

Revisions

  • June 17, 2026, by Michael Wetter:
    Updated implementation to allow a flow coefficient n that is different from 2. This allows use of the model for not fully turbulent flow.
    This is for Buildings, #4620.
  • June 30, 2022, by Antoine Gautier:
    First implementation.