Collection of validation models for EnergyPlus thermal zones
Information
This package contains validation models for EnergyPlus thermal zones.
Extends from Modelica.Icons.Package (Icon for standard packages).
Package Content
Name |
Description |
Infiltration
|
Validation model for outside air infiltration in zones not modeled in Modelica |
InternalGain
|
Validation model for one zone with and without internal heat gain |
OneZoneCompareZoneTemperatureOutput
|
This example tests whether the zone mean air temperature is reported correctly as an EnergyPlus output |
OneZoneOneYear
|
Validation model for one zone |
RefBldgSmallOffice
|
Validation model for six zones small office building |
TwoIdenticalZones
|
Validation model with two identical zones |
ZoneTemperatureInitialization
|
This example tests whether the zone mean air temperature is initialized correctly in EnergyPlus |
Validation model for outside air infiltration in zones not modeled in Modelica
Information
This validation case simulates two instances of
Buildings.ThermalZones.EnergyPlus.Examples.SingleFamilyHouse.RadiantHeatingCooling.
In the instance higInf
, the infiltration rate of the unconditioned attic has been
significantly increased. This leads to a different surface temperature of the attic floor,
which can be shown by comparing the variables
defInf.attFlo.heaPorFro.T
and
higInf.attFlo.heaPorFro.T
.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
Validation model for one zone with and without internal heat gain
Information
Simple test case for one building with one thermal zone with different inputs for the internal heat gains.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
model InternalGain
extends Modelica.Icons.Example;
package Medium=
Buildings.Media.Air
;
OneZoneWithGainExposed noGai(
qRad_flow=0,
qSen_flow=0,
qLat_flow=0)
;
OneZoneWithGainExposed radOnl(
qRad_flow=5,
qSen_flow=0,
qLat_flow=0)
;
OneZoneWithGainExposed conOnl(
qRad_flow=0,
qSen_flow=5,
qLat_flow=0)
;
OneZoneWithGainExposed latOnl(
qRad_flow=0,
qSen_flow=0,
qLat_flow=5)
;
protected
model OneZoneWithGainExposed
extends Modelica.Blocks.Icons.Block;
parameter Modelica.SIunits.HeatFlux qRad_flow
;
parameter Modelica.SIunits.HeatFlux qSen_flow
;
parameter Modelica.SIunits.HeatFlux qLat_flow
;
Examples.SingleFamilyHouse.Unconditioned bui(
m_flow_nominal=bui.VRoo*10*0.3/3600,
qIntGai(
final k={qRad_flow,qSen_flow,qLat_flow}),
bou(
m_flow=bui.zon.V*1.2*10/3600))
;
end OneZoneWithGainExposed;
end InternalGain;
This example tests whether the zone mean air temperature is reported correctly as an EnergyPlus output
Information
Simple test case that verifies whether the zone mean air temperature is reported correctly by EnergyPlus.
Note that Modelica solves the differential equation for this variable, but this test case
obtains its value from EnergyPlus.
Extends from Buildings.ThermalZones.EnergyPlus.Examples.SingleFamilyHouse.Unconditioned (Example model with one unconditoned zone simulated in Modelica, and the other two unconditioned zones simulated in EnergyPlus).
Parameters
Type | Name | Default | Description |
Volume | VRoo | 453.1 | Room volume [m3] |
MassFlowRate | m_flow_nominal | VRoo*1.2*0.3/3600 | Nominal mass flow rate [kg/s] |
Modelica definition
Validation model for one zone
Information
Simple test case that simulates a building with
one thermal zone for one year.
Extends from Buildings.ThermalZones.EnergyPlus.Examples.SingleFamilyHouse.Unconditioned (Example model with one unconditoned zone simulated in Modelica, and the other two unconditioned zones simulated in EnergyPlus).
Parameters
Type | Name | Default | Description |
Volume | VRoo | 453.1 | Room volume [m3] |
MassFlowRate | m_flow_nominal | VRoo*1.2*0.3/3600 | Nominal mass flow rate [kg/s] |
Modelica definition
Validation model for six zones small office building
Information
Validation of free floating temperatures.
The model uses the small office building of the DOE Reference Buildings.
The Modelica model is in free floating mode, and the data reader datRea
outputs, for comparison, the free floating room temperatures that were
obtained from an EnergyPlus simulation.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
model RefBldgSmallOffice
extends Modelica.Icons.Example;
package Medium=
Buildings.Media.Air
;
inner Building building(
idfName=
Modelica.Utilities.Files.loadResource(
"modelica://Buildings/Resources/Data/ThermalZones/EnergyPlus/Examples/RefBldgSmallOffice/RefBldgSmallOfficeNew2004_Chicago.idf"),
weaName=
Modelica.Utilities.Files.loadResource(
"modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos"))
;
Modelica.Blocks.Sources.Constant qConGai_flow(
k=0)
;
Modelica.Blocks.Sources.Constant qRadGai_flow(
k=0)
;
Modelica.Blocks.Routing.Multiplex3 mul
;
Modelica.Blocks.Sources.Constant qLatGai_flow(
k=0)
;
Buildings.ThermalZones.EnergyPlus.ThermalZone att(
redeclare package Medium=Medium,
zoneName="Attic")
;
Buildings.ThermalZones.EnergyPlus.ThermalZone cor(
redeclare package Medium=Medium,
zoneName="Core_ZN")
;
Buildings.ThermalZones.EnergyPlus.ThermalZone sou(
redeclare package Medium=Medium,
zoneName="Perimeter_ZN_1")
;
Buildings.ThermalZones.EnergyPlus.ThermalZone eas(
redeclare package Medium=Medium,
zoneName="Perimeter_ZN_2")
;
Buildings.ThermalZones.EnergyPlus.ThermalZone nor(
redeclare package Medium=Medium,
zoneName="Perimeter_ZN_3")
;
Buildings.ThermalZones.EnergyPlus.ThermalZone wes(
redeclare package Medium=Medium,
zoneName="Perimeter_ZN_4")
;
Modelica.Blocks.Sources.CombiTimeTable datRea(
tableOnFile=true,
fileName=
Modelica.Utilities.Files.loadResource(
"modelica://Buildings/Resources/Data/ThermalZones/EnergyPlus/Examples/RefBldgSmallOffice/RefBldgSmallOfficeNew2004_Chicago.dat"),
smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments,
tableName="EnergyPlus",
columns=2:9,
extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint)
;
Modelica.SIunits.Temperature TOutEP=datRea.y[1]+273.15
;
Real relHumEP(
unit="1")=datRea.y[2]/100
;
Modelica.SIunits.Temperature TAttEP=datRea.y[3]+273.15
;
Modelica.SIunits.Temperature TCorEP=datRea.y[4]+273.15
;
Modelica.SIunits.Temperature TSouEP=datRea.y[5]+273.15
;
Modelica.SIunits.Temperature TEasEP=datRea.y[6]+273.15
;
Modelica.SIunits.Temperature TNorEP=datRea.y[7]+273.15
;
Modelica.SIunits.Temperature TWesEP=datRea.y[8]+273.15
;
equation
connect(qRadGai_flow.y,mul.u1[1]);
connect(qConGai_flow.y,mul.u2[1]);
connect(mul.u3[1],qLatGai_flow.y);
connect(att.qGai_flow,mul.y);
connect(cor.qGai_flow,mul.y);
connect(mul.y,sou.qGai_flow);
connect(eas.qGai_flow,mul.y);
connect(nor.qGai_flow,mul.y);
connect(mul.y,wes.qGai_flow);
end RefBldgSmallOffice;
Validation model with two identical zones
Information
Model with two identical thermal zones that validates that they yield the same indoor air temperatures and humidity,
and that these results are close to the values computed by EnergyPlus.
Each zone has a floor area of 900 m2,
the same door and two windows on the south side.
The internal gains for lighting, people and equipment are identical.
The zones are detached and do not shade each other.
The zones have an outside air exchange rate of 0.3 air changes per hour.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Modelica definition
model TwoIdenticalZones
extends Modelica.Icons.Example;
inner Building building(
idfName=
Modelica.Utilities.Files.loadResource(
"modelica://Buildings/Resources/Data/ThermalZones/EnergyPlus/Validation/TwoIdenticalZones/TwoIdenticalZones.idf"),
weaName=
Modelica.Utilities.Files.loadResource(
"modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos"))
;
Zone zon1(
zoneName="Thermal Zone 1")
;
Zone zon2(
zoneName="Thermal Zone 2")
;
Modelica.Blocks.Sources.CombiTimeTable datRea(
tableOnFile=true,
fileName=
Modelica.Utilities.Files.loadResource(
"modelica://Buildings/Resources/Data/ThermalZones/EnergyPlus/Validation/TwoIdenticalZones/TwoIdenticalZones.dat"),
smoothness=Modelica.Blocks.Types.Smoothness.ConstantSegments,
tableName="EnergyPlus",
columns=2:5,
y(
each unit="K",
each displayUnit="degC"),
extrapolation=Modelica.Blocks.Types.Extrapolation.HoldLastPoint)
;
Controls.OBC.UnitConversions.From_degC TAirEnePlu
;
Controls.OBC.CDL.Continuous.Gain relHumEnePlu(
k=0.01)
;
Buildings.ThermalZones.EnergyPlus.OutputVariable inf1(
name="Zone Infiltration Current Density Volume Flow Rate",
key="Thermal Zone 1");
model Zone
extends Modelica.Blocks.Icons.Block;
package Medium=
Buildings.Media.Air
;
parameter String zoneName=""
;
parameter Modelica.SIunits.MassFlowRate mOut_flow=0.3/3600*zon.V*Buildings.Media.Air.dStp
;
Modelica.Blocks.Sources.Constant qConGai_flow(
k=0)
;
Modelica.Blocks.Sources.Constant qRadGai_flow(
k=0)
;
Modelica.Blocks.Routing.Multiplex3 multiplex3_1
;
Buildings.ThermalZones.EnergyPlus.ThermalZone zon(
redeclare package Medium=Medium,
zoneName=zoneName,
nPorts=3)
;
Fluid.FixedResistances.PressureDrop duc(
redeclare package Medium=Medium,
allowFlowReversal=false,
linearized=true,
from_dp=false,
dp_nominal=100,
m_flow_nominal=47*6/3600*1.2)
;
Fluid.Sources.MassFlowSource_WeatherData bou(
redeclare package Medium=Medium,
m_flow=mOut_flow,
nPorts=1)
;
Fluid.Sources.Boundary_pT freshAir(
redeclare package Medium=Medium,
nPorts=1)
;
Modelica.Blocks.Sources.Constant qLatGai_flow(
k=0)
;
Fluid.Sensors.RelativeHumidity senRelHum(
redeclare package Medium=Medium,
warnAboutOnePortConnection=false)
;
Modelica.Blocks.Interfaces.RealOutput TAir(
final unit="K",
displayUnit="degC")
;
Modelica.Blocks.Interfaces.RealOutput TRad(
final unit="K",
displayUnit="degC")
;
Modelica.Blocks.Interfaces.RealOutput phi(
final unit="1")
;
BoundaryConditions.WeatherData.Bus weaBus
;
equation
connect(qRadGai_flow.y,multiplex3_1.u1[1]);
connect(qConGai_flow.y,multiplex3_1.u2[1]);
connect(zon.qGai_flow,multiplex3_1.y);
connect(multiplex3_1.u3[1],qLatGai_flow.y);
connect(freshAir.ports[1],duc.port_b);
connect(zon.TAir,TAir);
connect(zon.TRad,TRad);
connect(senRelHum.phi,phi);
connect(duc.port_a,zon.ports[1]);
connect(bou.ports[1],zon.ports[2]);
connect(senRelHum.port,zon.ports[3]);
connect(bou.weaBus,weaBus);
end Zone;
equation
connect(TAirEnePlu.u,datRea.y[3]);
connect(relHumEnePlu.u,datRea.y[4]);
connect(building.weaBus,zon1.weaBus);
connect(building.weaBus,zon2.weaBus);
end TwoIdenticalZones;
This example tests whether the zone mean air temperature is initialized correctly in EnergyPlus
Information
Simple test case that verifies whether the zone mean air temperature is
initialized correctly by EnergyPlus.
Extends from Buildings.ThermalZones.EnergyPlus.Examples.SingleFamilyHouse.Unconditioned (Example model with one unconditoned zone simulated in Modelica, and the other two unconditioned zones simulated in EnergyPlus).
Parameters
Type | Name | Default | Description |
Volume | VRoo | 453.1 | Room volume [m3] |
MassFlowRate | m_flow_nominal | VRoo*1.2*0.3/3600 | Nominal mass flow rate [kg/s] |
Modelica definition
Internal model for building with one thermal zone
Information
Extends from Modelica.Blocks.Icons.Block (Basic graphical layout of input/output block).
Parameters
Type | Name | Default | Description |
HeatFlux | qRad_flow | | Radiative internal heat gain [W/m2] |
HeatFlux | qSen_flow | | Convective sensible internal heat gain [W/m2] |
HeatFlux | qLat_flow | | Latent internal heat gain [W/m2] |
Modelica definition
Model of a thermal zone
Information
Extends from Modelica.Blocks.Icons.Block (Basic graphical layout of input/output block).
Parameters
Type | Name | Default | Description |
String | zoneName | "" | Name of the thermal zone |
MassFlowRate | mOut_flow | 0.3/3600*zon.V*Buildings.Med... | Outside air mass flow rate with 0.3 ACH [kg/s] |
Connectors
Type | Name | Description |
output RealOutput | TAir | Air temperature of the zone [K] |
output RealOutput | TRad | Radiative temperature of the zone [K] |
output RealOutput | phi | Relative humidity of zone air [1] |
Bus | weaBus | Bus with weather data |
Modelica definition
model Zone
extends Modelica.Blocks.Icons.Block;
package Medium=
Buildings.Media.Air
;
parameter String zoneName=""
;
parameter Modelica.SIunits.MassFlowRate mOut_flow=0.3/3600*zon.V*Buildings.Media.Air.dStp
;
Modelica.Blocks.Sources.Constant qConGai_flow(
k=0)
;
Modelica.Blocks.Sources.Constant qRadGai_flow(
k=0)
;
Modelica.Blocks.Routing.Multiplex3 multiplex3_1
;
Buildings.ThermalZones.EnergyPlus.ThermalZone zon(
redeclare package Medium=Medium,
zoneName=zoneName,
nPorts=3)
;
Fluid.FixedResistances.PressureDrop duc(
redeclare package Medium=Medium,
allowFlowReversal=false,
linearized=true,
from_dp=false,
dp_nominal=100,
m_flow_nominal=47*6/3600*1.2)
;
Fluid.Sources.MassFlowSource_WeatherData bou(
redeclare package Medium=Medium,
m_flow=mOut_flow,
nPorts=1)
;
Fluid.Sources.Boundary_pT freshAir(
redeclare package Medium=Medium,
nPorts=1)
;
Modelica.Blocks.Sources.Constant qLatGai_flow(
k=0)
;
Fluid.Sensors.RelativeHumidity senRelHum(
redeclare package Medium=Medium,
warnAboutOnePortConnection=false)
;
Modelica.Blocks.Interfaces.RealOutput TAir(
final unit="K",
displayUnit="degC")
;
Modelica.Blocks.Interfaces.RealOutput TRad(
final unit="K",
displayUnit="degC")
;
Modelica.Blocks.Interfaces.RealOutput phi(
final unit="1")
;
BoundaryConditions.WeatherData.Bus weaBus
;
equation
connect(qRadGai_flow.y,multiplex3_1.u1[1]);
connect(qConGai_flow.y,multiplex3_1.u2[1]);
connect(zon.qGai_flow,multiplex3_1.y);
connect(multiplex3_1.u3[1],qLatGai_flow.y);
connect(freshAir.ports[1],duc.port_b);
connect(zon.TAir,TAir);
connect(zon.TRad,TRad);
connect(senRelHum.phi,phi);
connect(duc.port_a,zon.ports[1]);
connect(bou.ports[1],zon.ports[2]);
connect(senRelHum.port,zon.ports[3]);
connect(bou.weaBus,weaBus);
end Zone;