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] | 
| Conservation equations | 
| Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy 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.Units.SI.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 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.Units.SI.PressureDifference dpWatCoo(displayUnit="Pa") = watCoo_a.p
     - watCoo_b.p ;
  
Modelica.Units.SI.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 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] | 
| Conservation equations | 
| Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy 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.Units.SI.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 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;