This package contains the models that were used for the BESTEST validation (ASHRAE/ANSI 2007).
ASHRAE/ANSI. 2007. ANSI/ASHRAE Standard 140-2007, Standard Method of Test for the Evaluation of Building Energy Analysis Computer Programs.
Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).
| Name | Description |
|---|---|
| Basic test with light-weight construction and dual-setpoint for heating and cooling | |
| Case 600 with free floating temperature | |
| Case 900 heavy mass test | |
| Case 900 with free floating temperature | |
| Thermal properties of window glass | |
| Double pane, clear glass 3.175mm, air 13mm, clear glass 3.175mm |
Buildings.Rooms.Examples.BESTEST.Case600
This model is used for the basic test case 600 of the BESTEST validation suite. Case 600 is a leight-weight building with room temperature control set to 20°C for heating and 27°C for cooling. The room has no shade and a window that faces south.
Extends from Modelica.Icons.Example (Icon for runnable examples).
| Type | Name | Default | Description |
|---|---|---|---|
| Integer | nStaRef | 6 | Number of states in a reference material |
| Real | S_ | Buildings.HeatTransfer.Types... | |
| Real | E_ | Buildings.HeatTransfer.Types... | |
| Real | W_ | Buildings.HeatTransfer.Types... | |
| Real | N_ | Buildings.HeatTransfer.Types... | |
| Real | C_ | Buildings.HeatTransfer.Types... | |
| Real | F_ | Buildings.HeatTransfer.Types... | |
| Real | Z_ | Buildings.HeatTransfer.Types... | |
| Integer | nConExtWin | 1 | Number of constructions with a window |
| Integer | nConBou | 1 | Number of surface that are connected to constructions that are modeled inside the room |
| Generic | matExtWal | Lightweight Case: Exterior Wall | |
| Generic | matFlo | Lightweight Case: Floor | |
| Generic | roofCase600 | Lightweight Case: Exterior Wall |
| Type | Name | Description |
|---|---|---|
| Bus | weaBus |
model Case600
"Basic test with light-weight construction and dual-setpoint for heating and cooling"
extends Modelica.Icons.Example;
package MediumA = Buildings.Media.GasesConstantDensity.SimpleAir
"Medium model";
parameter Integer nStaRef = 6 "Number of states in a reference material";
parameter Real S_ = Buildings.HeatTransfer.Types.Azimuth.S;
parameter Real E_ = Buildings.HeatTransfer.Types.Azimuth.E;
parameter Real W_ = Buildings.HeatTransfer.Types.Azimuth.W;
parameter Real N_ = Buildings.HeatTransfer.Types.Azimuth.N;
parameter Real C_ = Buildings.HeatTransfer.Types.Tilt.Ceiling;
parameter Real F_ = Buildings.HeatTransfer.Types.Tilt.Floor;
parameter Real Z_ = Buildings.HeatTransfer.Types.Tilt.Wall;
parameter Integer nConExtWin = 1 "Number of constructions with a window";
parameter Integer nConBou = 1
"Number of surface that are connected to constructions that are modeled inside the room";
inner Modelica.Fluid.System system;
parameter Buildings.HeatTransfer.Data.OpaqueConstructions.Generic matExtWal(
nLay=3,
absIR_a=0.9,
absIR_b=0.9,
absSol_a=0.6,
absSol_b=0.6,
material={Buildings.HeatTransfer.Data.Solids.Generic(
x=0.009,
k=0.140,
c=900,
d=530,
nStaRef=nStaRef),Buildings.HeatTransfer.Data.Solids.Generic(
x=0.066,
k=0.040,
c=840,
d=12,
nStaRef=nStaRef),Buildings.HeatTransfer.Data.Solids.Generic(
x=0.012,
k=0.160,
c=840,
d=950,
nStaRef=nStaRef)}) "Lightweight Case: Exterior Wall";
parameter Buildings.HeatTransfer.Data.OpaqueConstructions.Generic
matFlo(final nLay=
2,
absIR_a=0.9,
absIR_b=0.9,
absSol_a=0.6,
absSol_b=0.6,
material={Buildings.HeatTransfer.Data.Solids.Generic(
x=1.003,
k=0.040,
c=0,
d=0,
nStaRef=nStaRef),Buildings.HeatTransfer.Data.Solids.Generic(
x=0.025,
k=0.140,
c=1200,
d=650,
nStaRef=nStaRef)}) "Lightweight Case: Floor";
Buildings.Rooms.MixedAir roo(
redeclare package Medium = MediumA,
hRoo=2.7,
nConExtWin=nConExtWin,
nConBou=1,
nPorts=3,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
AFlo=48,
datConBou(
layers={matFlo},
each A=48,
each til=F_),
datConExt(
layers={roofCase600,matExtWal,matExtWal,matExtWal},
A={48,6*2.7,6*2.7,8*2.7},
til={C_,Z_,Z_,Z_},
azi={S_,W_,E_,N_}),
nConExt=4,
nConPar=0,
nSurBou=0,
datConExtWin(
layers={matExtWal},
A={8*2.7},
glaSys={window600},
AWin={2*3*2},
fFra={0.001},
til={Z_},
azi={S_}),
intConMod=Buildings.HeatTransfer.Types.InteriorConvection.Temperature,
extConMod=Buildings.HeatTransfer.Types.ExteriorConvection.TemperatureWind,
lat=0.69464104229374,
linearizeRadiation=false) "Room model for Case 600";
Modelica.Blocks.Sources.Constant qConGai_flow(k=80/48) "Convective heat gain";
Modelica.Blocks.Sources.Constant qRadGai_flow(k=120/48) "Radiative heat gain";
Modelica.Blocks.Routing.Multiplex3 multiplex3_1;
Modelica.Blocks.Sources.Constant qLatGai_flow(k=0) "Latent heat gain";
Buildings.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam=
"Resources/weatherdata/DRYCOLD.mos");
Modelica.Blocks.Sources.Constant uSha(k=0)
"Control signal for the shading device";
Modelica.Blocks.Routing.Replicator replicator(nout=max(1,nConExtWin));
Modelica.Thermal.HeatTransfer.Sources.FixedTemperature TSoi[nConBou](each T=283.15)
"Boundary condition for construction";
parameter Buildings.HeatTransfer.Data.OpaqueConstructions.Generic roofCase600(nLay=3,
absIR_a=0.9,
absIR_b=0.9,
absSol_a=0.6,
absSol_b=0.6,
material={Buildings.HeatTransfer.Data.Solids.Generic(
x=0.019,
k=0.140,
c=900,
d=530,
nStaRef=nStaRef),Buildings.HeatTransfer.Data.Solids.Generic(
x=0.1118,
k=0.040,
c=840,
d=12,
nStaRef=nStaRef),Buildings.HeatTransfer.Data.Solids.Generic(
x=0.010,
k=0.160,
c=840,
d=950,
nStaRef=nStaRef)}) "Lightweight Case: Exterior Wall";
Win600 window600(
UFra=3,
haveExteriorShade=false,
haveInteriorShade=false) "Window for Case 600";
Buildings.HeatTransfer.Conduction.SingleLayer soil(
A=48,
material(
x=2,
k=1.3,
c=800,
d=1500,
R=0),
steadyStateInitial=true,
T_a_start=283.15,
T_b_start=283.75) "2m deep soil (per definition on p.4 of ASHRAE 140-2007)";
Buildings.Fluid.Sources.MassFlowSource_T Infiltration(
redeclare package Medium = MediumA,
m_flow=1,
use_m_flow_in=true,
use_T_in=false,
use_X_in=false,
use_C_in=false,
nPorts=1);
Buildings.Fluid.Sources.Outside Infiltration1(
redeclare package Medium = MediumA, nPorts=1);
Modelica.Blocks.Sources.Constant InfiltrationRate(k=-48*2.7*0.5/3600)
"0.41 ACH adjusted for the altitude (0.5 at sea level)";
Modelica.Blocks.Math.Product product;
Buildings.Fluid.Sensors.Density density(redeclare package Medium = MediumA)
"Air density inside the building";
Buildings.BoundaryConditions.WeatherData.Bus weaBus;
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor TRooAir
"Room air temperature";
Buildings.Controls.Continuous.LimPID conHea(
Td=60,
initType=Modelica.Blocks.Types.InitPID.InitialState,
Ti=300,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
k=0.1) "Controller for heating";
Modelica.Blocks.Sources.Constant TSetHea(k=273.15 + 20)
"Setpoint for heating";
Modelica.Blocks.Sources.Constant TSetCoo(k=273.15 + 27)
"Setpoint for cooling";
Buildings.Controls.Continuous.LimPID conCoo(
Td=60,
reverseAction=true,
initType=Modelica.Blocks.Types.InitPID.InitialState,
Ti=300,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
k=0.1) "Controller for cooling";
Modelica.Blocks.Math.Gain gaiHea(k=1E6) "Gain for heating";
Modelica.Blocks.Math.Gain gaiCoo(k=-1E6) "Gain for cooling";
Buildings.Fluid.FixedResistances.FixedResistanceDpM heaCoo(
redeclare package Medium = MediumA,
allowFlowReversal=false,
m_flow_nominal=48*2.7*0.41/3600*1.2,
dp_nominal=1,
linearized=true,
from_dp=true) "Heater and cooler";
Modelica.Blocks.Math.Sum sum1(nin=2);
Modelica.Blocks.Routing.Multiplex2 multiplex2;
Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow preHea
"Prescribed heat flow for heating and cooling";
Modelica.Blocks.Continuous.Integrator EHea(
k=1/1E6/3600,
initType=Modelica.Blocks.Types.Init.InitialState,
y_start=0) "Heating energy in MWh";
Modelica.Blocks.Continuous.Integrator ECoo(
k=1/1E6/3600,
initType=Modelica.Blocks.Types.Init.InitialState,
y_start=0) "Cooling energy in MWh";
equation
connect(qRadGai_flow.y,multiplex3_1. u1[1]);
connect(qLatGai_flow.y,multiplex3_1. u3[1]);
connect(multiplex3_1.y, roo.qGai_flow);
connect(roo.uSha, replicator.y);
connect(qConGai_flow.y, multiplex3_1.u2[1]);
connect(weaDat.weaBus, roo.weaBus);
connect(uSha.y, replicator.u);
connect(product.y, Infiltration.m_flow_in);
connect(density.port, roo.ports[1]);
connect(density.d, product.u2);
connect(weaDat.weaBus, weaBus);
connect(InfiltrationRate.y, product.u1);
connect(TSoi[1].port, soil.port_a);
connect(soil.port_b, roo.surf_conBou[1]);
connect(TRooAir.T, conHea.u_m);
connect(TSetHea.y, conHea.u_s);
connect(TSetCoo.y, conCoo.u_s);
connect(conCoo.u_m, TRooAir.T);
connect(conHea.y, gaiHea.u);
connect(conCoo.y, gaiCoo.u);
connect(weaBus, Infiltration1.weaBus);
connect(roo.heaPorAir, TRooAir.port);
connect(Infiltration1.ports[1], heaCoo.port_a);
connect(heaCoo.port_b, roo.ports[2]);
connect(Infiltration.ports[1], roo.ports[3]);
connect(gaiHea.y, multiplex2.u1[1]);
connect(gaiCoo.y, multiplex2.u2[1]);
connect(multiplex2.y, sum1.u);
connect(sum1.y, preHea.Q_flow);
connect(preHea.port, roo.heaPorAir);
connect(EHea.u, gaiHea.y);
connect(ECoo.u, gaiCoo.y);
end Case600;
Buildings.Rooms.Examples.BESTEST.Case600FF
This model is used for the basic test case 600FF of the BESTEST validation suite.
Case 600 is a leight-weight building.
The room temperature is free floating.
This is achieved by setting gaiHea.k=0
and gaiCoo.k=0.
Extends from Case600 (Basic test with light-weight construction and dual-setpoint for heating and cooling).
| Type | Name | Default | Description |
|---|---|---|---|
| Integer | nStaRef | 6 | Number of states in a reference material |
| Real | S_ | Buildings.HeatTransfer.Types... | |
| Real | E_ | Buildings.HeatTransfer.Types... | |
| Real | W_ | Buildings.HeatTransfer.Types... | |
| Real | N_ | Buildings.HeatTransfer.Types... | |
| Real | C_ | Buildings.HeatTransfer.Types... | |
| Real | F_ | Buildings.HeatTransfer.Types... | |
| Real | Z_ | Buildings.HeatTransfer.Types... | |
| Integer | nConExtWin | 1 | Number of constructions with a window |
| Integer | nConBou | 1 | Number of surface that are connected to constructions that are modeled inside the room |
| Generic | matExtWal | Lightweight Case: Exterior Wall | |
| Generic | matFlo | Lightweight Case: Floor | |
| Generic | roofCase600 | Lightweight Case: Exterior Wall |
| Type | Name | Description |
|---|---|---|
| Bus | weaBus |
model Case600FF "Case 600 with free floating temperature"
extends Case600(
gaiHea(k=0),
gaiCoo(k=0),
conCoo(controllerType=Modelica.Blocks.Types.SimpleController.P),
conHea(controllerType=Modelica.Blocks.Types.SimpleController.P));
end Case600FF;
Buildings.Rooms.Examples.BESTEST.Case900
This model is used for the basic test case 900 of the BESTEST validation suite. Case 900 is a heavy-weight building with room temperature control set to 20°C for heating and 27°C for cooling. The room has no shade and a window that faces south.
Extends from Case600 (Basic test with light-weight construction and dual-setpoint for heating and cooling).
| Type | Name | Default | Description |
|---|---|---|---|
| Integer | nStaRef | 6 | Number of states in a reference material |
| Real | S_ | Buildings.HeatTransfer.Types... | |
| Real | E_ | Buildings.HeatTransfer.Types... | |
| Real | W_ | Buildings.HeatTransfer.Types... | |
| Real | N_ | Buildings.HeatTransfer.Types... | |
| Real | C_ | Buildings.HeatTransfer.Types... | |
| Real | F_ | Buildings.HeatTransfer.Types... | |
| Real | Z_ | Buildings.HeatTransfer.Types... | |
| Integer | nConExtWin | 1 | Number of constructions with a window |
| Integer | nConBou | 1 | Number of surface that are connected to constructions that are modeled inside the room |
| Generic | matExtWal | extWallCase900 | Lightweight Case: Exterior Wall |
| Generic | matFlo | floorCase900 | Lightweight Case: Floor |
| Generic | roofCase600 | Lightweight Case: Exterior Wall |
| Type | Name | Description |
|---|---|---|
| Bus | weaBus |
model Case900 "Case 900 heavy mass test"
extends Case600(matExtWal = extWallCase900,
matFlo = floorCase900);
Buildings.HeatTransfer.Data.OpaqueConstructions.Generic extWallCase900(
nLay=3,
absIR_a=0.9,
absIR_b=0.9,
absSol_a=0.6,
absSol_b=0.6,
material={Buildings.HeatTransfer.Data.Solids.Generic(
x=0.009,
k=0.140,
c=900,
d=530,
nStaRef=nStaRef),Buildings.HeatTransfer.Data.Solids.Generic(
x=0.0615,
k=0.040,
c=1400,
d=10,
nStaRef=nStaRef),Buildings.HeatTransfer.Data.Solids.Generic(
x=0.100,
k=0.510,
c=1000,
d=1400,
nStaRef=nStaRef)}) "High Mass Case: Exterior Wall";
Buildings.HeatTransfer.Data.OpaqueConstructions.Generic floorCase900(final nLay=
2,
absIR_a=0.9,
absIR_b=0.9,
absSol_a=0.6,
absSol_b=0.6,
material={Buildings.HeatTransfer.Data.Solids.Generic(
x=1.007,
k=0.040,
c=0,
d=0,
nStaRef=nStaRef),Buildings.HeatTransfer.Data.Solids.Generic(
x=0.080,
k=1.130,
c=1000,
d=1400,
nStaRef=nStaRef)}) "High Mass Case: Floor";
end Case900;
Buildings.Rooms.Examples.BESTEST.Case900FF
This model is used for the basic test case 900FF of the BESTEST validation suite.
Case 900FF is a heavy-weight building.
The room temperature is free floating.
This is achieved by setting gaiHea.k=0
and gaiCoo.k=0.
Extends from Case900 (Case 900 heavy mass test).
| Type | Name | Default | Description |
|---|---|---|---|
| Integer | nStaRef | 6 | Number of states in a reference material |
| Real | S_ | Buildings.HeatTransfer.Types... | |
| Real | E_ | Buildings.HeatTransfer.Types... | |
| Real | W_ | Buildings.HeatTransfer.Types... | |
| Real | N_ | Buildings.HeatTransfer.Types... | |
| Real | C_ | Buildings.HeatTransfer.Types... | |
| Real | F_ | Buildings.HeatTransfer.Types... | |
| Real | Z_ | Buildings.HeatTransfer.Types... | |
| Integer | nConExtWin | 1 | Number of constructions with a window |
| Integer | nConBou | 1 | Number of surface that are connected to constructions that are modeled inside the room |
| Generic | matExtWal | extWallCase900 | Lightweight Case: Exterior Wall |
| Generic | matFlo | floorCase900 | Lightweight Case: Floor |
| Generic | roofCase600 | Lightweight Case: Exterior Wall |
| Type | Name | Description |
|---|---|---|
| Bus | weaBus |
model Case900FF "Case 900 with free floating temperature"
extends Case900(
gaiHea(k=0),
gaiCoo(k=0),
conCoo(controllerType=Modelica.Blocks.Types.SimpleController.P),
conHea(controllerType=Modelica.Blocks.Types.SimpleController.P));
end Case900FF;
Buildings.Rooms.Examples.BESTEST.Glass600
This record declares the glass properties for the BESTEST model.
Extends from Modelica.Icons.Record (Icon for records).
| Type | Name | Default | Description |
|---|---|---|---|
| Length | x | 0.003175 | Thickness [m] |
| ThermalConductivity | k | 1.06 | Thermal conductivity [W/(m.K)] |
| TransmissionCoefficient | tauSol | 0.86156 | Solar transimittance. It is tauSol in WINDOW5. [1] |
| ReflectionCoefficient | rhoSol_a | 0.0434 | Solar reflectance of surface a (usually outside-facing surface). It is Rsol1 in WINDOW5. [1] |
| ReflectionCoefficient | rhoSol_b | 0.0434 | Solar reflectance of surface b (usually room-facing surface). It is Rsol2 in WINDOW5. [1] |
| TransmissionCoefficient | tauIR | 0 | Infrared infrared transmissivity of glass. It is Tir in WINDOW5. [1] |
| Emissivity | absIR_a | 0.9 | Infrared infrared absorptivity of surface a (usually outside-facing surface). It is Emis1 in WINDOW5. [1] |
| Emissivity | absIR_b | 0.9 | Infrared infrared absorptivity of surface b (usually room-facing surface). It is Emis2 in WINDOW5. [1] |
record Glass600 "Thermal properties of window glass"
extends Modelica.Icons.Record;
parameter Modelica.SIunits.Length x=0.003175 "Thickness";
parameter Modelica.SIunits.ThermalConductivity k=1.06 "Thermal conductivity";
parameter Modelica.SIunits.TransmissionCoefficient tauSol = 0.86156
"Solar transimittance. It is tauSol in WINDOW5.";
parameter Modelica.SIunits.ReflectionCoefficient rhoSol_a = 0.0434
"Solar reflectance of surface a (usually outside-facing surface). It is Rsol1 in WINDOW5.";
parameter Modelica.SIunits.ReflectionCoefficient rhoSol_b = 0.0434
"Solar reflectance of surface b (usually room-facing surface). It is Rsol2 in WINDOW5.";
parameter Modelica.SIunits.TransmissionCoefficient tauIR = 0
"Infrared infrared transmissivity of glass. It is Tir in WINDOW5.";
parameter Modelica.SIunits.Emissivity absIR_a = 0.9
"Infrared infrared absorptivity of surface a (usually outside-facing surface). It is Emis1 in WINDOW5.";
parameter Modelica.SIunits.Emissivity absIR_b = 0.9
"Infrared infrared absorptivity of surface b (usually room-facing surface). It is Emis2 in WINDOW5.";
end Glass600;
Buildings.Rooms.Examples.BESTEST.Win600
This record declares the parameters for the window system for the BESTEST.
Extends from Buildings.HeatTransfer.Data.GlazingSystems.Generic (Thermal properties of glazing systems).
| Type | Name | Default | Description |
|---|---|---|---|
| Integer | nLay | 2 | Number of glass layers |
| Boolean | haveExteriorShade | false | Set to true if window has an exterior shade (at surface a) |
| Boolean | haveInteriorShade | false | Set to true if window has an interior shade (at surface b) |
| Generic | glass[nLay] | {Glass600(),Glass600()} | Layer by layer declaration of glass layers, starting from outside to room-side |
| Generic | gas[nLay - 1] | {Buildings.HeatTransfer.Data... | Layer by layer declaration of glass layers, starting from outside to room-side |
| Generic | shade | Shade | |
| CoefficientOfHeatTransfer | UFra | 1.4 | U-value of frame [W/(m2.K)] |
| Emissivity | absIRFra | 0.8 | Infrared absorptivity of window frame [1] |
| Emissivity | absSolFra | 0.5 | Solar absorptivity of window frame [1] |
record Win600 =
Buildings.HeatTransfer.Data.GlazingSystems.Generic (
final glass={Glass600(),Glass600()},
final gas={Buildings.HeatTransfer.Data.Gases.Air(x=0.013)},
UFra=1.4,
final nLay=2)
"Double pane, clear glass 3.175mm, air 13mm, clear glass 3.175mm";