IEA EBC Annex 60 EBC logo

Annex60.Fluid.HeatExchangers.ActiveBeams

Information

This package contains models of active beams. See the User's Guide for more information.

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

Package Content

Name Description
Annex60.Fluid.HeatExchangers.ActiveBeams.UsersGuide UsersGuide User's Guide
Annex60.Fluid.HeatExchangers.ActiveBeams.Cooling Cooling Active beam unit for cooling
Annex60.Fluid.HeatExchangers.ActiveBeams.CoolingAndHeating CoolingAndHeating Active beam unit for heating and cooling
Annex60.Fluid.HeatExchangers.ActiveBeams.Data Data Package with performance data
Annex60.Fluid.HeatExchangers.ActiveBeams.Examples Examples Package with examples of active beam models
Annex60.Fluid.HeatExchangers.ActiveBeams.Validation Validation Collection of validation models
Annex60.Fluid.HeatExchangers.ActiveBeams.BaseClasses BaseClasses Base classes for active beam models

Annex60.Fluid.HeatExchangers.ActiveBeams.Cooling Annex60.Fluid.HeatExchangers.ActiveBeams.Cooling

Active beam unit for cooling

Annex60.Fluid.HeatExchangers.ActiveBeams.Cooling

Information

Model of an active beam, based on the EnergyPlus beam model AirTerminal:SingleDuct:ConstantVolume:FourPipeBeam.

This model operates only in cooling mode. For a model that operates in both heating and cooling mode, use Annex60.Fluid.HeatExchangers.ActiveBeams.CoolingAndHeating.

For a description of the equations, see the User's Guide.

Performance data are available from Annex60.Fluid.HeatExchangers.ActiveBeams.Data.

References

Parameters

