Buildings.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
Buildings.Fluid.HeatExchangers.ActiveBeams.UsersGuide UsersGuide User's Guide
Buildings.Fluid.HeatExchangers.ActiveBeams.Cooling Cooling Active beam unit for cooling
Buildings.Fluid.HeatExchangers.ActiveBeams.CoolingAndHeating CoolingAndHeating Active beam unit for heating and cooling
Buildings.Fluid.HeatExchangers.ActiveBeams.Data Data Package with performance data
Buildings.Fluid.HeatExchangers.ActiveBeams.Examples Examples Package with examples of active beam models
Buildings.Fluid.HeatExchangers.ActiveBeams.Validation Validation Collection of validation models
Buildings.Fluid.HeatExchangers.ActiveBeams.BaseClasses BaseClasses Base classes for active beam models

Buildings.Fluid.HeatExchangers.ActiveBeams.Cooling Buildings.Fluid.HeatExchangers.ActiveBeams.Cooling

Active beam unit for cooling

Buildings.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 Buildings.Fluid.HeatExchangers.ActiveBeams.CoolingAndHeating.

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

Performance data are available from Buildings.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;

Buildings.Fluid.HeatExchangers.ActiveBeams.CoolingAndHeating Buildings.Fluid.HeatExchangers.ActiveBeams.CoolingAndHeating

Active beam unit for heating and cooling

Buildings.Fluid.HeatExchangers.ActiveBeams.CoolingAndHeating

Information

This model is identical to Buildings.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 Buildings.Fluid.HeatExchangers.ActiveBeams.Data.

Extends from Buildings.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 Buildings.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;