Package with active beams
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 |
UsersGuide
|
User's Guide |
Cooling
|
Active beam unit for cooling |
CoolingAndHeating
|
Active beam unit for heating and cooling |
Data
|
Package with performance data |
Examples
|
Package with examples of active beam models |
Validation
|
Collection of validation models |
BaseClasses
|
Base classes for active beam models |
Active beam unit for 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
-
DOE(2015) EnergyPlus documentation v8.4.0 - Engineering Reference.
Parameters
Type | Name | Default | Description |
replaceable package MediumWat | Modelica.Media.Interfaces.Pa... | Medium 1 in the component |
replaceable package MediumAir | Modelica.Media.Interfaces.Pa... | Medium 2 in the component |
Integer | nBeams | 1 | Number of beams in parallel |
Nominal condition |
Generic | perCoo | redeclare parameter Data.Gen... | Performance data for cooling |
Assumptions |
Boolean | allowFlowReversalWat | true | = true to allow flow reversal in water circuit, false restricts to design direction (port_a -> port_b) |
Boolean | allowFlowReversalAir | true | = true to allow flow reversal in air circuit, false restricts to design direction (port_a -> port_b) |
Dynamics |
Nominal condition |
Time | tau | 30 | Time constant at nominal flow (if energyDynamics <> SteadyState) [s] |
Equations |
Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy balance: dynamic (3 initialization options) or steady state |
Dynamics | massDynamics | energyDynamics | Type of mass balance: dynamic (3 initialization options) or steady state |
Flow resistance |
Boolean | from_dpWat | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
Boolean | linearizeFlowResistanceWat | false | = true, use linear relation between m_flow and dp for any flow rate |
Real | deltaMWat | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
Initialization |
Cooling |
AbsolutePressure | pWatCoo_start | MediumWat.p_default | Start value of pressure [Pa] |
Temperature | TWatCoo_start | MediumWat.T_default | Start value of temperature [K] |
Advanced |
MassFlowRate | mWat_flow_small | 1E-4*abs(perCoo.mWat_flow_no... | Small mass flow rate for regularization of zero flow [kg/s] |
MassFlowRate | mAir_flow_small | 1E-4*abs(perCoo.mAir_flow_no... | Small mass flow rate for regularization of zero flow [kg/s] |
Diagnostics |
Boolean | show_T | false | = true, if actual temperature at port is computed |
Connectors
Type | Name | Description |
replaceable package MediumWat | Medium 1 in the component |
replaceable package MediumAir | Medium 2 in the component |
FluidPort_a | watCoo_a | Fluid connector watCoo_a (positive design flow direction is from watCoo_a to watCoo_b) |
FluidPort_b | watCoo_b | Fluid connector watCoo_b (positive design flow direction is from watCoo_a to watCoo_b) |
FluidPort_a | air_a | Fluid connector air_a (positive design flow direction is from air_a to air_b) |
FluidPort_b | air_b | Fluid connector air_b (positive design flow direction is from air_a to air_b) |
HeatPort_a | heaPor | Heat port, to be connected to room air |
Modelica definition
model Cooling
replaceable package MediumWat =
Modelica.Media.Interfaces.PartialMedium ;
replaceable package MediumAir =
Modelica.Media.Interfaces.PartialMedium ;
constant Boolean homotopyInitialization = true ;
replaceable parameter Data.Generic perCoo ;
parameter Integer nBeams(min=1)=1 ;
parameter Boolean allowFlowReversalWat=true
;
parameter Boolean allowFlowReversalAir=true
;
parameter Modelica.SIunits.Time tau = 30
;
parameter Boolean from_dpWat = false
;
parameter Boolean linearizeFlowResistanceWat = false
;
parameter Real deltaMWat = 0.1
;
parameter Modelica.Fluid.Types.Dynamics energyDynamics=Modelica.Fluid.Types.Dynamics.DynamicFreeInitial
;
parameter Modelica.Fluid.Types.Dynamics massDynamics=energyDynamics
;
parameter MediumWat.AbsolutePressure pWatCoo_start = MediumWat.p_default
;
parameter MediumWat.Temperature TWatCoo_start = MediumWat.T_default
;
parameter MediumWat.MassFlowRate mWat_flow_small(min=0) = 1E-4*
abs(perCoo.mWat_flow_nominal)
;
parameter MediumAir.MassFlowRate mAir_flow_small(min=0) = 1E-4*
abs(perCoo.mAir_flow_nominal)
;
parameter Boolean show_T = false
;
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))
;
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))
;
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))
;
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))
;
Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heaPor
;
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 ;
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 ;
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 ;
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 ;
Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow heaToRoo(
final alpha=0)
;
Modelica.SIunits.PressureDifference dpWatCoo(displayUnit="Pa") = watCoo_a.p - watCoo_b.p
;
Modelica.SIunits.PressureDifference dpAir(displayUnit="Pa") = air_a.p - air_b.p
;
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) ;
Modelica.Blocks.Math.Sum sum ;
Modelica.Blocks.Math.Gain gaiSig(
final k=-1,
u(
final unit="W"),
y(
final unit="W")) ;
Sensors.MassFlowRate senFloAir(
redeclare final package Medium =
MediumAir) ;
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor senTemRooAir
;
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).");
assert(homotopyInitialization, "In " +
getInstanceName() +
": The constant homotopyInitialization has been modified from its default value. This constant will be removed in future releases.",
level = AssertionLevel.warning);
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;
Active beam unit for heating and cooling
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
Type | Name | Default | Description |
replaceable package MediumWat | PartialMedium | Medium 1 in the component |
replaceable package MediumAir | PartialMedium | Medium 2 in the component |
Integer | nBeams | 1 | Number of beams in parallel |
Nominal condition |
Generic | perCoo | redeclare parameter Data.Gen... | Performance data for cooling |
Generic | perHea | redeclare parameter Data.Gen... | Performance data for heating |
Assumptions |
Boolean | allowFlowReversalWat | true | = true to allow flow reversal in water circuit, false restricts to design direction (port_a -> port_b) |
Boolean | allowFlowReversalAir | true | = true to allow flow reversal in air circuit, false restricts to design direction (port_a -> port_b) |
Dynamics |
Nominal condition |
Time | tau | 30 | Time constant at nominal flow (if energyDynamics <> SteadyState) [s] |
Equations |
Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy balance: dynamic (3 initialization options) or steady state |
Dynamics | massDynamics | energyDynamics | Type of mass balance: dynamic (3 initialization options) or steady state |
Flow resistance |
Boolean | from_dpWat | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
Boolean | linearizeFlowResistanceWat | false | = true, use linear relation between m_flow and dp for any flow rate |
Real | deltaMWat | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
Initialization |
Cooling |
AbsolutePressure | pWatCoo_start | MediumWat.p_default | Start value of pressure [Pa] |
Temperature | TWatCoo_start | MediumWat.T_default | Start value of temperature [K] |
Heating |
AbsolutePressure | pWatHea_start | pWatCoo_start | Start value of pressure [Pa] |
Temperature | TWatHea_start | TWatCoo_start | Start value of temperature [K] |
Advanced |
MassFlowRate | mWat_flow_small | 1E-4*abs(perCoo.mWat_flow_no... | Small mass flow rate for regularization of zero flow [kg/s] |
MassFlowRate | mAir_flow_small | 1E-4*abs(perCoo.mAir_flow_no... | Small mass flow rate for regularization of zero flow [kg/s] |
Diagnostics |
Boolean | show_T | false | = true, if actual temperature at port is computed |
Connectors
Type | Name | Description |
FluidPort_a | watCoo_a | Fluid connector watCoo_a (positive design flow direction is from watCoo_a to watCoo_b) |
FluidPort_b | watCoo_b | Fluid connector watCoo_b (positive design flow direction is from watCoo_a to watCoo_b) |
FluidPort_a | air_a | Fluid connector air_a (positive design flow direction is from air_a to air_b) |
FluidPort_b | air_b | Fluid connector air_b (positive design flow direction is from air_a to air_b) |
HeatPort_a | heaPor | Heat port, to be connected to room air |
FluidPort_a | watHea_a | Fluid connector a (positive design flow direction is from watHea_a to watHea_b) |
FluidPort_b | watHea_b | Fluid connector b (positive design flow direction is from watHea_a to watHea_b) |
Modelica definition
model CoolingAndHeating
extends Buildings.Fluid.HeatExchangers.ActiveBeams.Cooling(sum(nin=2));
replaceable parameter Data.Generic perHea ;
parameter MediumWat.AbsolutePressure pWatHea_start = pWatCoo_start
;
parameter MediumWat.Temperature TWatHea_start = TWatCoo_start
;
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))
;
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))
;
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 ;
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 ;
Modelica.SIunits.PressureDifference dpWatHea(displayUnit="Pa") = watHea_a.p - watHea_b.p
;
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) ;
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;