Note:This package is in Beta version as it has not yet been validated.
This package contains models for the heat transfer in rooms and through the building envelope. Multiple instances of these models can be connected to create a multizone building model. To compute the air exchange between rooms and between a room and the exterior, the room models can be connected to multizone air exchange models from the package Buildings.Airflow. The room models can also be linked to models of HVAC systems that are composed of the components in the package Buildings.Fluid.
Extends from Modelica.Icons.UnderConstruction.
Name  Description 

MixedAir  Model of a room in which the air is completely mixed 
Constructions  Package with models for constructions that are used in the room model 
Examples  Collection of models that illustrate model use and test models 
BaseClasses  Package with base classes for Buildings.RoomsBeta 
The package Buildings.RoomsBeta contains models for heat transfer through the building envelope.
The model Buildings.RoomsBeta.MixedAir is a model of a room with completely mixed air. The room can have any number of constructions and surfaces that participate in the heat exchange through convection, conduction, infrared radiation and solar radiation.
The room models the following physical processes:
The next paragraphs describe how to instantiate a room model. To instantiate a room model,
Buildings.HeatTransfer.Data.OpaqueConstructions.Insulation100Concrete200
matLayExt "Construction material for exterior walls"
annotation (Placement(transformation(extent={{60,140},{40,160}})));
Buildings.HeatTransfer.Data.OpaqueConstructions.Brick120 matLayPar
"Construction material for partition walls"
annotation (Placement(transformation(extent={{20,140},{0,160}})));
Buildings.HeatTransfer.Data.OpaqueConstructions.Generic matLayRoo(
material={
HeatTransfer.Data.Solids.InsulationBoard(x=0.2),
HeatTransfer.Data.Solids.Concrete(x=0.2)},
final nLay=2) "Construction material for roof"
annotation (Placement(transformation(extent={{20,140},{40,160}})));
Buildings.HeatTransfer.Data.OpaqueConstructions.Generic matLayFlo(
material={
HeatTransfer.Data.Solids.Concrete(x=0.2),
HeatTransfer.Data.Solids.InsulationBoard(x=0.1),
HeatTransfer.Data.Solids.Concrete(x=0.05)},
final nLay=3) "Construction material for floor"
annotation (Placement(transformation(extent={{60,140},{80,160}})));
Buildings.HeatTransfer.Data.GlazingSystems.DoubleClearAir13Clear glaSys(
UFra=2,
shade=Buildings.HeatTransfer.Data.Shades.Gray(),
haveExteriorShade=false,
haveInteriorShade=true) "Data record for the glazing system"
annotation (Placement(transformation(extent={{100,140},{120,160}})));
Note that construction layers are assembled from the outside to the roomside. Thus, the construction
matLayRoo
has an exterior insulation. This constructions can then be used in the room model.
Before we explain how to declare and parametrize a room model, we explain the different models that can be used to compute heat transfer through the room enclosing surfaces and constructions. The room model Buildings.RoomsBeta.MixedAir contains the constructions shown in the table below. The first row of the table lists the name of the data record that is used by the user to assign the model parameters. The second row lists the name of the instance of the model that simulates the equations. The third column provides a reference to the class definition that implements the equations. The forth column describes the main applicability of the model.
Record name  Model instance name  Class name  Description of the model 

datConExt  modConExt  Buildings.RoomsBeta.Constructions.Construction  Exterior constructions that have no window. 
datConExtWin  modConExtWin  Buildings.RoomsBeta.Constructions.ConstructionWithWindow 
Exterior constructions that have a window. Each construction of this type needs to have one window.
Within the same room, all windows can either have a shade or have no shade.
Individual windows within the same room can have either an interior shade or an exterior shade, but not both.
Each window has its own control signal for the shade. This signal is exposed by the port uSha , which
has the same dimension as the number of windows. The values for uSha must be between
0 and 1 . Set uSha=0 to open the shade, and uSha=1
to close the shade.

