modelPartialEffectivenessNTU

Partial model for heat exchanger with effectiveness - NTU relation and no moisture condensation

Extends from Buildings.Fluid.HeatExchangers.BaseClasses.PartialEffectiveness (Partial model to implement heat exchangers based on effectiveness model).

Information

Partial model of a heat exchanger without humidity condensation. This model transfers heat in the amount of

Q = Qmax ε
ε = f(NTU, Z, flowRegime),

where Qmax is the maximum heat that can be transferred, ε is the heat transfer effectiveness, NTU is the Number of Transfer Units, Z is the ratio of minimum to maximum capacity flow rate and flowRegime is the heat exchanger flow regime. such as parallel flow, cross flow or counter flow.

The flow regimes depend on the heat exchanger configuration. All configurations defined in Buildings.Fluid.Types.HeatExchangerConfiguration are supported.

By default, the flow regime, such as counter flow or parallel flow, is kept constant based on the parameter value configuration. If a flow reverses direction, it is not changed, e.g., a heat exchanger does not change from counter flow to parallel flow if one flow changes direction. To dynamically change the flow regime, set the constant use_dynamicFlowRegime to true. However, use_dynamicFlowRegime=true can cause slower simulation due to events.

Models that extend from this partial model need to provide an assignment for UA.

Parameters

TypeNameDefaultDescription
BooleanprescribedHeatFlowRate1 (from StaticFourPortHeatMassExchanger)falseSet to true if the heat flow rate into fluid 1 is not a function of the component temperature
BooleanprescribedHeatFlowRate2 (from StaticFourPortHeatMassExchanger)falseSet to true if the heat flow rate into fluid 2 is not a function of the component temperature
BooleanhomotopyInitialization (from StaticFourPortHeatMassExchanger)true= true, use homotopy method
BooleansensibleOnly1 (from StaticFourPortHeatMassExchanger)Set to true if sensible exchange only for medium 1
BooleansensibleOnly2 (from StaticFourPortHeatMassExchanger)Set to true if sensible exchange only for medium 2
Buildings.Fluid.Types.HeatExchangerConfigurationconfigurationHeat exchanger configuration
Booleanuse_dynamicFlowRegimefalseIf true, flow regime is determined using actual flow rates
Modelica.Units.SI.ThermalConductanceUA_nominalNominal UA value
RealNTU_nominalNominal number of transfer units
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
Nominal thermal performance
Booleanuse_Q_flow_nominaltrueSet to true to specify Q_flow_nominal and temperatures, or to false to specify effectiveness
Modelica.Units.SI.HeatFlowRateQ_flow_nominalNominal heat flow rate (positive for heat transfer from 1 to 2)
Modelica.Units.SI.TemperatureT_a1_nominalNominal temperature at port a1
Modelica.Units.SI.TemperatureT_a2_nominalNominal temperature at port a2
Realeps_nominalNominal heat transfer effectiveness

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_flow (from StaticFourPortHeatMassExchanger)Heat transferred into the medium 1
Medium1.MassFlowRatemWat1_flow (from StaticFourPortHeatMassExchanger)Moisture mass flow rate added to the medium 1
Modelica.Units.SI.HeatFlowRateQ2_flow (from StaticFourPortHeatMassExchanger)Heat transferred into the medium 2
Medium2.MassFlowRatemWat2_flow (from StaticFourPortHeatMassExchanger)Moisture mass flow rate added to the medium 2
Medium1.TemperatureT_in1 (from PartialEffectiveness)if allowFlowReversal1 then fra_a1*Medium1.temperature(state_a1_inflow) + fra_b1*Medium1.temperature(state_b1_inflow) else Medium1.temperature(state_a1_inflow)Inlet temperature medium 1
Medium2.TemperatureT_in2 (from PartialEffectiveness)if allowFlowReversal2 then fra_a2*Medium2.temperature(state_a2_inflow) + fra_b2*Medium2.temperature(state_b2_inflow) else Medium2.temperature(state_a2_inflow)Inlet temperature medium 2
Modelica.Units.SI.ThermalConductanceC1_flow (from PartialEffectiveness)abs(m1_flow)*(if allowFlowReversal1 then fra_a1*Medium1.specificHeatCapacityCp(state_a1_inflow) + fra_b1*Medium1.specificHeatCapacityCp(state_b1_inflow) else Medium1.specificHeatCapacityCp(state_a1_inflow))Heat capacity flow rate medium 1
Modelica.Units.SI.ThermalConductanceC2_flow (from PartialEffectiveness)abs(m2_flow)*(if allowFlowReversal2 then fra_a2*Medium2.specificHeatCapacityCp(state_a2_inflow) + fra_b2*Medium2.specificHeatCapacityCp(state_b2_inflow) else Medium2.specificHeatCapacityCp(state_a2_inflow))Heat capacity flow rate medium 2
Modelica.Units.SI.ThermalConductanceCMin_flow (from PartialEffectiveness)min(C1_flow, C2_flow)Minimum heat capacity flow rate
Modelica.Units.SI.HeatFlowRateQMax_flow (from PartialEffectiveness)CMin_flow*(T_in2 - T_in1)Maximum heat flow rate into medium 1
Modelica.Units.SI.ThermalConductanceUAUA value
RealepsHeat exchanger effectiveness

Revisions

  • February 7, 2025, by Jelger Jansen:
    Removed import statement. This is for IBPSA, #1961.
  • February 3, 2023, by Jianjun Hu:
    Added noEvent() in the assertion function to avoid Optimica to not converge.
    This is for issue 1690.
  • January 24, 2023, by Hongxiang Fu:
    Set flowRegime to be equal to flowRegime_nominal by default. Added an assertion warning to inform the user about how to change this behaviour if the flow direction does need to change.
    This is for issue 1682.
  • November 11, 2023, by Michael Wetter:
    Corrected wrong temperature in assignment of sta2_default.
    This is for Buildings, issue 3151.
  • February 25, 2021 by Baptiste Ravache:
    Added a warning for when Q_flow_nominal is specified with the wrong sign.
  • January 10, 2018 by Michael Wetter:
    Removed variable Z that is not used. This is for issue 1328.
  • January 10, 2018 by Filip Jorissen:
    Corrected an error where the value of NTU was assigned to Z. This is for issue 1328.
  • February 27, 2016 by Michael Wetter:
    Introduced sta1_default and sta2_default to enable translation under OpenModelica. Removed max=1 attribute for Z. This is needed as near zero flow, Z can be larger than one due to the regularization. As Z is not used in this model other than for reporting, this bound need not be enforced (and the calculation of eps is fine at these small flow rates). This is for issue 490.
  • April 29, 2014 by Michael Wetter:
    Changed assert statement to avoid comparing enumeration with an integer, which triggers a warning in Dymola 2015.
  • July 30, 2013 by Michael Wetter:
    Updated model to use new variable mWat_flow in the base class.
  • February 12, 2010, by Michael Wetter:
    First implementation.