IEA EBC Annex 60 EBC logo

Annex60.Fluid.HeatExchangers

Package with heat exchanger models

Information

This package contains models for heat exchangers with and without humidity condensation.

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

Package Content

Name Description
Annex60.Fluid.HeatExchangers.ConstantEffectiveness ConstantEffectiveness Heat exchanger with constant effectiveness
Annex60.Fluid.HeatExchangers.HeaterCooler_T HeaterCooler_T Ideal heater or cooler with a prescribed outlet temperature
Annex60.Fluid.HeatExchangers.HeaterCooler_u HeaterCooler_u Heater or cooler with prescribed heat flow rate
Annex60.Fluid.HeatExchangers.ActiveBeams ActiveBeams  
Annex60.Fluid.HeatExchangers.Radiators Radiators Package with radiators models for hydronic space heating systems
Annex60.Fluid.HeatExchangers.Examples Examples Collection of models that illustrate model use and test models
Annex60.Fluid.HeatExchangers.Validation Validation Collection of models that validate the heat exchanger models
Annex60.Fluid.HeatExchangers.BaseClasses BaseClasses Package with base classes for Annex60.Fluid.HeatExchangers

Annex60.Fluid.HeatExchangers.ConstantEffectiveness Annex60.Fluid.HeatExchangers.ConstantEffectiveness

Heat exchanger with constant effectiveness

Annex60.Fluid.HeatExchangers.ConstantEffectiveness

Information

Model for a heat exchanger with constant effectiveness.

This model transfers heat in the amount of

Q = Qmax ε,

where ε is a constant effectiveness and Qmax is the maximum heat that can be transferred.

For a heat and moisture exchanger, use Annex60.Fluid.MassExchangers.ConstantEffectiveness instead of this model.

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

Parameters