datConPar  modConPar  Buildings.RoomsBeta.Constructions.Construction  Interior constructions such as partitions within a room. Both surfaces of this construction are inside the room model and participate in the infrared and solar radiation balance. Since the view factor between these surfaces is zero, there is no infrared radiation from one surface to the other of the same construction. 
datConBou  modConBou  Buildings.RoomsBeta.Constructions.Construction 
Constructions that expose the other boundary conditions of the other surface to the outside of this room model.
The heat conduction through these constructions is modeled in this room model.
The surface at the port opa_b is connected to the models for convection, infrared and solar radiation exchange
with this room model and with the other surfaces of this room model.
The surface at the port opa_a is connected to the port surf_conBou of this room model. This could be used, for example,
to model a floor inside this room and connect to other side of this floor model to a model that computes heat transfer in the soil.

N/A  surBou  Buildings.HeatTransfer.Data.OpaqueSurfaces.Generic 
Opaque surfaces of this room model whose heat transfer through the construction is modeled outside of this room model.
This object is modeled using a data record that contains the area, solar and infrared emissivities and surface tilt.
The surface then participates in the convection and radiation heat balance of the room model. The heat flow rate and temperature
of this surface are exposed at the heat port surf_surBou .
An application of this object may be to connect the port surf_surBou of this room model with the port
surf_conBou of another room model in order to couple two room models.
Another application would be to model a radiant ceiling outside of this room model, and connect its surface to the port
surf_conBou in order for the radiant ceiling model to participate in the heat balance of this room.

With these constructions, we may define a room as follows:
Buildings.RoomsBeta.MixedAir roo(
redeclare package Medium = MediumA,
AFlo=6*4,
hRoo=2.7,
nConExt=2,
datConExt(layers={matLayRoo, matLayExt},
A={6*4, 6*3},
til={Buildings.HeatTransfer.Types.Tilt.Ceiling, Buildings.HeatTransfer.Types.Tilt.Wall},
azi={Buildings.HeatTransfer.Types.Azimuth.S, Buildings.HeatTransfer.Types.Azimuth.W}),
nConExtWin=nConExtWin,
datConExtWin(layers={matLayExt}, A={4*3},
glaSys={glaSys},
AWin={2*2},
fFra={0.1},
til={Buildings.HeatTransfer.Types.Tilt.Wall},
azi={Buildings.HeatTransfer.Types.Azimuth.S}),
nConPar=1,
datConPar(layers={matLayPar}, each A=10,
each til=Buildings.HeatTransfer.Types.Tilt.Wall),
nConBou=1,
datConBou(layers={matLayFlo}, each A=6*4,
each til=Buildings.HeatTransfer.Types.Tilt.Floor),
nSurBou=1,
surBou(each A=6*3, each absIR=0.9, each absSol=0.9, each til=Buildings.HeatTransfer.Types.Tilt.Wall),
linearizeRadiation = true ,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
lat=0.73268921998722) "Room model"
annotation (Placement(transformation(extent={{46,20},{86,60}})));
The following paragraphs explain the different declarations.
The statement
declares that the medium of the room air is set toredeclare package Medium = MediumA,
AFlo=20,
V=20*2.5,
MediumA
,
that the floor area is 20 m^{2} and that
the room air volume is 20*2.5 m^{3}.
The floor area is used to scale the internal heat
gains, which are declared with units of W/m^{2}
using the input signal qGai_flow
.
The next entries specify constructions and surfaces that participate in the heat exchange.
The entry
declares that there are two exterior constructions.nConExt=2,
The lines
declare that the material layers in these constructions are set the the recordsdatConExt(layers={matLayRoo, matLayExt},
A={6*4, 6*3},
til={Buildings.HeatTransfer.Types.Tilt.Ceiling, Buildings.HeatTransfer.Types.Tilt.Wall},
azi={Buildings.HeatTransfer.Types.Azimuth.S, Buildings.HeatTransfer.Types.Azimuth.W}),
matLayRoo
and matLayExt
.
What follows are the declarations for the surface area,
the tilt of the surface and the azimuth of the surfaces. Thus, the
surface with construction matLayExt
is 6*3 m^{2} large
and it is a westfacing wall.
Next, the declaration
declares the construction that contains a window. This construction is built using the materials defined in the recordnConExtWin=nConExtWin,
datConExtWin(layers={matLayExt}, A={4*3},
glaSys={glaSys},
AWin={2*2},
fFra={0.1},
til={Buildings.HeatTransfer.Types.Tilt.Wall},
azi={Buildings.HeatTransfer.Types.Azimuth.S}),
matLayExt
. Its total area,
including the window, is 4*3 m^{2}.
The glazing system is built using the construction defined in the record
glaSys
. The glass area is 2*2 m^{2} and the ratio of frame
to total glazing system area is 10%. The construction is a wall that is
south exposed.
What follows is the declaration of the partition constructions, as declared by
Thus, there is one partition construction. Its area is 10 m^{2} fornConPar=1,
datConPar(layers={matLayPar}, each A=10,
each til=Buildings.HeatTransfer.Types.Tilt.Wall),
Next, the declaration
declares one construction whose other surface boundary condition is exposed by this room model (through the connectornConBou=1,
datConBou(layers={matLayFlo}, each A=6*4,
each til=Buildings.HeatTransfer.Types.Tilt.Floor),
surf_conBou
).
The declaration
is used to instantiate a model for a surface that is in this room. The surface has an area of 6*3 m^{2}, absorptivity in the infrared and the solar spectrum of 0.9 and it is a wall. The room model will compute infrared radiative heat exchange, solar radiative heat gains and infrared radiative heat gains of this surface. The surface temperature and heat flow rate are exposed by this room model at the heat portnSurBou=1,
surBou(each A=6*3, each absIR=0.9, each absSol=0.9, each til=Buildings.HeatTransfer.Types.Tilt.Wall),
surf_surBou
.
A model builder may use this construct
to couple this room model to another room model that may model the construction.
The declaration
causes the equations for radiative heat transfer to be linearized. This can reduce computing time at the expense of accuracy.linearizeRadiation = true ,
The declaration
is used to initialize the air volume inside the thermal zone.energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
Finally, the declaration
sets the latitude of the building which needs to correspond with the latitude of the weather data file.lat=0.73268921998722) "Room model"
Extends from Buildings.RoomsBeta.BaseClasses.ParameterFluid (Parameter declaration for fluid model), Buildings.RoomsBeta.BaseClasses.ConstructionRecords (Data records for construction data).
Type  Name  Default  Description 