TypeNameDefaultDescription
replaceable package MediumWatModelica.Media.Interfaces.Pa...Medium 1 in the component
replaceable package MediumAirModelica.Media.Interfaces.Pa...Medium 2 in the component
IntegernBeams1Number of beams in parallel
Nominal condition
GenericperCooredeclare parameter Data.Gen...Performance data for cooling
Assumptions
BooleanallowFlowReversalWattrue= true to allow flow reversal in water circuit, false restricts to design direction (port_a -> port_b)
BooleanallowFlowReversalAirtrue= true to allow flow reversal in air circuit, false restricts to design direction (port_a -> port_b)
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
Flow resistance
Booleanfrom_dpWatfalse= true, use m_flow = f(dp) else dp = f(m_flow)
BooleanlinearizeFlowResistanceWatfalse= true, use linear relation between m_flow and dp for any flow rate
RealdeltaMWat0.1Fraction of nominal flow rate where flow transitions to laminar
Advanced
BooleanhomotopyInitializationtrue= true, use homotopy method
MassFlowRatemWat_flow_small1E-4*abs(perCoo.mWat_flow_no...Small mass flow rate for regularization of zero flow [kg/s]
MassFlowRatemAir_flow_small1E-4*abs(perCoo.mAir_flow_no...Small mass flow rate for regularization of zero flow [kg/s]
Diagnostics
Booleanshow_Tfalse= true, if actual temperature at port is computed
Initialization
Cooling
AbsolutePressurepWatCoo_startMediumWat.p_defaultStart value of pressure [Pa]
TemperatureTWatCoo_startMediumWat.T_defaultStart value of temperature [K]

Connectors

TypeNameDescription
replaceable package MediumWatMedium 1 in the component
replaceable package MediumAirMedium 2 in the component
FluidPort_awatCoo_aFluid connector watCoo_a (positive design flow direction is from watCoo_a to watCoo_b)
FluidPort_bwatCoo_bFluid connector watCoo_b (positive design flow direction is from watCoo_a to watCoo_b)
FluidPort_aair_aFluid connector air_a (positive design flow direction is from air_a to air_b)
FluidPort_bair_bFluid connector air_b (positive design flow direction is from air_a to air_b)
HeatPort_aheaPorHeat port, to be connected to room air

Modelica definition

model Cooling "Active beam unit for cooling" replaceable package MediumWat = Modelica.Media.Interfaces.PartialMedium "Medium 1 in the component"; replaceable package MediumAir = Modelica.Media.Interfaces.PartialMedium "Medium 2 in the component"; replaceable parameter Data.Generic perCoo "Performance data for cooling"; parameter Integer nBeams(min=1)=1 "Number of beams in parallel"; parameter Boolean allowFlowReversalWat=true "= true to allow flow reversal in water circuit, false restricts to design direction (port_a -> port_b)"; parameter Boolean allowFlowReversalAir=true "= true to allow flow reversal in air circuit, false restricts to design direction (port_a -> port_b)"; parameter Modelica.SIunits.Time tau = 30 "Time constant at nominal flow (if energyDynamics <> SteadyState)"; // Flow resistance parameter Boolean from_dpWat = false "= true, use m_flow = f(dp) else dp = f(m_flow)"; parameter Boolean linearizeFlowResistanceWat = false "= true, use linear relation between m_flow and dp for any flow rate"; parameter Real deltaMWat = 0.1 "Fraction of nominal flow rate where flow transitions to laminar"; // Advanced parameter Boolean homotopyInitialization = true "= true, use homotopy method"; // Dynamics parameter Modelica.Fluid.Types.Dynamics energyDynamics=Modelica.Fluid.Types.Dynamics.DynamicFreeInitial "Type of energy balance: dynamic (3 initialization options) or steady state"; parameter Modelica.Fluid.Types.Dynamics massDynamics=energyDynamics "Type of mass balance: dynamic (3 initialization options) or steady state"; // Initialization parameter MediumWat.AbsolutePressure pWatCoo_start = MediumWat.p_default "Start value of pressure"; parameter MediumWat.Temperature TWatCoo_start = MediumWat.T_default "Start value of temperature"; parameter MediumWat.MassFlowRate mWat_flow_small(min=0) = 1E-4*abs(perCoo.mWat_flow_nominal) "Small mass flow rate for regularization of zero flow"; parameter MediumAir.MassFlowRate mAir_flow_small(min=0) = 1E-4*abs(perCoo.mAir_flow_nominal) "Small mass flow rate for regularization of zero flow"; // Diagnostics parameter Boolean show_T = false "= true, if actual temperature at port is computed"; // Ports Modelica.Fluid.Interfaces.FluidPort_a watCoo_a( redeclare final package Medium = MediumWat, m_flow(min=if allowFlowReversalWat then -Modelica.Constants.inf else 0), h_outflow(start=MediumWat.h_default)) "Fluid connector watCoo_a (positive design flow direction is from watCoo_a to watCoo_b)"; Modelica.Fluid.Interfaces.FluidPort_b watCoo_b( redeclare final package Medium = MediumWat, m_flow(max=if allowFlowReversalWat then +Modelica.Constants.inf else 0), h_outflow(start=MediumWat.h_default)) "Fluid connector watCoo_b (positive design flow direction is from watCoo_a to watCoo_b)"; Modelica.Fluid.Interfaces.FluidPort_a air_a( redeclare final package Medium = MediumAir, m_flow(min=if allowFlowReversalAir then -Modelica.Constants.inf else 0), h_outflow(start=MediumAir.h_default)) "Fluid connector air_a (positive design flow direction is from air_a to air_b)"; Modelica.Fluid.Interfaces.FluidPort_b air_b( redeclare final package Medium = MediumAir, m_flow(max=if allowFlowReversalAir then +Modelica.Constants.inf else 0), h_outflow(start=MediumAir.h_default)) "Fluid connector air_b (positive design flow direction is from air_a to air_b)"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heaPor "Heat port, to be connected to room air"; MediumWat.ThermodynamicState staWatCoo_a= MediumWat.setState_phX(watCoo_a.p, noEvent(actualStream(watCoo_a.h_outflow)), noEvent(actualStream(watCoo_a.Xi_outflow))) if show_T "Medium properties in port watCoo_a"; MediumWat.ThermodynamicState staWatCoo_b= MediumWat.setState_phX(watCoo_b.p, noEvent(actualStream(watCoo_b.h_outflow)), noEvent(actualStream(watCoo_b.Xi_outflow))) if show_T "Medium properties in port watCoo_b"; MediumAir.ThermodynamicState staAir_a= MediumAir.setState_phX(air_a.p, noEvent(actualStream(air_a.h_outflow)), noEvent(actualStream(air_a.Xi_outflow))) if show_T "Medium properties in port air_a"; MediumAir.ThermodynamicState staAir_b= MediumAir.setState_phX(air_b.p, noEvent(actualStream(air_b.h_outflow)), noEvent(actualStream(air_b.Xi_outflow))) if show_T "Medium properties in port air_b"; Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow heaToRoo( final alpha=0) "Heat tranferred to the room (in addition to heat from supply air)"; // Pressure drop Modelica.SIunits.PressureDifference dpWatCoo(displayUnit="Pa") = watCoo_a.p - watCoo_b.p "Pressure difference watCoo_a minus watCoo_b"; Modelica.SIunits.PressureDifference dpAir(displayUnit="Pa") = air_a.p - air_b.p "Pressure difference air_a minus air_b"; FixedResistances.PressureDrop res( redeclare final package Medium = MediumAir, final m_flow_nominal=perCoo.mAir_flow_nominal*nBeams, final dp_nominal=perCoo.dpAir_nominal); protected BaseClasses.Convector conCoo( redeclare final package Medium = MediumWat, final per=perCoo, final allowFlowReversal=allowFlowReversalWat, final m_flow_small=mWat_flow_small, final show_T=false, final homotopyInitialization=homotopyInitialization, final from_dp=from_dpWat, final linearizeFlowResistance=linearizeFlowResistanceWat, final deltaM=deltaMWat, final tau=tau, final energyDynamics=energyDynamics, final massDynamics=massDynamics, final p_start=pWatCoo_start, final T_start=TWatCoo_start, final nBeams=nBeams) "Cooling beam"; Modelica.Blocks.Math.Sum sum "Connector for heating and cooling mode"; Modelica.Blocks.Math.Gain gaiSig( final k=-1, u(final unit="W"), y(final unit="W")) "Gain to reverse the sign"; Sensors.MassFlowRate senFloAir( redeclare final package Medium = MediumAir) "Mass flow rate sensor"; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor senTemRooAir "Temperature sensor for room air"; initial equation assert(perCoo.primaryAir.r_V[1]<=0.000001 and perCoo.primaryAir.f[1]<=0.00001, "Performance curve perCoo.primaryAir must pass through (0,0)."); assert(perCoo.water.r_V[1]<=0.000001 and perCoo.water.f[1]<=0.00001, "Performance curve perCoo.water must pass through (0,0)."); assert(perCoo.dT.r_dT[1]<=0.000001 and perCoo.dT.f[1]<=0.00001, "Performance curve perCoo.dT must pass through (0,0)."); equation connect(heaToRoo.port, heaPor); connect(sum.y, gaiSig.u); connect(gaiSig.y, heaToRoo.Q_flow); connect(senTemRooAir.port, heaPor); connect(air_b, senFloAir.port_b); connect(conCoo.port_b, watCoo_b); connect(conCoo.Q_flow, sum.u[1]); connect(senTemRooAir.T, conCoo.TRoo); connect(air_a, res.port_a); connect(senFloAir.port_a, res.port_b); connect(watCoo_a, conCoo.port_a); connect(senFloAir.m_flow, conCoo.mAir_flow); end Cooling;

Annex60.Fluid.HeatExchangers.ActiveBeams.CoolingAndHeating Annex60.Fluid.HeatExchangers.ActiveBeams.CoolingAndHeating

Active beam unit for heating and cooling

Annex60.Fluid.HeatExchangers.ActiveBeams.CoolingAndHeating

Information

This model is identical to Annex60.Fluid.HeatExchangers.ActiveBeams.Cooling, except that an additional water stream and convector is added to allow for heating in addition to cooling.

For a description of the equations, see the User's Guide.

Performance data are available from Annex60.Fluid.HeatExchangers.ActiveBeams.Data.

Extends from Annex60.Fluid.HeatExchangers.ActiveBeams.Cooling (Active beam unit for cooling).

Parameters

TypeNameDefaultDescription
replaceable package MediumWatPartialMediumMedium 1 in the component
replaceable package MediumAirPartialMediumMedium 2 in the component
IntegernBeams1Number of beams in parallel
Nominal condition
GenericperCooredeclare parameter Data.Gen...Performance data for cooling
GenericperHearedeclare parameter Data.Gen...Performance data for heating
Assumptions
BooleanallowFlowReversalWattrue= true to allow flow reversal in water circuit, false restricts to design direction (port_a -> port_b)
BooleanallowFlowReversalAirtrue= true to allow flow reversal in air circuit, false restricts to design direction (port_a -> port_b)
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
Flow resistance
Booleanfrom_dpWatfalse= true, use m_flow = f(dp) else dp = f(m_flow)
BooleanlinearizeFlowResistanceWatfalse= true, use linear relation between m_flow and dp for any flow rate
RealdeltaMWat0.1Fraction of nominal flow rate where flow transitions to laminar
Advanced
BooleanhomotopyInitializationtrue= true, use homotopy method
MassFlowRatemWat_flow_small1E-4*abs(perCoo.mWat_flow_no...Small mass flow rate for regularization of zero flow [kg/s]
MassFlowRatemAir_flow_small1E-4*abs(perCoo.mAir_flow_no...Small mass flow rate for regularization of zero flow [kg/s]
Diagnostics
Booleanshow_Tfalse= true, if actual temperature at port is computed
Initialization
Cooling
AbsolutePressurepWatCoo_startMediumWat.p_defaultStart value of pressure [Pa]
TemperatureTWatCoo_startMediumWat.T_defaultStart value of temperature [K]
Heating
AbsolutePressurepWatHea_startpWatCoo_startStart value of pressure [Pa]
TemperatureTWatHea_startTWatCoo_startStart value of temperature [K]

Connectors

TypeNameDescription
FluidPort_awatCoo_aFluid connector watCoo_a (positive design flow direction is from watCoo_a to watCoo_b)
FluidPort_bwatCoo_bFluid connector watCoo_b (positive design flow direction is from watCoo_a to watCoo_b)
FluidPort_aair_aFluid connector air_a (positive design flow direction is from air_a to air_b)
FluidPort_bair_bFluid connector air_b (positive design flow direction is from air_a to air_b)
HeatPort_aheaPorHeat port, to be connected to room air
FluidPort_awatHea_aFluid connector a (positive design flow direction is from watHea_a to watHea_b)
FluidPort_bwatHea_bFluid connector b (positive design flow direction is from watHea_a to watHea_b)

Modelica definition

model CoolingAndHeating "Active beam unit for heating and cooling" extends Annex60.Fluid.HeatExchangers.ActiveBeams.Cooling(sum(nin=2)); replaceable parameter Data.Generic perHea "Performance data for heating"; // Initialization parameter MediumWat.AbsolutePressure pWatHea_start = pWatCoo_start "Start value of pressure"; parameter MediumWat.Temperature TWatHea_start = TWatCoo_start "Start value of temperature"; Modelica.Fluid.Interfaces.FluidPort_a watHea_a( redeclare final package Medium = MediumWat, m_flow(min=if allowFlowReversalWat then -Modelica.Constants.inf else 0), h_outflow(start=MediumWat.h_default)) "Fluid connector a (positive design flow direction is from watHea_a to watHea_b)"; Modelica.Fluid.Interfaces.FluidPort_b watHea_b( redeclare final package Medium = MediumWat, m_flow(max=if allowFlowReversalWat then +Modelica.Constants.inf else 0), h_outflow(start=MediumWat.h_default)) "Fluid connector b (positive design flow direction is from watHea_a to watHea_b)"; MediumWat.ThermodynamicState staHea_a= MediumWat.setState_phX(watHea_a.p, noEvent(actualStream(watHea_a.h_outflow)), noEvent(actualStream(watHea_a.Xi_outflow))) if show_T "Medium properties in port watHea_a"; MediumWat.ThermodynamicState staHea_b= MediumWat.setState_phX(watHea_b.p, noEvent(actualStream(watHea_b.h_outflow)), noEvent(actualStream(watHea_b.Xi_outflow))) if show_T "Medium properties in port watHea_b"; Modelica.SIunits.PressureDifference dpWatHea(displayUnit="Pa") = watHea_a.p - watHea_b.p "Pressure difference between watHea_a and watHea_b"; protected BaseClasses.Convector conHea( redeclare final package Medium = MediumWat, final per=perHea, final allowFlowReversal=allowFlowReversalWat, final m_flow_small=mWat_flow_small, final show_T=false, final homotopyInitialization=homotopyInitialization, final from_dp=from_dpWat, final linearizeFlowResistance=linearizeFlowResistanceWat, final deltaM=deltaMWat, final tau=tau, final energyDynamics=energyDynamics, final massDynamics=massDynamics, final p_start=pWatHea_start, final T_start=TWatHea_start, final nBeams=nBeams) "Heating beam"; initial equation assert(perHea.primaryAir.r_V[1]<=0.000001 and perHea.primaryAir.f[1]<=0.00001, "Performance curve perHea.primaryAir must pass through (0,0)."); assert(perHea.water.r_V[1]<=0.000001 and perHea.water.f[1]<=0.00001, "Performance curve perHea.water must pass through (0,0)."); assert(perHea.dT.r_dT[1]<=0.000001 and perHea.dT.f[1]<=0.00001, "Performance curve perHea.dT must pass through (0,0)."); equation connect(conHea.port_b, watHea_b); connect(conHea.Q_flow, sum.u[2]); connect(conHea.TRoo, senTemRooAir.T); connect(watHea_a, conHea.port_a); connect(conHea.mAir_flow, senFloAir.m_flow); end CoolingAndHeating;

http://iea-annex60.org