TypeNameDefaultDescription
replaceable package Medium1PartialMediumMedium 1 in the component
replaceable package Medium2PartialMediumMedium 2 in the component
HeatFlowRateQ1_floweps*QMax_flowHeat transferred into the medium 1 [W]
MassFlowRatemWat1_flow0Moisture mass flow rate added to the medium 1 [kg/s]
HeatFlowRateQ2_flow-Q1_flowHeat transferred into the medium 2 [W]
MassFlowRatemWat2_flow0Moisture mass flow rate added to the medium 2 [kg/s]
BooleansensibleOnly1trueSet to true if sensible exchange only for medium 1
BooleansensibleOnly2trueSet to true if sensible exchange only for medium 2
Efficiencyeps0.8Heat exchanger effectiveness [1]
Nominal condition
MassFlowRatem1_flow_nominal Nominal mass flow rate [kg/s]
MassFlowRatem2_flow_nominal Nominal mass flow rate [kg/s]
PressureDifferencedp1_nominal Pressure difference [Pa]
PressureDifferencedp2_nominal Pressure difference [Pa]
Assumptions
BooleanallowFlowReversal1true= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1
BooleanallowFlowReversal2true= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 2
Advanced
MassFlowRatem1_flow_small1E-4*abs(m1_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
MassFlowRatem2_flow_small1E-4*abs(m2_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
BooleanhomotopyInitializationtrue= true, use homotopy method
Diagnostics
Booleanshow_Tfalse= true, if actual temperature at port is computed
Flow resistance
Medium 1
Booleanfrom_dp1false= true, use m_flow = f(dp) else dp = f(m_flow)
BooleanlinearizeFlowResistance1false= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM10.1Fraction of nominal flow rate where flow transitions to laminar
Medium 2
Booleanfrom_dp2false= true, use m_flow = f(dp) else dp = f(m_flow)
BooleanlinearizeFlowResistance2false= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM20.1Fraction of nominal flow rate where flow transitions to laminar

Connectors

TypeNameDescription
FluidPort_aport_a1Fluid connector a1 (positive design flow direction is from port_a1 to port_b1)
FluidPort_bport_b1Fluid connector b1 (positive design flow direction is from port_a1 to port_b1)
FluidPort_aport_a2Fluid connector a2 (positive design flow direction is from port_a2 to port_b2)
FluidPort_bport_b2Fluid connector b2 (positive design flow direction is from port_a2 to port_b2)

Modelica definition

model ConstantEffectiveness "Heat exchanger with constant effectiveness" extends Annex60.Fluid.HeatExchangers.BaseClasses.PartialEffectiveness( sensibleOnly1 = true, sensibleOnly2 = true, final prescribedHeatFlowRate1=true, final prescribedHeatFlowRate2=true, Q1_flow = eps * QMax_flow, Q2_flow = -Q1_flow, mWat1_flow = 0, mWat2_flow = 0); parameter Modelica.SIunits.Efficiency eps(max=1) = 0.8 "Heat exchanger effectiveness"; end ConstantEffectiveness;

Annex60.Fluid.HeatExchangers.HeaterCooler_T Annex60.Fluid.HeatExchangers.HeaterCooler_T

Ideal heater or cooler with a prescribed outlet temperature

Annex60.Fluid.HeatExchangers.HeaterCooler_T

Information

Model for an ideal heater or cooler with a prescribed outlet temperature.

This model forces the outlet temperature at port_b to be equal to the temperature of the input signal TSet, subject to optional limits on the heating or cooling capacity Q_flow_max and Q_flow_min. For unlimited capacity, set Q_flow_maxHeat = Modelica.Constant.inf and Q_flow_maxCool=-Modelica.Constant.inf.

The output signal Q_flow is the heat added (for heating) or subtracted (for cooling) to the medium if the flow rate is from port_a to port_b. If the flow is reversed, then Q_flow=0. The outlet temperature at port_a is not affected by this model.

If the parameter energyDynamics is not equal to Modelica.Fluid.Types.Dynamics.SteadyState, the component models the dynamic response using a first order differential equation. The time constant of the component is equal to the parameter tau. This time constant is adjusted based on the mass flow rate using

τeff = τ |ṁ| ⁄ ṁnom

where τeff is the effective time constant for the given mass flow rate and τ is the time constant at the nominal mass flow rate nom. This type of dynamics is equal to the dynamics that a completely mixed control volume would have.

Optionally, this model can have a flow resistance. If no flow resistance is requested, set dp_nominal=0.

For a model that uses a control signal u ∈ [0, 1] and multiplies this with the nominal heating or cooling power, use Annex60.Fluid.HeatExchangers.HeaterCooler_u

Limitations

This model only adds or removes heat for the flow from port_a to port_b. The enthalpy of the reverse flow is not affected by this model.

This model does not affect the humidity of the air. Therefore, if used to cool air below the dew point temperature, the water mass fraction will not change.

Validation

The model has been validated against the analytical solution in the examples Annex60.Fluid.HeatExchangers.Validation.HeaterCooler_T and Annex60.Fluid.HeatExchangers.Validation.HeaterCooler_T_dynamic.

Extends from Annex60.Fluid.Interfaces.PartialTwoPortInterface (Partial model transporting fluid between two ports without storing mass or energy), Annex60.Fluid.Interfaces.TwoPortFlowResistanceParameters (Parameters for flow resistance for models with two ports), Annex60.Fluid.Interfaces.PrescribedOutletStateParameters (Parameters for models with prescribed outlet state).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
HeatFlowRateQ_flow_maxHeatModelica.Constants.infMaximum heat flow rate for heating (positive) [W]
HeatFlowRateQ_flow_maxCool-Modelica.Constants.infMaximum heat flow rate for cooling (negative) [W]
Nominal condition
MassFlowRatem_flow_nominal Nominal mass flow rate [kg/s]
PressureDifferencedp_nominal Pressure difference [Pa]
Assumptions
BooleanallowFlowReversaltrue= false to simplify equations, assuming, but not enforcing, no flow reversal
Advanced
MassFlowRatem_flow_small1E-4*abs(m_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
BooleanhomotopyInitializationtrue= true, use homotopy method
Diagnostics
Booleanshow_Tfalse= true, if actual temperature at port is computed
Flow resistance
BooleancomputeFlowResistance(abs(dp_nominal) > Modelica....=true, compute flow resistance. Set to false to assume no friction
Booleanfrom_dpfalse= true, use m_flow = f(dp) else dp = f(m_flow)
BooleanlinearizeFlowResistancefalse= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM0.1Fraction of nominal flow rate where flow transitions to laminar
Dynamics
Timetau10Time constant at nominal flow rate (used if energyDynamics <> Modelica.Fluid.Types.Dynamics.SteadyState) [s]
Initialization
TemperatureT_startMedium.T_defaultInitial or guess value of set point [K]
Equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state

Connectors

TypeNameDescription
FluidPort_aport_aFluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_bport_bFluid connector b (positive design flow direction is from port_a to port_b)
input RealInputTSetSet point temperature of the fluid that leaves port_b [K]
output RealOutputQ_flowHeat added to the fluid (if flow is from port_a to port_b) [W]

Modelica definition

model HeaterCooler_T "Ideal heater or cooler with a prescribed outlet temperature" extends Annex60.Fluid.Interfaces.PartialTwoPortInterface; extends Annex60.Fluid.Interfaces.TwoPortFlowResistanceParameters( final computeFlowResistance=(abs(dp_nominal) > Modelica.Constants.eps)); extends Annex60.Fluid.Interfaces.PrescribedOutletStateParameters( T_start=Medium.T_default); parameter Boolean homotopyInitialization = true "= true, use homotopy method"; Modelica.Blocks.Interfaces.RealInput TSet(unit="K", displayUnit="degC") "Set point temperature of the fluid that leaves port_b"; Modelica.Blocks.Interfaces.RealOutput Q_flow(unit="W") "Heat added to the fluid (if flow is from port_a to port_b)"; protected Annex60.Fluid.FixedResistances.PressureDrop preDro( redeclare final package Medium = Medium, final m_flow_nominal=m_flow_nominal, final deltaM=deltaM, final allowFlowReversal=allowFlowReversal, final show_T=false, final from_dp=from_dp, final linearized=linearizeFlowResistance, final homotopyInitialization=homotopyInitialization, final dp_nominal=dp_nominal) "Flow resistance"; Annex60.Fluid.Interfaces.PrescribedOutletState heaCoo( redeclare final package Medium = Medium, final allowFlowReversal=allowFlowReversal, final m_flow_small=m_flow_small, final show_T=false, final show_V_flow=false, final Q_flow_maxHeat=Q_flow_maxHeat, final Q_flow_maxCool=Q_flow_maxCool, final m_flow_nominal=m_flow_nominal, final tau=tau, final T_start=T_start, final energyDynamics=energyDynamics) "Heater or cooler"; equation connect(port_a, preDro.port_a); connect(preDro.port_b, heaCoo.port_a); connect(heaCoo.port_b, port_b); connect(heaCoo.TSet, TSet); connect(heaCoo.Q_flow, Q_flow); end HeaterCooler_T;

Annex60.Fluid.HeatExchangers.HeaterCooler_u Annex60.Fluid.HeatExchangers.HeaterCooler_u

Heater or cooler with prescribed heat flow rate

Annex60.Fluid.HeatExchangers.HeaterCooler_u

Information

Model for an ideal heater or cooler with prescribed heat flow rate to the medium.

This model adds heat in the amount of Q_flow = u Q_flow_nominal to the medium. The input signal u and the nominal heat flow rate Q_flow_nominal can be positive or negative.

Optionally, this model can have a flow resistance. If no flow resistance is requested, set dp_nominal=0.

For a model that uses as an input the fluid temperature leaving at port_b, use Annex60.Fluid.HeatExchangers.HeaterCooler_T

Limitations

This model does not affect the humidity of the air. Therefore, if used to cool air below the dew point temperature, the water mass fraction will not change.

Validation

The model has been validated against the analytical solution in the example Annex60.Fluid.HeatExchangers.Validation.HeaterCooler_u.

Extends from Annex60.Fluid.Interfaces.TwoPortHeatMassExchanger (Partial model transporting one fluid stream with storing mass or energy).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
HeatFlowRateQ_flow_nominal Heat flow rate at u=1, positive for heating [W]
Nominal condition
MassFlowRatem_flow_nominal Nominal mass flow rate [kg/s]
PressureDifferencedp_nominal Pressure difference [Pa]
Assumptions
BooleanallowFlowReversaltrue= false to simplify equations, assuming, but not enforcing, no flow reversal
Advanced
MassFlowRatem_flow_small1E-4*abs(m_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
BooleanhomotopyInitializationtrue= true, use homotopy method
Diagnostics
Booleanshow_Tfalse= true, if actual temperature at port is computed
Flow resistance
Booleanfrom_dpfalse= true, use m_flow = f(dp) else dp = f(m_flow)
BooleanlinearizeFlowResistancefalse= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM0.1Fraction of nominal flow rate where flow transitions to laminar
Dynamics
Nominal condition
Timetau30Time constant at nominal flow (if energyDynamics <> SteadyState) [s]
Equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
DynamicsmassDynamicsenergyDynamicsType of mass balance: dynamic (3 initialization options) or steady state
Initialization
AbsolutePressurep_startMedium.p_defaultStart value of pressure [Pa]
TemperatureT_startMedium.T_defaultStart value of temperature [K]
MassFractionX_start[Medium.nX]Medium.X_defaultStart value of mass fractions m_i/m [kg/kg]
ExtraPropertyC_start[Medium.nC]fill(0, Medium.nC)Start value of trace substances

Connectors

TypeNameDescription
FluidPort_aport_aFluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_bport_bFluid connector b (positive design flow direction is from port_a to port_b)
input RealInputuControl input
output RealOutputQ_flowHeat added to the fluid [W]

Modelica definition

model HeaterCooler_u "Heater or cooler with prescribed heat flow rate" extends Annex60.Fluid.Interfaces.TwoPortHeatMassExchanger( redeclare final Annex60.Fluid.MixingVolumes.MixingVolume vol( final prescribedHeatFlowRate=true)); parameter Modelica.SIunits.HeatFlowRate Q_flow_nominal "Heat flow rate at u=1, positive for heating"; Modelica.Blocks.Interfaces.RealInput u "Control input"; Modelica.Blocks.Interfaces.RealOutput Q_flow(unit="W") "Heat added to the fluid"; protected Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow preHea( final alpha=0) "Prescribed heat flow"; Modelica.Blocks.Math.Gain gai(k=Q_flow_nominal) "Gain"; equation connect(u, gai.u); connect(gai.y, preHea.Q_flow); connect(preHea.port, vol.heatPort); connect(gai.y, Q_flow); end HeaterCooler_u;

http://iea-annex60.org