replaceable package Medium  PartialMedium  Medium in the component  
ParameterConstruction  datConExt[NConExt]  Data for exterior construction  
ParameterConstructionWithWindow  datConExtWin[NConExtWin]  Data for exterior construction with window  
ParameterConstruction  datConPar[NConPar]  Data for partition construction  
ParameterConstruction  datConBou[NConBou]  Data for construction boundary  
Generic  surBou[NSurBou]  Record for data of surfaces whose heat conduction is modeled outside of this room  
Angle  lat  Latitude [rad]  
Area  AFlo  Floor area [m2]  
Length  hRoo  Average room height [m]  
Boolean  linearizeRadiation  true  Set to true to linearize emissive power 
Exterior constructions  
Integer  nConExt  Number of exterior constructions  
Integer  nConExtWin  Number of window constructions  
Partition constructions  
Integer  nConPar  Number of partition constructions  
Boundary constructions  
Integer  nConBou  Number of constructions that have their outside surface exposed to the boundary of this room  
Integer  nSurBou  Number of surface heat transfer models that connect to constructions that are modeled outside of this room  
Convective heat transfer  
InteriorConvection  intConMod  Buildings.HeatTransfer.Types...  Convective heat transfer model for roomfacing surfaces of opaque constructions 
CoefficientOfHeatTransfer  hIntFixed  3.0  Constant convection coefficient for roomfacing surfaces of opaque constructions [W/(m2.K)] 
ExteriorConvection  extConMod  Buildings.HeatTransfer.Types...  Convective heat transfer model for exterior facing surfaces of opaque constructions 
CoefficientOfHeatTransfer  hExtFixed  10.0  Constant convection coefficient for exterior facing surfaces of opaque constructions [W/(m2.K)] 
Assumptions  
Dynamics  
Dynamics  energyDynamics  Modelica.Fluid.Types.Dynamic...  Formulation of energy balance 
Dynamics  massDynamics  energyDynamics  Formulation of mass balance 
Dynamics  substanceDynamics  energyDynamics  Formulation of substance balance 
Dynamics  traceDynamics  energyDynamics  Formulation of trace substance balance 
Initialization  
AbsolutePressure  p_start  Medium.p_default  Start value of pressure [Pa] 
Boolean  use_T_start  true  = true, use T_start, otherwise h_start 
Temperature  T_start  if use_T_start then 293.15 e...  Start value of temperature [K] 
SpecificEnthalpy  h_start  if use_T_start then Medium.s...  Start value of specific enthalpy [J/kg] 
MassFraction  X_start[Medium.nX]  Medium.X_default  Start value of mass fractions m_i/m [kg/kg] 
ExtraProperty  C_start[Medium.nC]  fill(0, Medium.nC)  Start value of trace substances 
ExtraProperty  C_nominal[Medium.nC]  fill(1E2, Medium.nC)  Nominal value of trace substances. (Set to typical order of magnitude.) 
Type  Name  Description 

