A walk through the BESTEST cases
The validation page lists every KPI of every case. This page takes a few cases and
tells, for each of them, what the case is, what the six reference programs of ASHRAE Standard
140-2020 (BSIMAC, CSE, DeST, EnergyPlus, ESP-r and TRNSYS) expect, how the trano YAML describes
the case and how the results of each library compare with that expectation. The YAML fragments
are cut out of the generated case files in validation/bestest/cases/, the tables and the charts
are rendered from the reference data and the last results, with
python -m validation.bestest report --docs.
A band is the range a result must fall in: the acceptance limits of the standard for the annual loads, and the spread of the reference programs widened by 5 % of the largest peak (loads) or by 1 K (temperatures) otherwise. In the result tables, ✓ marks a value inside its band, ~ a known deviation documented on the validation page and ✗ a value outside its band. Buildings and IDEAS gate the test suite; the reduced-order (AixLib) and ISO 13790 zones are shown for information.
Case 600: Base case, low mass
The base case: a single rectangular zone of 8 m by 6 m by 2.7 m in Denver (cold, sunny, 1609 m above sea level) with light-weight walls (wood siding, fibreglass, plasterboard), a light roof and a timber floor over 1 m of insulation whose underside sees the outdoor air. The south wall carries 12 m2 of clear double glazing without any frame. Infiltration is 0.414 air changes per hour (0.5 at sea level, corrected for the altitude), the internal gains are 200 W around the clock (60 % radiant, 40 % convective) and an ideal system keeps the air between 20 degC (heating) and 27 degC (cooling) with unlimited capacity.
What the reference programs expect
| KPI | BSIMAC | CSE | DeST | EnergyPlus | ESP-r | TRNSYS | Band |
|---|---|---|---|---|---|---|---|
| annual heating [MWh] | 4.050 | 3.993 | 4.047 | 4.324 | 4.362 | 4.504 | 3.750 to 4.980 (limits of the standard) |
| annual cooling [MWh] | 5.822 | 5.913 | 5.432 | 6.027 | 6.162 | 5.780 | 5.000 to 6.830 (limits of the standard) |
| peak heating [kW] | 3.255 | 3.020 | 3.035 | 3.204 | 3.228 | 3.359 | 2.852 to 3.527 (programs ± tolerance) |
| peak cooling [kW] | 5.650 | 6.481 | 5.422 | 6.352 | 6.193 | 6.046 | 5.098 to 6.805 (programs ± tolerance) |
Winter nights drive the heating, so the heating peak falls on the coldest hours of January or December. The cooling peak falls on a sunny winter day too: the low sun pours through the south glazing and the light envelope has nothing to store it in, so the zone hits 27 degC within a few hours. The annual loads must fall inside the acceptance limits of the standard; the peaks must fall inside the spread of the reference programs widened by 5 % of the largest peak. The hourly loads of 1 February are compared as well: a cold clear day on which the zone switches from heating at night to cooling around noon.
How the YAML describes it
The zone is a space with the infiltration variant, whose ach parameter is the air change rate; linearize_emissive_power: false keeps the long-wave exchange non-linear as the standard asks. The floor is a floor_on_grounds boundary with the outdoor_air variant (its outer surface follows the outdoor dry-bulb temperature), the roof is an external wall with the ceiling tilt. The 200 W of internal gains are an occupancy element occupied all day, with the radiant, convective and latent gains per square metre of floor. The ideal system is the ideal_heating_cooling emission: its set points are day schedules in kelvin (time since midnight in seconds, value) repeated every day, and its capacities are 1 MW so that the set points are always met. The weather is the Denver TMY3 file shipped with Buildings; the atmospheric pressure is read from the file, so that the air density, and with it the infiltration mass flow, is that of the site. Every material has 18 states per 0.2 m of layer (number_of_states), the discretisation of Buildings' own BESTEST models.
weather:
parameters:
path: Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/weatherdata/USA_CO_Denver.Intl.AP.725650_TMY3.mos")
atmospheric_pressure_source: Buildings.BoundaryConditions.Types.DataSource.File
constructions[id=LIGHT_WALL:001]:
id: LIGHT_WALL:001
layers:
- material: WOOD_SIDING:001
thickness: 0.009
- material: FIBERGLASS:001
thickness: 0.066
- material: PLASTERBOARD:001
thickness: 0.012
spaces[0].parameters:
spaces[0].external_boundaries.windows:
- surface: 12.0
azimuth: 0.0
tilt: wall
construction: DOUBLE_CLEAR:001
width: 6.0
height: 2.0
frame_fraction: 0.001
spaces[0].occupancy:
spaces[0].emissions:
- ideal_heating_cooling:
id: HVAC:001
parameters:
heating_setpoint_schedule: '[0, 293.15]'
cooling_setpoint_schedule: '[0, 300.15]'
maximum_heating_power: 1000000.0
maximum_cooling_power: 1000000.0
How trano fares
| KPI | Band | Buildings | IDEAS | ISO 13790 | reduced order |
|---|---|---|---|---|---|
| annual heating [MWh] | 3.750 to 4.980 | 4.449 ✓ | 4.541 ✓ | 3.122 ✗ | 5.873 ✗ |
| annual cooling [MWh] | 5.000 to 6.830 | 5.973 ✓ | 6.265 ✓ | 5.298 ✓ | 3.883 ✗ |
| peak heating [kW] | 2.852 to 3.527 | 3.215 ✓ | 3.314 ✓ | 3.099 ✓ | 3.731 ✗ |
| peak cooling [kW] | 5.098 to 6.805 | 6.187 ✓ | 6.545 ✓ | 4.870 ✗ | 4.113 ✗ |
- Buildings: 4 of 4 KPIs inside their band.
- IDEAS: 4 of 4 KPIs inside their band.
- ISO 13790: 2 of 4 KPIs inside their band, outside: annual heating 3.122 MWh against 3.750 to 4.980; peak cooling 4.870 kW against 5.098 to 6.805.
- reduced order: 0 of 4 KPIs inside their band, outside: annual heating 5.873 MWh against 3.750 to 4.980; annual cooling 3.883 MWh against 5.000 to 6.830; peak heating 3.731 kW against 2.852 to 3.527; peak cooling 4.113 kW against 5.098 to 6.805.
Case 600FF: 600 free floating
Case 600 without any heating or cooling: the temperature of the zone floats freely under the weather and the internal gains.
What the reference programs expect
| KPI | BSIMAC | CSE | DeST | EnergyPlus | ESP-r | TRNSYS | Band |
|---|---|---|---|---|---|---|---|
| maximum temperature [degC] | 63.400 | 68.400 | 65.000 | 63.800 | 64.600 | 62.400 | 61.400 to 69.400 (programs ± tolerance) |
| minimum temperature [degC] | -9.900 | -12.900 | -13.500 | -12.600 | -13.500 | -13.800 | -14.800 to -8.900 (programs ± tolerance) |
| mean temperature [degC] | 26.100 | 25.600 | 25.300 | 24.900 | 25.300 | 24.300 | 23.300 to 27.100 (programs ± tolerance) |
The light envelope stores next to nothing, so the zone follows the weather closely: it drops well below freezing on winter nights and climbs above 60 degC on sunny days, with the glazing turning the zone into a greenhouse. The standard compares the maximum, minimum and annual mean temperature with the spread of the reference programs (widened by 1 K here), and the hourly temperatures of 1 February.
How the YAML describes it
The YAML is that of case 600 without the emissions list: a space without an emission is free-floating. The occupancy stays, since the 200 W of internal gains are part of the case.
spaces[0].parameters:
spaces[0].occupancy:
How trano fares
| KPI | Band | Buildings | IDEAS | ISO 13790 | reduced order |
|---|---|---|---|---|---|
| maximum temperature [degC] | 61.400 to 69.400 | 63.318 ✓ | 66.086 ✓ | 54.174 ✗ | 62.110 ✓ |
| minimum temperature [degC] | -14.800 to -8.900 | -12.847 ✓ | -13.193 ✓ | -7.447 ✗ | -14.177 ✓ |
| mean temperature [degC] | 23.300 to 27.100 | 24.664 ✓ | 25.109 ✓ | 26.564 ✓ | 20.451 ✗ |
- Buildings: 3 of 3 KPIs inside their band.
- IDEAS: 3 of 3 KPIs inside their band.
- ISO 13790: 1 of 3 KPIs inside their band, outside: maximum temperature 54.174 degC against 61.400 to 69.400; minimum temperature -7.447 degC against -14.800 to -8.900.
- reduced order: 2 of 3 KPIs inside their band, outside: mean temperature 20.451 degC against 23.300 to 27.100.
Case 900: Base case, high mass
Case 600 with heavy constructions: the walls are concrete blocks behind foam insulation and wood siding, the floor is a concrete slab over the insulation. The U-values are the same as in case 600; only the thermal mass changes.
What the reference programs expect
| KPI | BSIMAC | CSE | DeST | EnergyPlus | ESP-r | TRNSYS | Band |
|---|---|---|---|---|---|---|---|
| annual heating [MWh] | 1.726 | 1.379 | 1.591 | 1.664 | 1.585 | 1.814 | 1.040 to 2.280 (limits of the standard) |
| annual cooling [MWh] | 2.714 | 2.464 | 2.383 | 2.489 | 2.488 | 2.267 | 2.350 to 2.600 (limits of the standard) |
| peak heating [kW] | 2.551 | 2.443 | 2.453 | 2.687 | 2.633 | 2.778 | 2.304 to 2.917 (programs ± tolerance) |
| peak cooling [kW] | 3.039 | 3.376 | 2.556 | 3.040 | 2.896 | 2.940 | 2.387 to 3.545 (programs ± tolerance) |
The mass stores the solar gains of the day and gives them back at night, so both the heating and the cooling loads drop a lot against case 600, the cooling by more than half. The peaks drop too, and the heating peak moves to the end of long cold spells rather than to the first cold night. The hourly loads of 1 February show a much smoother profile than case 600.
How the YAML describes it
Only the constructions change: the walls and the floor refer to the heavy constructions, whose concrete layers carry the mass. For the libraries that aggregate the envelope (the reduced-order and ISO 13790 zones), trano derives the mass class of the zone from the heat capacity of these layers.
constructions[id=HEAVY_WALL:001]:
id: HEAVY_WALL:001
layers:
- material: WOOD_SIDING:001
thickness: 0.009
- material: FOAM_INSULATION:001
thickness: 0.0615
- material: CONCRETE_BLOCK:001
thickness: 0.1
constructions[id=HEAVY_FLOOR:001]:
id: HEAVY_FLOOR:001
layers:
- material: FLOOR_INSULATION:001
thickness: 1.007
- material: CONCRETE_SLAB:001
thickness: 0.08
How trano fares
| KPI | Band | Buildings | IDEAS | ISO 13790 | reduced order |
|---|---|---|---|---|---|
| annual heating [MWh] | 1.040 to 2.280 | 1.718 ✓ | 1.763 ✓ | 1.803 ✓ | 5.263 ✗ |
| annual cooling [MWh] | 2.350 to 2.600 | 2.395 ✓ | 2.599 ✓ | 3.581 ✗ | 3.184 ✗ |
| peak heating [kW] | 2.304 to 2.917 | 2.668 ✓ | 2.765 ✓ | 2.880 ✓ | 3.726 ✗ |
| peak cooling [kW] | 2.387 to 3.545 | 2.974 ✓ | 3.171 ✓ | 3.532 ✓ | 3.631 ✗ |
- Buildings: 4 of 4 KPIs inside their band.
- IDEAS: 4 of 4 KPIs inside their band.
- ISO 13790: 3 of 4 KPIs inside their band, outside: annual cooling 3.581 MWh against 2.350 to 2.600.
- reduced order: 0 of 4 KPIs inside their band, outside: annual heating 5.263 MWh against 1.040 to 2.280; annual cooling 3.184 MWh against 2.350 to 2.600; peak heating 3.726 kW against 2.304 to 2.917; peak cooling 3.631 kW against 2.387 to 3.545.
Case 640: 600 with a night heating setback
Case 600 with a night set-back of the heating: the heating set point is 10 degC from 23:00 to 07:00 and 20 degC otherwise. The cooling set point stays at 27 degC.
What the reference programs expect
| KPI | BSIMAC | CSE | DeST | EnergyPlus | ESP-r | TRNSYS | Band |
|---|---|---|---|---|---|---|---|
| annual heating [MWh] | 2.682 | 2.403 | 2.619 | 2.662 | 2.654 | 2.653 | 1.580 to 3.760 (limits of the standard) |
| annual cooling [MWh] | 5.804 | 5.644 | 5.237 | 5.763 | 5.893 | 5.477 | 4.440 to 6.860 (limits of the standard) |
| peak heating [kW] | 4.633 | 4.222 | 4.658 | 4.559 | 4.101 | 4.039 | 3.806 to 4.891 (programs ± tolerance) |
| peak cooling [kW] | 5.650 | 6.429 | 5.365 | 6.297 | 6.127 | 5.967 | 5.044 to 6.750 (programs ± tolerance) |
The zone cools down at night, so the annual heating drops against case 600. The heating peak rises though: at 07:00 the system has to bring a cold zone back to 20 degC at once, and this morning pick-up is the largest load of the year, well above the peak of case 600.
How the YAML describes it
The heating set point becomes a day schedule with the set-back: pairs of time since midnight and set point in kelvin, held constant between two rows, with the step written as two rows at the same time. The schedule repeats every day.
spaces[0].emissions:
- ideal_heating_cooling:
id: HVAC:001
parameters:
heating_setpoint_schedule: '[0, 283.15; 25200, 283.15; 28800, 293.15; 82800, 293.15; 82800, 283.15;
86400, 283.15]'
cooling_setpoint_schedule: '[0, 300.15]'
maximum_heating_power: 1000000.0
maximum_cooling_power: 1000000.0
How trano fares
| KPI | Band | Buildings | IDEAS | ISO 13790 | reduced order |
|---|---|---|---|---|---|
| annual heating [MWh] | 1.580 to 3.760 | 2.715 ✓ | 2.769 ✓ | 1.879 ✓ | 3.765 ✗ |
| annual cooling [MWh] | 4.440 to 6.860 | 5.725 ✓ | 6.009 ✓ | 4.942 ✓ | 3.791 ✗ |
| peak heating [kW] | 3.806 to 4.891 | 4.356 ✓ | 4.370 ✓ | 4.350 ✓ | 3.445 ✗ |
| peak cooling [kW] | 5.044 to 6.750 | 6.138 ✓ | 6.491 ✓ | 4.870 ✗ | 4.103 ✗ |
- Buildings: 4 of 4 KPIs inside their band.
- IDEAS: 4 of 4 KPIs inside their band.
- ISO 13790: 3 of 4 KPIs inside their band, outside: peak cooling 4.870 kW against 5.044 to 6.750.
- reduced order: 0 of 4 KPIs inside their band, outside: annual heating 3.765 MWh against 1.580 to 3.760; annual cooling 3.791 MWh against 4.440 to 6.860; peak heating 3.445 kW against 3.806 to 4.891; peak cooling 4.103 kW against 5.044 to 6.750.
Case 650: 600 with night ventilation and no heating
Case 600 without heating: the cooling set point is 27 degC from 07:00 to 18:00 and off otherwise, and a fan blows 1700 m3/h of outdoor air through the zone from 18:00 to 07:00 without adding any heat.
What the reference programs expect
| KPI | BSIMAC | CSE | DeST | EnergyPlus | ESP-r | TRNSYS | Band |
|---|---|---|---|---|---|---|---|
| annual heating [MWh] | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 to 0.000 (limits of the standard) |
| annual cooling [MWh] | 4.629 | 4.654 | 4.186 | 4.817 | 4.945 | 4.632 | 3.460 to 5.880 (limits of the standard) |
| peak heating [kW] | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 to 0.000 (programs ± tolerance) |
| peak cooling [kW] | 5.648 | 6.290 | 5.045 | 6.138 | 5.961 | 5.797 | 4.731 to 6.604 (programs ± tolerance) |
The annual heating is zero by construction. The night ventilation flushes the zone with cold outdoor air, so the cooling drops against case 600 but by less than the free cooling would suggest: the zone is light and heats up again as soon as the sun rises. The cooling peak stays close to that of case 600, since it occurs in the afternoon, long after the fan stopped.
How the YAML describes it
The fan is the ventilation_schedule parameter of the space: a day schedule of outdoor air mass flow in kg/s brought in on top of the infiltration, at the outdoor temperature and humidity, 1409 kg/h being 1700 m3/h at the air density of the site. The heating is switched off with a set point of 0 degC and a capacity of zero; the cooling set point is 100 degC outside the cooling hours.
spaces[0].parameters:
floor_area: 48.0
average_room_height: 2.7
ach: 0.414
linearize_emissive_power: 'false'
ventilation_schedule: '[0, 0.391389; 25200, 0.391389; 25200, 0; 64800, 0; 64800, 0.391389; 86400, 0.391389]'
spaces[0].emissions:
- ideal_heating_cooling:
id: HVAC:001
parameters:
heating_setpoint_schedule: '[0, 273.15]'
cooling_setpoint_schedule: '[0, 373.15; 25200, 373.15; 25200, 300.15; 64800, 300.15; 64800, 373.15;
86400, 373.15]'
maximum_heating_power: 0.0
maximum_cooling_power: 1000000.0
How trano fares
| KPI | Band | Buildings | IDEAS |
|---|---|---|---|
| annual heating [MWh] | 0.000 to 0.000 | 0.000 ✓ | 0.000 ✓ |
| annual cooling [MWh] | 3.460 to 5.880 | 4.802 ✓ | 5.067 ✓ |
| peak heating [kW] | 0.000 to 0.000 | 0.000 ✓ | 0.000 ✓ |
| peak cooling [kW] | 4.731 to 6.604 | 5.949 ✓ | 6.324 ✓ |
- Buildings: 4 of 4 KPIs inside their band.
- IDEAS: 4 of 4 KPIs inside their band.
- ISO 13790: the case is not supported.
- reduced order: the case is not supported.
Case 610: 600 with a south overhang
Case 600 with a 1 m deep horizontal overhang above the south window, placed 0.5 m above the top of the glazing and running the full width of the wall.
What the reference programs expect
| KPI | BSIMAC | CSE | DeST | EnergyPlus | ESP-r | TRNSYS | Band |
|---|---|---|---|---|---|---|---|
| annual heating [MWh] | 4.163 | 4.066 | 4.144 | 4.375 | 4.527 | 4.592 | 3.610 to 5.270 (limits of the standard) |
| annual cooling [MWh] | 4.299 | 4.382 | 4.173 | 4.333 | 4.233 | 4.117 | 2.740 to 6.030 (limits of the standard) |
| peak heating [kW] | 3.166 | 3.021 | 3.039 | 3.192 | 3.233 | 3.360 | 2.853 to 3.528 (programs ± tolerance) |
| peak cooling [kW] | 5.466 | 6.432 | 5.331 | 6.135 | 5.934 | 5.868 | 5.009 to 6.754 (programs ± tolerance) |
The overhang cuts the high summer sun and leaves the low winter sun alone, so the annual cooling drops noticeably against case 600 while the heating hardly moves. The cooling peak drops a little: it occurs in winter, when the overhang shades only part of the window.
How the YAML describes it
The overhang is an overhang object of the window: its depth, the gap between the top of the window and the overhang, and how far it extends past the window on each side. Side fins (cases 630 and 930) are a side_fins object in the same spirit.
spaces[0].external_boundaries.windows:
- surface: 12.0
azimuth: 0.0
tilt: wall
construction: DOUBLE_CLEAR:001
width: 6.0
height: 2.0
frame_fraction: 0.001
overhang:
depth: 1.0
gap: 0.5
width_left: 0.5
width_right: 0.5
How trano fares
| KPI | Band | Buildings |
|---|---|---|
| annual heating [MWh] | 3.610 to 5.270 | 4.475 ✓ |
| annual cooling [MWh] | 2.740 to 6.030 | 4.810 ✓ |
| peak heating [kW] | 2.853 to 3.528 | 3.216 ✓ |
| peak cooling [kW] | 5.009 to 6.754 | 6.082 ✓ |
- Buildings: 4 of 4 KPIs inside their band.
- IDEAS: the case is not supported.
- ISO 13790: the case is not supported.
- reduced order: the case is not supported.
Case 960: Low mass zone with an unconditioned high mass sun-space
A two-zone case: the back zone of case 600 keeps its light envelope but loses its windows, and a 2 m deep unconditioned sun-space with heavy walls, a concrete slab and the 12 m2 of south glazing is attached to its south wall. The two zones share a 0.2 m concrete common wall. The back zone is conditioned between 20 and 27 degC; the sun-space floats freely.
What the reference programs expect
| KPI | CSE | DeST | EnergyPlus | ESP-r | TRNSYS | Band |
|---|---|---|---|---|---|---|
| annual heating [MWh] | 2.522 | 2.771 | 2.689 | 2.624 | 2.860 | 2.000 to 3.400 (limits of the standard) |
| annual cooling [MWh] | 0.926 | 0.909 | 0.907 | 0.950 | 0.789 | 0.620 to 1.810 (limits of the standard) |
| peak heating [kW] | 2.132 | 2.085 | 2.259 | 2.201 | 2.300 | 1.970 to 2.415 (programs ± tolerance) |
| peak cooling [kW] | 1.377 | 1.367 | 1.480 | 1.403 | 1.338 | 1.264 to 1.554 (programs ± tolerance) |
| maximum temperature [degC] | 48.900 | 53.200 | 49.900 | 49.500 | 48.100 | 47.100 to 54.200 (programs ± tolerance) |
| minimum temperature [degC] | 8.000 | 6.700 | 5.100 | 5.000 | 4.200 | 3.200 to 9.000 (programs ± tolerance) |
| mean temperature [degC] | 28.600 | 29.500 | 27.700 | 27.700 | 26.800 | 25.800 to 30.500 (programs ± tolerance) |
The sun-space collects the solar gains, stores them in its mass and conducts part of them through the common wall into the back zone, so the back zone needs less heating than case 600 and very little cooling. The standard checks the loads of the back zone and the maximum, minimum and mean temperature of the sun-space.
How the YAML describes it
The sun-space is a second space with occupancy: {variant: none} (no internal gains at all) and no emission. The common wall is an internal_walls entry between the two spaces; trano infers the rest of the topology from the boundaries of each space.
spaces[1]:
id: SUNSPACE:001
variant: infiltration
parameters:
floor_area: 16.0
average_room_height: 2.7
ach: 0.414
linearize_emissive_power: 'false'
external_boundaries:
external_walls:
- surface: 21.6
azimuth: 0.0
tilt: wall
construction: HEAVY_WALL:001
- surface: 5.4
azimuth: -1.570796
tilt: wall
construction: HEAVY_WALL:001
- surface: 5.4
azimuth: 1.570796
tilt: wall
construction: HEAVY_WALL:001
- surface: 16.0
azimuth: 0.0
tilt: ceiling
construction: ROOF:001
floor_on_grounds:
- surface: 16.0
construction: HEAVY_FLOOR:001
variant: outdoor_air
windows:
- surface: 12.0
azimuth: 0.0
tilt: wall
construction: DOUBLE_CLEAR:001
width: 6.0
height: 2.0
frame_fraction: 0.001
occupancy:
variant: none
internal_walls:
How trano fares
| KPI | Band | Buildings | IDEAS |
|---|---|---|---|
| annual heating [MWh] | 2.000 to 3.400 | 2.588 ✓ | 2.695 ✓ |
| annual cooling [MWh] | 0.620 to 1.810 | 0.950 ✓ | 0.950 ✓ |
| peak heating [kW] | 1.970 to 2.415 | 2.104 ✓ | 2.217 ✓ |
| peak cooling [kW] | 1.264 to 1.554 | 1.475 ✓ | 1.510 ✓ |
| maximum temperature [degC] | 47.100 to 54.200 | 48.036 ✓ | 51.310 ✓ |
| minimum temperature [degC] | 3.200 to 9.000 | 4.160 ✓ | 4.133 ✓ |
| mean temperature [degC] | 25.800 to 30.500 | 26.693 ✓ | 28.027 ✓ |
- Buildings: 7 of 7 KPIs inside their band.
- IDEAS: 7 of 7 KPIs inside their band.
- ISO 13790: the case is not supported.
- reduced order: the case is not supported.