IEA EBC Annex 60 EBC logo

Annex60.Fluid.HeatExchangers.BaseClasses

Package with base classes for Annex60.Fluid.HeatExchangers

Information

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

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

Package Content

Name Description
Annex60.Fluid.HeatExchangers.BaseClasses.PartialEffectiveness PartialEffectiveness Partial model to implement heat exchangers based on effectiveness model

Annex60.Fluid.HeatExchangers.BaseClasses.PartialEffectiveness Annex60.Fluid.HeatExchangers.BaseClasses.PartialEffectiveness

Partial model to implement heat exchangers based on effectiveness model

Annex60.Fluid.HeatExchangers.BaseClasses.PartialEffectiveness

Information

Partial model to implement heat exchanger models.

Classes that extend this model need to implement heat and mass balance equations in a form like

  // transferred heat
  Q1_flow = eps * QMax_flow;
  // no heat loss to ambient
  0 = Q1_flow + Q2_flow;
  // no mass exchange
  mXi1_flow = zeros(Medium1.nXi);
  mXi2_flow = zeros(Medium2.nXi);

Thus, if medium 1 is heated in this device, then Q1_flow > 0 and QMax_flow > 0.

Extends from Fluid.Interfaces.StaticFourPortHeatMassExchanger (Partial model transporting two fluid streams between four ports without storing mass or energy).

Parameters

TypeNameDefaultDescription
replaceable package Medium1PartialMediumMedium 1 in the component
replaceable package Medium2PartialMediumMedium 2 in the component
BooleansensibleOnly1 Set to true if sensible exchange only for medium 1
BooleansensibleOnly2 Set 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]
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

partial model PartialEffectiveness "Partial model to implement heat exchangers based on effectiveness model" extends Fluid.Interfaces.StaticFourPortHeatMassExchanger(show_T=false); Medium1.Temperature T_in1 "Inlet temperature medium 1"; Medium2.Temperature T_in2 "Inlet temperature medium 2"; Modelica.SIunits.ThermalConductance C1_flow "Heat capacity flow rate medium 1"; Modelica.SIunits.ThermalConductance C2_flow "Heat capacity flow rate medium 2"; Modelica.SIunits.ThermalConductance CMin_flow(min=0) "Minimum heat capacity flow rate"; Modelica.SIunits.HeatFlowRate QMax_flow "Maximum heat flow rate into medium 1"; protected parameter Real delta=1E-3 "Parameter used for smoothing"; parameter Modelica.SIunits.SpecificHeatCapacity cp1_default(fixed=false) "Specific heat capacity of medium 1 at default medium state"; parameter Modelica.SIunits.SpecificHeatCapacity cp2_default(fixed=false) "Specific heat capacity of medium 2 at default medium state"; parameter Modelica.SIunits.ThermalConductance CMin_flow_small(fixed=false) "Small value for smoothing of minimum heat capacity flow rate"; Real fra_a1(min=0, max=1) "Fraction of incoming state taken from port a2 (used to avoid excessive calls to regStep)"; Real fra_b1(min=0, max=1) "Fraction of incoming state taken from port b2 (used to avoid excessive calls to regStep)"; Real fra_a2(min=0, max=1) "Fraction of incoming state taken from port a2 (used to avoid excessive calls to regStep)"; Real fra_b2(min=0, max=1) "Fraction of incoming state taken from port b2 (used to avoid excessive calls to regStep)"; initial equation cp1_default = Medium1.specificHeatCapacityCp(Medium1.setState_pTX( Medium1.p_default, Medium1.T_default, Medium1.X_default)); cp2_default = Medium2.specificHeatCapacityCp(Medium2.setState_pTX( Medium2.p_default, Medium2.T_default, Medium2.X_default)); CMin_flow_small = min(m1_flow_small*cp1_default, m2_flow_small*cp2_default); equation if allowFlowReversal2 then fra_a2 = Modelica.Fluid.Utilities.regStep( m2_flow, 1, 0, m2_flow_small); fra_b2 = 1-fra_a2; else fra_a2 = 1; fra_b2 = 0; end if; if allowFlowReversal1 then fra_a1 = Modelica.Fluid.Utilities.regStep( m1_flow, 1, 0, m1_flow_small); fra_b1 = 1-fra_a1; else fra_a1 = 1; fra_b1 = 0; end if; ///////////////////////////////////////////////////////// // Definitions for heat transfer effectiveness model T_in1 = if allowFlowReversal1 then fra_a1 * Medium1.temperature(state_a1_inflow) + fra_b1 * Medium1.temperature(state_b1_inflow) else Medium1.temperature(state_a1_inflow); T_in2 = if allowFlowReversal2 then fra_a2 * Medium2.temperature(state_a2_inflow) + fra_b2 * Medium2.temperature(state_b2_inflow) else Medium2.temperature(state_a2_inflow); C1_flow = 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)); C2_flow = 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)); CMin_flow = min(C1_flow, C2_flow); // QMax_flow is maximum heat transfer into medium 1 QMax_flow = CMin_flow*(T_in2 - T_in1); end PartialEffectiveness;

http://iea-annex60.org