Buildings.Fluid.HeatExchangers.ThermalWheels.Sensible.BaseClasses

Package with base classes for sensible heat recovery devices

Information

This package contains base classes that are used to construct the models in Buildings.Fluid.HeatExchangers.ThermalWheels.Sensible.

Extends from Modelica.Icons.BasesPackage (Icon for packages containing base classes).

Package Content

Name Description
Buildings.Fluid.HeatExchangers.ThermalWheels.Sensible.BaseClasses.Effectiveness Effectiveness Model for calculating the heat exchange effectiveness
Buildings.Fluid.HeatExchangers.ThermalWheels.Sensible.BaseClasses.HeatExchangerWithInputEffectiveness HeatExchangerWithInputEffectiveness Heat exchanger with varying effectiveness
Buildings.Fluid.HeatExchangers.ThermalWheels.Sensible.BaseClasses.PartialWheel PartialWheel Partial model for sensible heat recovery wheel
Buildings.Fluid.HeatExchangers.ThermalWheels.Sensible.BaseClasses.Validation Validation Collection of models that validate the module in the base classes

Buildings.Fluid.HeatExchangers.ThermalWheels.Sensible.BaseClasses.Effectiveness Buildings.Fluid.HeatExchangers.ThermalWheels.Sensible.BaseClasses.Effectiveness

Model for calculating the heat exchange effectiveness

Buildings.Fluid.HeatExchangers.ThermalWheels.Sensible.BaseClasses.Effectiveness

Information

This block calculates the sensible effectiveness of the heat exchanger under heating and cooling modes at different flow rates of the supply air and the exhaust air.

It first calculates the ratio of the average operating flow rate to the nominal supply flow rate by:

  rat = max(0.5, min(1.3, (mSup_flow + mExh_flow)/(2*mSup_flow_nominal))),

where mSup_flow is the flow rate of the supply air, mExh_flow is the flow rate of the exhaust air, mSup_flow_nominal is the nominal flow rate of the supply air and rat is the flow ratio.

It then calculates the sensible heat exchanger effectiveness as

  eps = (epsPL + (eps_nominal - epsPL) * (rat - 0.75)/0.25),

where eps is the effectiveness for the sensible heat transfer, respectively, eps_nominal and epsPL are the effectiveness for the sensible heat transfer when rat is 1 and 0.75, respectively.

Note: The value of the rat is suggested to be between 0.5 and 1.3 during normal operation to ensure reasonable extrapolation. Likewise, an unbalanced air flow ratio less than 2, i.e., mSup_flow/mExh_flow > 0.5 and mSup_flow/mExh_flow < 2 is recommended.

References

U.S. Department of Energy 2016. "EnergyPlus Engineering Reference".

Extends from Modelica.Blocks.Icons.Block (Basic graphical layout of input/output block).

Parameters

TypeNameDefaultDescription
Efficiencyeps_nominal Nominal sensible heat exchanger effectiveness [1]
EfficiencyepsPL Part load (75% of the nominal supply flow rate) sensible heat exchanger effectiveness [1]
MassFlowRatemSup_flow_nominal Nominal supply air mass flow rate [kg/s]

Connectors

TypeNameDescription
input RealInputmSup_flowSupply air mass flow rate [kg/s]
input RealInputmExh_flowExhaust air mass flow rate [kg/s]
output RealOutputepsSensible heat exchanger effectiveness [1]

Modelica definition

