modelFourPortHeatMassExchanger

Model transporting two fluid streams between four ports with storing mass or energy

Extends from Buildings.Fluid.Interfaces.PartialFourPortInterface (Partial model with four ports and declaration of quantities that are used by many models), Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters (Parameters for flow resistance for models with four ports).

Information

This component transports two fluid streams between four ports. It provides the basic model for implementing a dynamic heat exchanger.

The model can be used as-is, although there will be no heat or mass transfer between the two fluid streams. To add heat transfer, heat flow can be added to the heat port of the two volumes. See for example Buildings.Fluid.Chillers.Carnot_y. To add moisture input into (or moisture output from) volume vol2, the model can be replaced with Buildings.Fluid.MixingVolumes.MixingVolumeMoistAir.

Implementation

The variable names follow the conventions used in Modelica.Fluid.Examples.HeatExchanger.BaseClasses.BasicHX.

Parameters

TypeNameDefaultDescription
BooleanhomotopyInitializationtrue= true, use homotopy method
Assumptions
BooleanallowFlowReversal1 (from PartialFourPort)true= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1
BooleanallowFlowReversal2 (from PartialFourPort)true= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 2
Nominal condition
Modelica.Units.SI.MassFlowRatem1_flow_nominal (from PartialFourPortInterface)Nominal mass flow rate
Modelica.Units.SI.MassFlowRatem2_flow_nominal (from PartialFourPortInterface)Nominal mass flow rate
Modelica.Units.SI.PressureDifferencedp1_nominal (from FourPortFlowResistanceParameters)Pressure difference
Modelica.Units.SI.PressureDifferencedp2_nominal (from FourPortFlowResistanceParameters)Pressure difference
Advanced
Medium1.MassFlowRatem1_flow_small (from PartialFourPortInterface)1E-4*abs(m1_flow_nominal)Small mass flow rate for regularization of zero flow
Medium2.MassFlowRatem2_flow_small (from PartialFourPortInterface)1E-4*abs(m2_flow_nominal)Small mass flow rate for regularization of zero flow
Advanced › Diagnostics
Booleanshow_T (from PartialFourPortInterface)false= true, if actual temperature at port is computed
Flow resistance › Medium 1
BooleancomputeFlowResistance1 (from FourPortFlowResistanceParameters)true=true, compute flow resistance. Set to false to assume no friction
Booleanfrom_dp1 (from FourPortFlowResistanceParameters)false= true, use m_flow = f(dp) else dp = f(m_flow)
Realn1 (from FourPortFlowResistanceParameters)2Flow exponent for side 1, n=1 for laminar, n=2 for turbulent
BooleanlinearizeFlowResistance1 (from FourPortFlowResistanceParameters)false= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM1 (from FourPortFlowResistanceParameters)0.1Fraction of nominal flow rate where flow transitions to laminar
Flow resistance › Medium 2
BooleancomputeFlowResistance2 (from FourPortFlowResistanceParameters)true=true, compute flow resistance. Set to false to assume no friction
Booleanfrom_dp2 (from FourPortFlowResistanceParameters)false= true, use m_flow = f(dp) else dp = f(m_flow)
Realn2 (from FourPortFlowResistanceParameters)2Flow exponent for side 2, n=1 for laminar, n=2 for turbulent
BooleanlinearizeFlowResistance2 (from FourPortFlowResistanceParameters)false= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM2 (from FourPortFlowResistanceParameters)0.1Fraction of nominal flow rate where flow transitions to laminar
Dynamics › Nominal condition
Modelica.Units.SI.Timetau130Time constant at nominal flow
Modelica.Units.SI.Timetau230Time constant at nominal flow
Dynamics › Conservation equations
Modelica.Fluid.Types.DynamicsenergyDynamicsModelica.Fluid.Types.Dynamics.DynamicFreeInitialType of energy balance: dynamic (3 initialization options) or steady state
Initialization › Medium 1
Medium1.AbsolutePressurep1_startMedium1.p_defaultStart value of pressure
Medium1.TemperatureT1_startMedium1.T_defaultStart value of temperature
Medium1.MassFraction[Medium1.nX]X1_startMedium1.X_defaultStart value of mass fractions m_i/m
Medium1.ExtraProperty[Medium1.nC]C1_startfill(0, Medium1.nC)Start value of trace substances
Medium1.ExtraProperty[Medium1.nC]C1_nominalfill(1E-2, Medium1.nC)Nominal value of trace substances. (Set to typical order of magnitude.)
Initialization › Medium 2
Medium2.AbsolutePressurep2_startMedium2.p_defaultStart value of pressure
Medium2.TemperatureT2_startMedium2.T_defaultStart value of temperature
Medium2.MassFraction[Medium2.nX]X2_startMedium2.X_defaultStart value of mass fractions m_i/m
Medium2.ExtraProperty[Medium2.nC]C2_startfill(0, Medium2.nC)Start value of trace substances
Medium2.ExtraProperty[Medium2.nC]C2_nominalfill(1E-2, Medium2.nC)Nominal value of trace substances. (Set to typical order of magnitude.)

