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
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
-
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 |
Advanced |
Boolean | homotopyInitialization | true | = true, use homotopy method |
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 |
Initialization |
Cooling |
AbsolutePressure | pWatCoo_start | MediumWat.p_default | Start value of pressure [Pa] |
Temperature | TWatCoo_start | MediumWat.T_default | Start value of temperature [K] |
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
;
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 Boolean homotopyInitialization = true ;
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).");
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
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
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 |
Advanced |
Boolean | homotopyInitialization | true | = true, use homotopy method |
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 |
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] |
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 Annex60.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;
http://iea-annex60.org