model Effectiveness "Model for calculating the heat exchange effectiveness" extends Modelica.Blocks.Icons.Block; parameter Modelica.Units.SI.Efficiency eps_nominal(final max=1) "Nominal sensible heat exchanger effectiveness"; parameter Modelica.Units.SI.Efficiency epsPL(final max=1) "Part load (75% of the nominal supply flow rate) sensible heat exchanger effectiveness"; parameter Modelica.Units.SI.MassFlowRate mSup_flow_nominal "Nominal supply air mass flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput mSup_flow(final unit="kg/s") "Supply air mass flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput mExh_flow(final unit="kg/s") "Exhaust air mass flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput eps(final unit="1") "Sensible heat exchanger effectiveness"; protected Real rat "Ratio of the average operating air flow rate to the nominal supply air flow rate"; equation // Calculate the average volumetric air flow and flow rate ratio. rat=(mSup_flow+mExh_flow)/2/mSup_flow_nominal; // Check if the air flows are too unbalanced, unless rat < 0.05, in which case // the system is likely off or transitioning to on or off. assert(rat<0.05 or (mSup_flow-2*mExh_flow<1e-5 and mExh_flow-2*mSup_flow<1e-5), "In " + getInstanceName() + ": The ratio of the supply flow rate to the exhaust flow rate should be in the range of [0.5, 2] when flow rates are non-zero.", level=AssertionLevel.warning); // Calculate effectiveness eps=(epsPL+(eps_nominal-epsPL)*( Buildings.Utilities.Math.Functions.smoothLimit(x=rat, l=0.5, u=1.3, deltaX=0.01)-0.75)/0.25); assert(eps>=0 and eps<1, "In " + getInstanceName() + ": The sensible heat exchange effectiveness eps = " + String(eps) + ". It should be in the range of [0, 1]. Check if the part load (75% of the nominal supply flow rate) or nominal sensible heat exchanger effectiveness is too high or too low.", level=AssertionLevel.error); end Effectiveness;

Buildings.Fluid.HeatExchangers.ThermalWheels.Sensible.BaseClasses.HeatExchangerWithInputEffectiveness Buildings.Fluid.HeatExchangers.ThermalWheels.Sensible.BaseClasses.HeatExchangerWithInputEffectiveness

Heat exchanger with varying effectiveness

Buildings.Fluid.HeatExchangers.ThermalWheels.Sensible.BaseClasses.HeatExchangerWithInputEffectiveness

Information

This block is identical to Buildings.Fluid.HeatExchangers.ConstantEffectiveness, except that the sensible heat exchanger effectiveness is an input rather than a parameter.

Extends from Buildings.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
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]
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)
input RealInputepsSensible heat exchanger effectiveness [1]

Modelica definition

model HeatExchangerWithInputEffectiveness "Heat exchanger with varying effectiveness" extends Buildings.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); Buildings.Controls.OBC.CDL.Interfaces.RealInput eps( min=0, max=1, final unit="1") "Sensible heat exchanger effectiveness"; end HeatExchangerWithInputEffectiveness;

Buildings.Fluid.HeatExchangers.ThermalWheels.Sensible.BaseClasses.PartialWheel Buildings.Fluid.HeatExchangers.ThermalWheels.Sensible.BaseClasses.PartialWheel

Partial model for sensible heat recovery wheel

Buildings.Fluid.HeatExchangers.ThermalWheels.Sensible.BaseClasses.PartialWheel

Information

Partial model of a sensible heat recovery wheel.

Extends from Modelica.Blocks.Icons.Block (Basic graphical layout of input/output block).

Parameters

TypeNameDefaultDescription
replaceable package MediumModelica.Media.Interfaces.Pa...Air
Genericperper(final have_latHEX=false)Record with performance data
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
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
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

Connectors

TypeNameDescription
replaceable package MediumAir
output RealOutputPElectric power consumption [W]
output RealOutputepsSensible heat exchanger effectiveness [1]
FluidPort_aport_a1Fluid connector a1 of the supply air (positive design flow direction is from port_a1 to port_b1)
FluidPort_bport_b2Fluid connector b2 of the exhaust air (positive design flow direction is from port_a2 to port_b2)
FluidPort_bport_b1Fluid connector b1 of the supply air (positive design flow direction is from port_a1 to port_b1)
FluidPort_aport_a2Fluid connector a2 of the exhaust air (positive design flow direction is from port_a2 to port_b2)