Connectors

TypeNameDefaultDescription
Modelica.Fluid.Interfaces.FluidPort_aport_a1 (from PartialFourPort)Fluid connector a1 (positive design flow direction is from port_a1 to port_b1)
Modelica.Fluid.Interfaces.FluidPort_bport_b1 (from PartialFourPort)Fluid connector b1 (positive design flow direction is from port_a1 to port_b1)
Modelica.Fluid.Interfaces.FluidPort_aport_a2 (from PartialFourPort)Fluid connector a2 (positive design flow direction is from port_a2 to port_b2)
Modelica.Fluid.Interfaces.FluidPort_bport_b2 (from PartialFourPort)Fluid connector b2 (positive design flow direction is from port_a2 to port_b2)

Components

TypeNameDefaultDescription
Medium1.MassFlowRatem1_flow (from PartialFourPortInterface)port_a1.m_flowMass flow rate from port_a1 to port_b1 (m1_flow > 0 is design flow direction)
Modelica.Units.SI.PressureDifferencedp1 (from PartialFourPortInterface)port_a1.p - port_b1.pPressure difference between port_a1 and port_b1
Medium2.MassFlowRatem2_flow (from PartialFourPortInterface)port_a2.m_flowMass flow rate from port_a2 to port_b2 (m2_flow > 0 is design flow direction)
Modelica.Units.SI.PressureDifferencedp2 (from PartialFourPortInterface)port_a2.p - port_b2.pPressure difference between port_a2 and port_b2
Medium1.ThermodynamicStatesta_a1 (from PartialFourPortInterface)if allowFlowReversal1 then Medium1.setState_phX(port_a1.p, noEvent(actualStream(port_a1.h_outflow)), noEvent(actualStream(port_a1.Xi_outflow))) else Medium1.setState_phX(port_a1.p, inStream(port_a1.h_outflow), inStream(port_a1.Xi_outflow))Medium properties in port_a1
Medium1.ThermodynamicStatesta_b1 (from PartialFourPortInterface)if allowFlowReversal1 then Medium1.setState_phX(port_b1.p, noEvent(actualStream(port_b1.h_outflow)), noEvent(actualStream(port_b1.Xi_outflow))) else Medium1.setState_phX(port_b1.p, port_b1.h_outflow, port_b1.Xi_outflow)Medium properties in port_b1
Medium2.ThermodynamicStatesta_a2 (from PartialFourPortInterface)if allowFlowReversal2 then Medium2.setState_phX(port_a2.p, noEvent(actualStream(port_a2.h_outflow)), noEvent(actualStream(port_a2.Xi_outflow))) else Medium2.setState_phX(port_a2.p, inStream(port_a2.h_outflow), inStream(port_a2.Xi_outflow))Medium properties in port_a2
Medium2.ThermodynamicStatesta_b2 (from PartialFourPortInterface)if allowFlowReversal2 then Medium2.setState_phX(port_b2.p, noEvent(actualStream(port_b2.h_outflow)), noEvent(actualStream(port_b2.Xi_outflow))) else Medium2.setState_phX(port_b2.p, port_b2.h_outflow, port_b2.Xi_outflow)Medium properties in port_b2
Modelica.Units.SI.HeatFlowRateQ1_flowvol1.heatPort.Q_flowHeat flow rate into medium 1
Modelica.Units.SI.HeatFlowRateQ2_flowvol2.heatPort.Q_flowHeat flow rate into medium 2
Buildings.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatPortvol1
Buildings.Fluid.MixingVolumes.MixingVolumevol2
Buildings.Fluid.FixedResistances.PressureDroppreDro1Flow resistance of fluid 1
Buildings.Fluid.FixedResistances.PressureDroppreDro2Flow resistance of fluid 2

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.
  • March 3, 2022, by Michael Wetter:
    Removed massDynamics.
    This is for issue 1542.
  • April 14, 2020, by Michael Wetter:
    Changed homotopyInitialization to a constant.
    This is for IBPSA, #1341.
  • October 23, 2017, by Michael Wetter:
    Made volume vol1 replaceable. This is required for Buildings, issue 1013.
  • December 1, 2016, by Michael Wetter:
    Updated model as use_dh is no longer a parameter in the pressure drop model.
    This is for #480.
  • April 11, 2016 by Michael Wetter:
    Corrected wrong hyperlink in documentation for issue 450.
  • January 26, 2016, by Michael Wetter:
    Set quantity attributes.
  • November 13, 2015, by Michael Wetter:
    Changed assignments of start values in extends statement. This is for issue #299.
  • June 2, 2015, by Filip Jorissen:
    Removed final modifier from mSenFac in vol1 and vol2. This is for issue #258.
  • May 6, 2015, by Michael Wetter:
    Added missing propagation of allowFlowReversal to instances vol1 and vol2. This is for issue #412.
  • October 6, 2014, by Michael Wetter:
    Changed medium declaration in pressure drop elements to be final.
  • May 28, 2014, by Michael Wetter:
    Removed annotation(Evaluate=true) for parameters tau1 and tau2. This is needed to allow changing the time constant after translation.
  • November 12, 2013, by Michael Wetter:
    Removed import Modelica.Constants statement.
  • October 8, 2013, by Michael Wetter:
    Removed parameter show_V_flow.
  • September 26, 2013, by Michael Wetter:
    Removed unrequired sum operator.
  • February 6, 2012, by Michael Wetter:
    Updated documentation.
  • February 3, 2012, by Michael Wetter:
    Removed assignment of m_flow_small as it is no longer used in its base class.
  • July 29, 2011, by Michael Wetter:
    • Changed values of h_outflow_a1_start, h_outflow_b1_start, h_outflow_a2_start and h_outflow_b2_start, and declared them as final.
    • Set nominal values for vol1.C and vol2.C.
  • July 11, 2011, by Michael Wetter:
    Changed parameterization of fluid volume so that steady-state balance is used when tau = 0.
  • March 25, 2011, by Michael Wetter:
    Added homotopy operator.
  • April 13, 2009, by Michael Wetter:
    Added model to compute flow friction.
  • September 10, 2008 by Michael Wetter:
    Added stateSelect=StateSelect.always for temperature of volume 1.
  • Changed temperature sensor from Celsius to Kelvin. Unit conversion should be made during output processing.
  • August 5, 2008, by Michael Wetter:
    Replaced instances of Delays.DelayFirstOrder with instances of MixingVolumes.MixingVolume. This allows to extract liquid for a condensing cooling coil model.
  • March 25, 2008, by Michael Wetter:
    First implementation.