VesselFluidPorts_b  ports[nPorts]  Fluid inlets and outlets 
HeatPort_a  heaPorAir  Heat port to air volume 
HeatPort_a  heaPorRad  Heat port for radiative heat gain and radiative temperature 
HeatPort_a  surf_conBou[nConBou]  Heat port at surface b of construction conBou 
HeatPort_a  surf_surBou[nSurBou]  Heat port of surface that is connected to the room air 
input RealInput  uSha[nConExtWin]  Control signal for the shading device (removed if no shade is present) 
input RealInput  qGai_flow[3]  Radiant, convective and latent heat input into room (positive if heat gain) [W/m2] 
Bus  weaBus 
model MixedAir "Model of a room in which the air is completely mixed" extends Buildings.RoomsBeta.BaseClasses.ParameterFluid; extends Buildings.RoomsBeta.BaseClasses.ConstructionRecords; parameter Integer nPorts=0 "Number of ports";Buildings.RoomsBeta.BaseClasses.MixedAir air( final nConExt=nConExt, final nConExtWin=nConExtWin, final nConPar=nConPar, final nConBou=nConBou, final nSurBou=nSurBou, final datConExt=datConExt, final datConExtWin=datConExtWin, final datConPar=datConPar, final datConBou=datConBou, final surBou=surBou, redeclare final package Medium=Medium, final V=V, nPorts=nPorts, final energyDynamics=energyDynamics, final massDynamics=massDynamics, final substanceDynamics=energyDynamics, final traceDynamics=energyDynamics, final p_start=p_start, final use_T_start=use_T_start, final T_start=T_start, final h_start=h_start, final X_start=X_start, final C_start=C_start, final AFlo=AFlo, final hRoo=hRoo, final linearizeRadiation = linearizeRadiation, final conMod=intConMod, final hFixed=hIntFixed, tauGlaSol={0.6 for i in 1:NConExtWin}) "Air volume"; Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b ports[nPorts]( redeclare each package Medium = Medium) "Fluid inlets and outlets"; parameter Modelica.SIunits.Angle lat "Latitude"; final parameter Modelica.SIunits.Volume V=AFlo*hRoo "Volume"; parameter Modelica.SIunits.Area AFlo "Floor area"; parameter Modelica.SIunits.Length hRoo "Average room height";Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heaPorAir "Heat port to air volume"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heaPorRad "Heat port for radiative heat gain and radiative temperature"; //////////////////////////////////////////////////////////////////////// // ConstructionsConstructions.Construction conExt[NConExt]( A=datConExt.A, til=datConExt.til, final layers={datConExt[i].layers for i in 1:NConExt}, steadyStateInitial=datConExt.steadyStateInitial, T_a_start=datConExt.T_a_start, T_b_start=datConExt.T_b_start) if haveConExt "Heat conduction through exterior construction that have no window"; Constructions.ConstructionWithWindow conExtWin[NConExtWin]( A=datConExtWin.A, til=datConExtWin.til, final layers={datConExtWin[i].layers for i in 1:NConExtWin}, steadyStateInitial=datConExtWin.steadyStateInitial, T_a_start=datConExtWin.T_a_start, T_b_start=datConExtWin.T_b_start, AWin=datConExtWin.AWin, fFra=datConExtWin.fFra, glaSys=datConExtWin.glaSys) if haveConExtWin "Heat conduction through exterior construction that have a window"; Constructions.Construction conPar[NConPar]( A=datConPar.A, til=datConPar.til, final layers={datConPar[i].layers for i in 1:NConPar}, steadyStateInitial=datConPar.steadyStateInitial, T_a_start=datConPar.T_a_start, T_b_start=datConPar.T_b_start) if haveConPar "Heat conduction through partitions that have both sides inside the thermal zone"; Constructions.Construction conBou[NConBou]( A=datConBou.A, til=datConBou.til, final layers={datConBou[i].layers for i in 1:NConBou}, steadyStateInitial=datConBou.steadyStateInitial, T_a_start=datConBou.T_a_start, T_b_start=datConBou.T_b_start) if haveConBou "Heat conduction through opaque constructions that have the boundary conditions of the other side exposed"; parameter Boolean linearizeRadiation = true "Set to true to linearize emissive power"; //////////////////////////////////////////////////////////////////////// // Convection parameter Buildings.HeatTransfer.Types.InteriorConvection intConMod= Buildings.HeatTransfer.Types.InteriorConvection.Temperature "Convective heat transfer model for roomfacing surfaces of opaque constructions"; parameter Modelica.SIunits.CoefficientOfHeatTransfer hIntFixed=3.0 "Constant convection coefficient for roomfacing surfaces of opaque constructions"; parameter Buildings.HeatTransfer.Types.ExteriorConvection extConMod= Buildings.HeatTransfer.Types.ExteriorConvection.TemperatureWind "Convective heat transfer model for exterior facing surfaces of opaque constructions"; parameter Modelica.SIunits.CoefficientOfHeatTransfer hExtFixed=10.0 "Constant convection coefficient for exterior facing surfaces of opaque constructions"; //////////////////////////////////////////////////////////////////////// // Models for boundary conditionsModelica.Thermal.HeatTransfer.Interfaces.HeatPort_a surf_conBou[nConBou] if haveConBou "Heat port at surface b of construction conBou"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a surf_surBou[nSurBou] if haveSurBou "Heat port of surface that is connected to the room air"; Modelica.Blocks.Interfaces.RealInput uSha[nConExtWin](each min=0, each max=1) if haveShade "Control signal for the shading device (removed if no shade is present)"; Modelica.Blocks.Interfaces.RealInput qGai_flow[3](unit="W/m2") "Radiant, convective and latent heat input into room (positive if heat gain)"; // Reassign the tilt since a construction that is declared as a ceiling of the // room model has an exteriorfacing surface that is a floorBaseClasses.ExteriorBoundaryConditions bouConExt( final nCon=nConExt, final AOpa=datConExt.A, final lat=lat, final til=Modelica.Constants.pi * ones(nConExt)  datConExt.til, final azi=datConExt.azi, linearizeRadiation = linearizeRadiation, final conMod=extConMod, final hFixed=hExtFixed, final absIR=datConExt.layers.absIR_a, final absSol=datConExt.layers.absSol_a) if haveConExt "Exterior boundary conditions for constructions without a window"; // Reassign the tilt since a construction that is declared as a ceiling of the // room model has an exteriorfacing surface that is a floorBaseClasses.ExteriorBoundaryConditionsWithWindow bouConExtWin( final nCon=nConExtWin, final lat=lat, final til=Modelica.Constants.pi * ones(nConExtWin)  datConExtWin.til, final azi=datConExtWin.azi, final AOpa=datConExtWin.AOpa, final AWin=datConExtWin.AWin, final fFra=datConExtWin.fFra, linearizeRadiation = linearizeRadiation, final conMod=extConMod, final hFixed=hExtFixed, final absIR=datConExtWin.layers.absIR_a, final absIRSha_air={datConExtWin[i].glaSys.shade.absIR_a for i in 1:nConExtWin}, final absIRSha_glass={datConExtWin[i].glaSys.shade.absIR_b for i in 1:nConExtWin}, final tauIRSha_air={datConExtWin[i].glaSys.shade.tauIR_a for i in 1:nConExtWin}, final tauIRSha_glass={datConExtWin[i].glaSys.shade.tauIR_b for i in 1:nConExtWin}, final haveExteriorShade={datConExtWin[i].glaSys.haveExteriorShade for i in 1:nConExtWin}, final haveInteriorShade={datConExtWin[i].glaSys.haveInteriorShade for i in 1:nConExtWin}, final absSol=datConExtWin.layers.absSol_a, final absSolFra=datConExtWin.glaSys.absSolFra) if haveConExtWin "Exterior boundary conditions for constructions with a window"; HeatTransfer.WindowsBeta.BaseClasses.WindowRadiation conExtWinRad[NConExtWin]( final AWin=(1 . datConExtWin.fFra) .* datConExtWin.AWin, final N=datConExtWin.glaSys.nLay, final tauGlaSol=datConExtWin.glaSys.glass.tauSol, final rhoGlaSol_a=datConExtWin.glaSys.glass.rhoSol_a, final rhoGlaSol_b=datConExtWin.glaSys.glass.rhoSol_b, final tauShaSol_a=datConExtWin.glaSys.shade.tauSol_a, final tauShaSol_b=datConExtWin.glaSys.shade.tauSol_b, final rhoShaSol_a=datConExtWin.glaSys.shade.rhoSol_a, final rhoShaSol_b=datConExtWin.glaSys.shade.rhoSol_b, final haveExteriorShade=datConExtWin.glaSys.haveExteriorShade, final haveInteriorShade=datConExtWin.glaSys.haveInteriorShade) if haveConExtWin "Model for solar radiation through shades and window"; BoundaryConditions.WeatherData.Bus weaBus; protected final parameter Boolean haveShade= datConExtWin[1].glaSys.haveExteriorShade or datConExtWin[1].glaSys.haveInteriorShade "Set to true if the windows have a shade"; equationconnect(air.conExtWin, conExtWin.opa_b); connect(air.conPar_b, conPar.opa_b); connect(air.conPar_a, conPar.opa_a); connect(conBou.opa_a, surf_conBou); connect(air.conBou, conBou.opa_b); connect(surf_surBou, air.conSurBou); connect(uSha, air.uSha); connect(qGai_flow, air.qGai_flow); connect(air.JOutUns, conExtWin.JInUns_b); connect(conExtWin.JOutUns_b, air.JInUns); connect(air.JOutSha, conExtWin.JInSha_b); connect(conExtWin.JOutSha_b, air.JInSha); connect(air.glaUns, conExtWin.glaUns_b); connect(conExtWin.glaSha_b, air.glaSha); connect(air.conExtWinFra, conExtWin.fra_b); connect(uSha, conExtWin.uSha); connect(uSha, bouConExtWin.uSha); connect(bouConExtWin.opa_a, conExtWin.opa_a); connect(conExtWin.JInUns_a, bouConExtWin.JOutUns); connect(bouConExtWin.JInUns, conExtWin.JOutUns_a); connect(conExtWin.glaUns_a, bouConExtWin.glaUns); connect(bouConExtWin.glaSha, conExtWin.glaSha_a); connect(conExtWin.JInSha_a, bouConExtWin.JOutSha); connect(bouConExtWin.JInSha, conExtWin.JOutSha_a); connect(conExtWin.fra_a, bouConExtWin.fra); connect(conExt.opa_b, air.conExt); connect(conExt.opa_a, bouConExt.opa_a); connect(weaBus, bouConExtWin.weaBus); connect(weaBus, bouConExt.weaBus); connect(ports, air.ports); connect(bouConExtWin.QAbsSolSha_flow, conExtWinRad.QAbsExtSha_flow); connect(bouConExtWin.inc, conExtWinRad.incAng); connect(bouConExtWin.HDir, conExtWinRad.HDir); connect(bouConExtWin.HDif, conExtWinRad.HDif); connect(uSha, conExtWinRad.uSha); connect(air.HOutConExtWin, conExtWinRad.HRoo); connect(conExtWinRad.QTra_flow, air.JInConExtWin); connect(conExtWinRad.QAbsIntSha_flow, air.QAbsSolSha_flow); connect(conExtWin.QAbsSha_flow, conExtWinRad.QAbsGlaSha_flow); connect(conExtWinRad.QAbsGlaUns_flow, conExtWin.QAbsUns_flow); connect(air.heaPorAir, heaPorAir); connect(air.heaPorRad, heaPorRad); end MixedAir;