Modelica definition

partial model PartialWheel "Partial model for sensible heat recovery wheel" extends Modelica.Blocks.Icons.Block; replaceable package Medium = Modelica.Media.Interfaces.PartialCondensingGases "Air"; parameter Buildings.Fluid.HeatExchangers.ThermalWheels.Data.Generic per( final have_latHEX=false) "Record with performance data"; parameter Boolean allowFlowReversal1 = true "= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1"; parameter Boolean allowFlowReversal2 = true "= false to simplify equations, assuming, but not enforcing, no flow reversal for medium 2"; parameter Boolean from_dp1 = false "= true, use m_flow = f(dp) else dp = f(m_flow)"; parameter Boolean linearizeFlowResistance1 = false "= true, use linear relation between m_flow and dp for any flow rate"; parameter Boolean from_dp2 = false "= true, use m_flow = f(dp) else dp = f(m_flow)"; parameter Boolean linearizeFlowResistance2 = false "= true, use linear relation between m_flow and dp for any flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput P( final unit="W") "Electric power consumption"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput eps(final unit="1") "Sensible heat exchanger effectiveness"; Modelica.Fluid.Interfaces.FluidPort_a port_a1( redeclare final package Medium = Medium) "Fluid connector a1 of the supply air (positive design flow direction is from port_a1 to port_b1)"; Modelica.Fluid.Interfaces.FluidPort_b port_b2( redeclare final package Medium = Medium) "Fluid connector b2 of the exhaust air (positive design flow direction is from port_a2 to port_b2)"; Modelica.Fluid.Interfaces.FluidPort_b port_b1( redeclare final package Medium = Medium) "Fluid connector b1 of the supply air (positive design flow direction is from port_a1 to port_b1)"; Modelica.Fluid.Interfaces.FluidPort_a port_a2( redeclare final package Medium = Medium) "Fluid connector a2 of the exhaust air (positive design flow direction is from port_a2 to port_b2)"; Buildings.Fluid.Sensors.MassFlowRate senSupMasFlo( redeclare package Medium = Medium) "Supply air mass flow rate"; Buildings.Fluid.Sensors.MassFlowRate senExhMasFlo( redeclare package Medium = Medium) "Exhaust air mass flow rate"; protected parameter Medium.ThermodynamicState sta_nominal=Medium.setState_pTX( T=Buildings.Utilities.Psychrometrics.Constants.T_ref, p=101325, X=Medium.X_default) "State of the supply air at the default properties"; Buildings.Fluid.HeatExchangers.ThermalWheels.Sensible.BaseClasses.HeatExchangerWithInputEffectiveness hex( redeclare package Medium1 = Medium, redeclare package Medium2 = Medium, final m1_flow_nominal=per.mSup_flow_nominal, final m2_flow_nominal=per.mExh_flow_nominal, final allowFlowReversal1=allowFlowReversal1, final allowFlowReversal2=allowFlowReversal2, final from_dp1=from_dp1, final from_dp2=from_dp2, final linearizeFlowResistance1=linearizeFlowResistance1, final linearizeFlowResistance2=linearizeFlowResistance2) "Heat exchanger"; Buildings.Fluid.HeatExchangers.ThermalWheels.Sensible.BaseClasses.Effectiveness effCal( final eps_nominal=per.epsSen_nominal, final epsPL=per.epsSenPL, final mSup_flow_nominal=per.mSup_flow_nominal) "Calculate the effectiveness of heat exchanger"; equation connect(senExhMasFlo.port_b, port_b2); connect(senExhMasFlo.port_a, hex.port_b2); connect(hex.port_b1, senSupMasFlo.port_a); connect(senSupMasFlo.port_b, port_b1); connect(senExhMasFlo.m_flow, effCal.mExh_flow); connect(senSupMasFlo.m_flow, effCal.mSup_flow); end PartialWheel;