Geometric LOD study: run plan¶
Status: In progress: the tooling of §3 and the coplanar merge (D-185 to D-192) released in
v1.6.0(D-197); §3 built onclaude/lod-study-scripts(D-185), R1 smoke run (§4); the proposals the build changed are in §7 for the owner (D-186); the R1 warnings' causes in §8 (D-187, accepted with its runner policy, D-189); publication on the atlas site in §9 (D-188); R2 pilot run, its gate not met for the small hotel (§4, D-190); the IDF writer merges coplanar surfaces (D-191), R1 and R2 run again, R2's gate met (§4, D-192); R3 and R4 run, R4's small-hotel failures for the owner (§4, D-193); R5 serial timing pass run, its gate not met (§4, D-200); the owner-delegated decisions on R4 and R5 (D-201, D-202); R6 report, consolidated recommendations, and methodology written (§4, §9, D-203) · Date: 2026-10-29 · Study: "How Much Thermal Zoning Detail Is Enough?" Basis: methodology handoverD:/decks/20261026-geo-lod-probe/methodology-handover-findings.md§9–§10, BEMGen origin/main0b687e7(v1.5.0 + D-176), atlas releasev2.0.0. Owner decision (2026-10-29): no stochastic schedules; the study uses the prototypes' deterministic values.
1. Design in one paragraph¶
Each test case is one DOE/PNNL prototype building, generated by BEMGen's DOE generator at the prototype's own dimensions. Its zones take the prototype's own atlas 2.0.0 programs, with deterministic ruleset schedules. The envelope is the atlas 90.1 construction set for that vintage and climate zone, and the weather file is the prototype's representative city for the zone. The reference site is the prototype's full zoning. The test sites are the zoning simplifications, while geometry, programs, envelope and weather stay fixed (D-133). Using the prototypes keeps geometry, programs and constructions from one consistent source, which is what the atlas records. The 17 synthetic typologies are a later secondary study.
2. The 14 handover decisions, answered¶
Each answer is marked O (the owner decided it) or P (proposed in this plan; the owner may override).
| # | Decision | Answer |
|---|---|---|
| 1 | Freeze | P Atlas v2.0.0 (96a2e928), contracts Program JSON 5.4.0 filled, unified construction 3.1.0, detailed 4.3.0, mass 1.1.0. BEMGen: main after the integration merge and the §3 changes, tagged v1.6.0 as the study build. EnergyPlus 26.2.0 (4bd7a1f26f). |
| 2 | Contract gap | Closed by D-172 (BEMGen reads 5.4.0/4.3.0/3.1.0). |
| 3 | Program assignment | O/P Per-zone atlas prototype programs through DoeProgramMap, using the prototype's own space types. The illustrative DOE preset loads (D-171) are not used. The program mix is fixed per prototype; it is not an axis. |
| 4 | Constructions, infiltration | P The atlas 90.1 unified set for the vintage and climate zone, scope building, with no Fill-From-Example. Infiltration is the set's own fixed ACH, i.e. the prototype's value. IECC sets are out of scope, because they cannot be converted. The mass ledger is reported, not varied. |
| 5 | Glazing | P The prototype's WWR, from the DOE layout record per program key and orientation (window_to_wall_ratio: record, the default), since the atlas 90.1 programs carry no fenestration; program takes the JSON's fenestration where it has one. There is no WWR axis. |
| 6 | Ventilation, hot water, holidays | P Ventilation as the program JSON defines it. Service hot water and HVAC are excluded (ideal loads, D-157). Holidays are empty ([]), recorded, because holiday days do not interact with zoning. |
| 7 | Geometry | P The prototype dimensions, storeys and floor heights from each DOE record. Orientations are 0° and 45°. The reference level is the full DOE zoning (NoSimplification + Stack, IWHT and FHT on). The eleven prototypes are one per DOE generator (research/lod-study/study.json). |
| 8 | Zoning space | P Main study: the 16 simplifier × stacker cells with IWHT and FHT both on, plus PerimeterCore at 3.0 m and 4.57 m with each of the four stackers, 24 zonings, since a spec's zonings are a full factorial (§7). IWHT/FHT is a separate sub-study (R4). Degenerate cells are deduplicated after the run by zone-geometry signature and annual sensible totals (mock-1 found about 40 % duplicates, R1 26 %), and the rule is reported. |
| 9 | Conditioned area | P Every error is reported with the change in conditioned floor area. A sub-analysis covers only the area-conserving cells. The circulation zones keep their prototype conditioning. |
| 10 | Weather | P The prototypes' representative TMY3 cities: 2A Tampa, 2B Tucson, 3C San Francisco, 4A New York, 5A Buffalo, 7 International Falls (registered as 7A, the atlas's label). Files are pinned by SHA-256 in research/lod-study/weather.lock.json and registry.json. The Sterling 4A failure is diagnosed in R1 (§4): it is not the file's, and three of the six climates warn alike. |
| 11 | Schedules | O Deterministic prototype ruleset schedules; no seed, no draws. |
| 12 | Sampling | P Full factorial; it is cheap enough (§5). |
| 13 | Metrics | P experiment-outputs.md §10 as decided in D-157. Ideal sensible heating and cooling are primary; latent is reported separately via ComparisonEnergyReport, not mixed in. The near-zero guard is 0.01 W/m². |
| 14 | Cost protocol | P A separate serial timing pass: --parallel 1 --timing-repeats 3 --timing-test-cases 12 on an idle i7-14700F (20 physical cores, 31.8 GB), with CPU and peak committed memory from schema 7 site_timing. |
3. Changes needed before the scripts can run¶
All six were built on claude/lod-study-scripts (D-185, scripts/lod-study (scripts/lod-study/README.md)).
- Climate zone and context reach the program import.
scripts/TestSuiteGenerator/Inputs/ProgramFiles.cs:138-147should passClimateZone(from the test case's weather) andContext, so that climate-dependent values stop falling back withClimateZoneNotGiven. It should also use the JSONfenestrationwhen the spec sayswwr: program. - The DOE generators enter the suite registry (
Registry/GeneratorRegistry.cs), with adoe:spec block: prototype, vintage and orientation, plus the parameters from the DOE record. Zones take atlas program IDs throughDoeProgramMapand the integration branch'sDoeReferenceProgramSelection. - A pinned weather set. A script fetches the six EPWs, checks their SHA-256 and writes
D:/bemgen-weather/registry.json. The pins are committed in the repo. - Study specs and a driver.
research/lod-study/specs/{smoke,pilot,main,ht,timing}.yamlandscripts/lod-study/run.ps1, which runs generate → run → merge → report with--resume. - Dedup and report script. It reads the central DuckDB, applies the dedup rule from decision 8, and writes the §10 metric tables per prototype, climate and zoning.
- Re-made inputs. The mock-1 and pilot specs use program JSON 2.0.0 and
discard_ep_results, which v1.5.0 refuses, so none of them is reused.
The integration branch's research gates run as preflight: floor research eligibility, exact composition, and
program signature, which together check that a zoning keeps programs and controls equal. The floor gate runs in the
generator's report mode, which records each site's verdict without blocking it: in require mode it blocks every zoning
that merges zones of different programs, 16 of the medium office's 24 (§7). The exact-composition screen is not run by the
generator.
4. Stages¶
| Stage | Content | Gate to pass |
|---|---|---|
| R0 Freeze | §3 changes merged, verify.ps1 green, BEMGen v1.6.0 tagged, weather pinned |
clean build; pins match |
| R1 Smoke | 1 prototype (medium office) × 3C × 0° × all zonings | references pass; internal loads equal reference hour by hour; Sterling/NY 4A diagnosed. Run 2026-10-29, below. |
| R2 Pilot | 11 prototypes × {3C, 5A} × 0° × main zonings | ≥ 99 % sites complete; failure triage logged; dedup rule fixed. Run 2026-10-29, below: 392 of 440 written sites succeed (89 %), gate not met (the small hotel's references); run again with the coplanar merge (D-191, D-192): 440 of 440 succeed, gate met |
| R3 Main | 11 × 6 climates × 2 vintages (90.1-2004, 90.1-2019) × 2 orientations × main zonings | complete; dedup applied. Run 2026-10-29 (90.1-2007 and 90.1-2019, D-186), below: 5 280 of 5 280 written sites succeed, dedup applied; a zoning meets the threshold in 218 of 264 cells (D-193) |
| R4 IWHT/FHT | R2's matrix × the 4 heat-transfer settings | complete. Run 2026-10-29, below: 1 736 of 1 760 written sites succeed (98.6 %); the 24 failures are the small hotel's unconditioned elevator and mechanical rooms with interior walls adiabatic, for the owner (D-193) |
| R5 Timing | 12 cases, serial, 3 repeats | coefficient of variation per site < 5 %. Run 2026-10-29, below: 12 test cases, 218 sites × 3 repeats; 192 of 218 sites pass, gate not met (26 miss, at most 12.9 %); for the owner (D-200) |
| R6 Report | metric tables and figures for the methodology section | owner review. Written 2026-10-29, below: the study report (research/lod-study/report/2026-10-29-lod-study-report.md), the methodology (research/lod-study/report/2026-10-29-lod-study-methodology.md), and the consolidated research/lod-study/results/ (D-203); the repeat timing check of D-202 run |
The stop rule: if the same kind of failure recurs after about three attempts, stop and report.
R1, 2026-10-29 (run.ps1 -Stage smoke -Parallel 20, EnergyPlus 26.2.0 4bd7a1f26f, i7-14700F):
- The reference succeeded. 19 of the 23 test sites succeeded, and all 19 pass the pairing check: the internal-load end uses equal
the reference's hour by hour within
ToleranceSettings.LoadEquals, largest deviation 7.3 × 10⁻¹¹ W. - The other four completed but failed the runner's verdict on one EnergyPlus warning not on its expected list,
FixViewFactors("view factors not complete"), for the Single Zone Per Floor Type and Single Zone Building stackers over No Simplification and Semantic Merge. (Single Zone Building also gives "Entered Zone Floor Area(s) differ …", which is on the list, ADR-010.) The cause is in §8. - Deduplication dropped 5 of the 19 (3 groups); 14 test sites are in the metric table. The floor gate found 8 of 24 sites eligible.
- EnergyPlus elapsed time per site 2.9 to 37.5 s, median 6.5 s, reference 24.1 s; processor time median 5.4 s, at most 37.5 s; wall clock of the whole run about 1 min. These are 20-at-a-time runs, so not runtime results (R5).
- 4A. The mock-1 failure is EnergyPlus's one warning
Temperature out of range [-100. to 200.] (PsyPsatFnTemp)fromPsyTwbFnTdbWPbin one time step of the year. It is not a defect of the Sterling file: the medium office reference reproduces it with Sterling exactly as mock-1 had it on the linear plan (03/15 19:50, input −124.32 °C), and with the pinned New York JFK file at 03/12 11:50 (−170.82 °C); the weather records there are ordinary (4 to 6 °C dry-bulb, −9 to −11 °C dew point, humidity ratio about 0.0017 to 0.0019). The reference alone in the six pinned climates warns the same way in 2B Tucson (11/17 00:30) and 7A International Falls (04/18 22:20) and runs clean in 2A, 3C, and 5A. The cause, found afterwards, is in §8.
R2, 2026-10-29 (run.ps1 -Stage pilot -Parallel 20, 90.1-2019, 3C and 5A, 0°, the 24 main zonings, floor gate in report mode,
the expected-warning policy of D-189; suite lod-pilot-20261029-033239, run run_20261029-033311):
- Suite. 22 test cases written, 528 sites planned: 440 written, 88
Invalidby design. Perimeter Core, Single Zone Per Floor, Single Zone Per Floor Type, and Single Zone Building do not support multiplied rooms (ADR-026), which leaves the large hotel and the hospital 6 of 24 zonings each (36 + 36 sites); the outpatient's wings are narrower than twice either perimeter depth (PlanTooNarrow, 16 sites). - Run. 392 of 440 succeed, 89 %. The two small-hotel references completed but failed the verdict on one
FixViewFactorswarning forL3/CORRIDORFLR4, a 24-surface corridor of the unmerged reference, which EnergyPlus prints without the reciprocity line that D-189's entry bounds, so it stays unexpected; their 46 test sites were not run. The R2 gate (≥ 99 %) is not met until the owner decides on that warning. Every succeeded test site passes the pairing check (372 of 372, largest internal-load deviation 2.9 × 10⁻¹⁰ W). Eight sites passed withMergedZoneViewFactors; no site in 3C or 5A gaveOutdoorWetBulbIteration. - Fixed on the way (attempt 1,
pilot-attempt1): the hospital's reference was refused by Convert2IDF (DegeneratePolygononL1/OR1_Flr_2/F3, a floor of two rectangles meeting at one vertex), and the restaurant, primary school, and small hotel references crashed EnergyPlus on internal masses of about 10⁻⁷ m², the wall or floor capacity shortfall of rounding when a set's budget equals what the record represents. Both fixed test-first (D-190); the pilot was then written and run again from the start. - EnergyPlus time per site (20 at a time, so not runtime results; median, longest, reference mean, s): full-service restaurant 2.9, 6.1, 4.7; hospital 53.1, 64.5, 63.2; large hotel 26.1, 58.8, 58.4; medium office 6.9, 72.6, 65.4; outpatient 13.2, 180.9, 114.7; primary school 6.4, 28.8, 26.8; small hotel (references only) 78.9; stand-alone retail 2.7, 7.3, 7.2; strip mall 2.6, 13.1, 12.5; supermarket 2.7, 7.9, 7.8; warehouse 2.7, 5.8, 5.6. The whole run took 7 min 51 s.
- Deduplication (the rule of §3.5, unchanged): 110 groups, 210 of the 372 succeeded test sites dropped (56 %), most of them the single-zone stackers over the small single-storey prototypes.
- Recommendations (
lod-recommendations.json, the default threshold of §9): a zoning meets it in 16 of the 20 prototype × climate cells with a succeeded reference; none in the full-service restaurant 3C, the supermarket 5A, and the warehouse 3C and 5A. The recommended (coarsest) zonings: Semantic Merge + Stack 6 cells; Single Zone Building over No Simplification or Conditioned Merge 5 each (single-storey prototypes and the primary school and outpatient in 3C, where heating is below 1 kWh/m² and not judged); Perimeter Core + Stack or Stacked Floor Zone Multiplier for the medium office in both climates (15 zones against 65); Conditioned Merge + Stack or Stacked Floor Zone Multiplier for the hospital (24 against 54).
R1 and R2 again, 2026-10-29, with the coplanar merge (D-191, ADR-034; D-192). The IDF
writer merges a zone's coplanar pieces, and MergedZoneViewFactors is no longer an expected warning. The previous stage folders are kept as
D:/bemgen-results/lod-study/smoke-before-d191 and pilot-before-d191.
- R1 (
run_20261029-050006): 24 of 24 sites succeed, 23 of 23 paired (largest deviation 7.3 × 10⁻¹¹ W); noFixViewFactors, the only warning the expected floor-area one (6). Deduplication drops 11 of 23 (3 groups; 5 before): the single-zone stackers over No Simplification now write the same zone as over Single Zone per Floor. - R2 (suite
lod-pilot-20261029-050143, runrun_20261029-050215): 528 planned, 440 written, 88Invalidas before; 440 of 440 succeed (100 %), the gate is met. All 418 test sites pair (largest deviation 2.9 × 10⁻¹⁰ W). NoFixViewFactorsor other unexpected warning in anyeplusout.err; the only warning is the expected floor-area one (32 sites). The small hotel's references and its 46 test sites run. - Against the previous R2 (the 392 sites both runs completed): the written
BuildingSurface:Detailedobjects fall from 39 420 to 33 128 (−16 %; −5 % large hotel to −25 % outpatient). The 20 references common to both change by at most 0.14 kWh of heating and 0.36 kWh of cooling a year. Where a load is judged (at least 1 kWh/m² a year), annual sensible heating changes by at most 2.2 % (14 of 225 sites above 1 %, all Perimeter Core with a single-zone stacker) and cooling by at most 1.2 % (4 of 348 above 1 %); the largest changes on loads below 1 kWh/m² are a few kWh (the medium office 3C, heating 305 → 282 kWh, 4.9 % of the reference's heating). - Time (20 at a time on a machine shared with other agents' builds, so not runtime results): the run took 9 min 37 s for 440 sites (7 min 51 s for 392 before); EnergyPlus time per site, median and longest, s: full-service restaurant 5.0, 12.3; hospital 70.6, 114.9; large hotel 33.0, 74.9; medium office 8.4, 117.9; outpatient 15.6, 229.4; primary school 6.9, 37.0; small hotel 15.0, 168.3; stand-alone retail 3.3, 8.2; strip mall 2.6, 11.7; supermarket 4.1, 8.3; warehouse 3.7, 9.9.
- Deduplication: 79 groups, 275 of 418 succeeded test sites dropped (66 %); 143 in the metric table.
- Recommendations: a zoning meets the default threshold in 18 of the 22 cells: the 16 of before and both small-hotel cells (Semantic Merge + Stack in 3C, Conditioned Merge + Stack or Stacked Floor Zone Multiplier in 5A); still none in the full-service restaurant 3C, the supermarket 5A, and the warehouse 3C and 5A.
R3, 2026-10-29 (run.ps1 -Stage main -Parallel 20, 90.1-2007 and 90.1-2019, the six climates, 0° and 45°, the 24 main zonings, floor gate in
report mode, the writer of D-191 (BEMGen 2ed856c, before v1.6.0; atlas inputs 2.0.0); suite lod-main-20261029-051941, run run_20261029-052718; D-193):
- Suite. 264 test cases, 6 336 sites planned: 5 280 written, 1 056
Invalidby the documented limits: multiplied rooms (ADR-026) leave the large hotel and the hospital 6 of 24 zonings each (864 sites), and the outpatient's wings are narrower than twice either perimeter depth (PlanTooNarrow, 192 sites). - Run. 5 280 of 5 280 succeed (100 %); the gate is met. All 5 016 test sites pair (largest internal-load deviation 5.5 × 10⁻¹⁰ W). No
FixViewFactorsand no unexpected warning in anyeplusout.err; the warnings are the expected floor-area one (384 sites) andOutdoorWetBulbIteration(2 640 sites, all within its limit). No failure to triage. The run took 1 h 47 min. - Deduplication (the rule of §3.5): 925 groups, 3 323 of 5 016 succeeded test sites dropped (66 %); 1 693 in the metric table.
- Recommendations (
lod-recommendations.json, the default threshold of §9): a zoning meets it in 218 of the 264 cells: all 24 of the hospital, large hotel, medium office, outpatient, small hotel, stand-alone retail, and strip mall; 20 of the primary school (none in 4A); 16 of the supermarket (none in 4A, 5A); 12 of the full-service restaurant (none in 2A, 2B, 3C); 2 of the warehouse (7A, 90.1-2019). The recommended (coarsest) zonings most often: Conditioned Merge + Single Zone Building 84 times (the single-storey prototypes, the primary school, and the outpatient), Semantic Merge + Stack 57, Conditioned Merge + Stacked Floor Zone Multiplier 40 (the hospital, large and small hotels), Perimeter Core at 4.57 m or 3 m with Stack or Stacked Floor Zone Multiplier for the medium office in every cell. - EnergyPlus time per site (20 at a time on a shared machine, so not runtime results; test-site median, longest, reference mean, s; processor time test-site median, reference mean): full-service restaurant 4.2, 15.5, 3.9; 3.3, 3.6 · hospital 85.5, 136.7, 104.6; 70.0, 89.8 · large hotel 39.0, 112.9, 93.5; 26.9, 77.0 · medium office 7.9, 131.6, 103.0; 6.0, 90.3 · outpatient 14.9, 326.2, 262.4; 10.8, 227.9 · primary school 7.5, 49.6, 34.3; 5.6, 28.1 · small hotel 9.4, 189.5, 133.2; 7.3, 115.2 · stand-alone retail 4.0, 13.5, 7.1; 2.9, 6.0 · strip mall 3.6, 20.8, 11.9; 2.9, 10.0 · supermarket 3.9, 13.5, 6.9; 2.9, 6.1 · warehouse 4.1, 11.6, 5.0; 3.0, 4.2. R5 (the serial timing pass) is not run here.
R4, 2026-10-29 (run.ps1 -Stage ht -Parallel 20, R2's matrix × IWHT and FHT each on and off, 96 zonings; suite lod-ht-20261029-071714,
run run_20261029-071919; D-193):
- Suite. 22 test cases, 2 112 sites planned: 1 760 written, 352
Invalidby the same documented limits (multiplied rooms 288, the outpatient's narrow wings 64). - Run. 1 736 of 1 760 succeed (98.6 %); every reference succeeds, and all 1 714 succeeded test sites pair (largest deviation
2.9 × 10⁻¹⁰ W). No
FixViewFactorsanywhere; the only warning is the expected floor-area one. The run took 33 min. - The 24 failures are all the small hotel's, 12 in each climate: every zoning that keeps an unconditioned elevator core or mechanical room as
its own zone (No Simplification, Semantic Merge, Conditioned Merge, each with Stack or Stacked Floor Zone Multiplier) with IWHT
off, FHT on or off. EnergyPlus stops in warm-up with
CalcHeatBalanceInsideSurf: The temperature of … C … is very far out of boundsinL0/ElevatorCoreFlr1,L0/Mechanical-1, orL0/Unconditioned-1. The elevator core's program carries the source's elevator equipment, 2 133 W/m² (32 kW in 15 m²), all of it a heat gain to the zone; with its interior walls adiabatic it loses heat only through one 1.8 m exterior wall and the ground, and its heat balance diverges. With IWHT on the same zone runs (R2, R3). This is not a defect of the writer: the program's load and the option are written as given (GLOBAL.md scientific rule 3). Whether the IWHT-off setting should exclude such zonings, or the study should use another treatment for an unconditioned zone with a large gain, is for the owner; nothing was relaxed or changed. - Deduplication: 213 groups, 1 433 of 1 714 succeeded test sites dropped (84 %); 281 in the metric table.
- Small-hotel cells run again, 2026-11-01 (D-224). With D-211's heat-transfer rule (an option that is off seals only a surface between two
conditioned zones), the small hotel's 3C and 5A cells ran again at
d4eb868(stageht-smallhotel, suitelod-ht-smallhotel-20261101-042906, runrun_20261101-043133): 192 of 192 succeed, so R4 as published has no failed run; the other cells' IDFs are unchanged by the rule. - Recommendations: a zoning meets the default threshold in 18 of the 22 cells, the same cells as R2 (none in the full-service restaurant 3C, the supermarket 5A, and the warehouse 3C and 5A); in 15 of them a recommended zoning has IWHT or FHT off.
- EnergyPlus time per site (test-site median, longest, reference mean, s; shared machine): full-service restaurant 4.3, 10.7, 4.1; hospital 94.4, 115.6, 68.7; large hotel 33.7, 89.7, 63.0; medium office 7.2, 122.9, 70.2; outpatient 10.4, 345.3, 124.2; primary school 6.1, 35.2, 26.9; small hotel 7.5, 126.2, 85.4; stand-alone retail 2.8, 8.3, 6.4; strip mall 3.0, 12.8, 11.3; supermarket 4.4, 16.5, 6.9; warehouse 3.8, 15.0, 4.6.
R5, 2026-10-29 (run.ps1 -Stage timing, which runs the batch runner with --parallel 1 --timing-repeats 3 --timing-test-cases 12; BEMGen
b29931c (main after v1.6.0), atlas inputs 2.0.0 (96a2e928, the R3/R4 export reused, every file checked by its pinned SHA-256), EnergyPlus
26.2.0; suite lod-timing-20261029-080232, run run_20261029-083427; D-200):
- Suite and main phase. 22 test cases, 528 sites planned, 440 written, 88
Invalid(the limits of R2). The main phase ran one site at a time, 08:34 to 09:29: 440 of 440 succeed, 418 of 418 test sites pair (largest deviation 2.9 × 10⁻¹⁰ W). Deduplication and recommendations match R2 (79 groups, 275 of 418 dropped; 18 of 22 cells). The machine was not idle in the main phase: an unrelated calibration job (D:\smart-meter-calibration,county_calibrate.py stage1 --workers 14) started at 08:35, and the machine's total load was mostly 25 to 60 % (a 2-worker job of the same project ran before it). The serial times insitesare therefore loaded measurements: processor time a median 45 % above the timing pass's (up to 185 %). They are not results. - Timing pass on an idle machine. A guard stopped the runner (and only it) at 09:29:51, as the first timing run began, before any timing row
was written. The machine was idle from 13:33 (5-minute average 4.2 %, maximum 6.0 %), and
run.ps1 -Resumeran the pass from 13:38 to 14:31: 12 test cases (the first in the order of the SHA-256 of their IDs), 218 sites, 654 of 654 runs completed. Total processor load during it averaged 5.1 % in 30-s samples (one EnergyPlus is 3.6 % of 28 logical processors), at most 11.9 % (13:39–13:41, two short foreign scripts). The medium office and the primary school are not among the 12 test cases. - Gate: not met. Processor-time coefficient of variation over the 3 repeats (sample standard deviation over mean): median 2.2 %, P90 5.3 %, largest 12.9 %; 192 of 218 sites are below 5 %, 26 are not. Peak committed memory varies by at most 0.55 % (median 0.20 %). The misses have two causes, neither a cold start: without repeat 1 the misses rise to 31, since repeat 1 is not the slow one.
- 16 misses are the 34 sites of at least 4 s (outpatient 3C, hospital 3C, small hotel 5A, both references among them): from about 14:21, late in repeat 3, every run took 13 to 24 % more processor time than in repeats 1 and 2, with no foreign process and no change in total load. The cause is not established; one candidate is the i7-14700F's 8 performance and 12 efficiency cores (the scheduler moving the single EnergyPlus thread). Over repeats 1 and 2 alone, only 2 of these sites miss.
- 10 misses are among the 184 sites under 4 s (0.8 to 3.3 s): the processor time is counted in 15.6 ms ticks, about 2 % of 0.8 s.
- Medians relative to the reference (test sites; processor time, wall clock, peak committed memory;
timing-analysis/timing-summary.mdhas the full tables and EnergyPlus elapsed time). EnergyPlus's floor of about 185 MiB committed dominates the memory of small models.
| Prototype | Test sites | Reference CPU s | CPU ratio | Wall ratio | Peak commit ratio |
|---|---|---|---|---|---|
| Outpatient (3C, 5A) | 30 | 48.9, 49.8 | 0.064 | 0.066 | 0.694 |
| Small hotel (5A) | 23 | 29.8 | 0.073 | 0.073 | 0.810 |
| Strip mall (3C) | 23 | 3.3 | 0.256 | 0.260 | 0.969 |
| Supermarket (5A) | 23 | 2.1 | 0.425 | 0.420 | 0.979 |
| Large hotel (3C, 5A) | 10 | 19.0, 19.0 | 0.429 | 0.435 | 0.920 |
| Stand-alone retail (3C) | 23 | 1.9 | 0.439 | 0.426 | 0.986 |
| Warehouse (3C, 5A) | 46 | 1.4, 1.5 | 0.622 | 0.642 | 0.993 |
| Full-service restaurant (3C) | 23 | 1.2 | 0.800 | 0.819 | 0.996 |
| Hospital (3C) | 5 | 21.2 | 0.862 | 0.863 | 0.994 |
| Zoning (simplifier + stacker) | Test sites | CPU ratio | Wall ratio | Peak commit ratio |
|---|---|---|---|---|
| Conditioned Merge + Stacked Floor Zone Multiplier | 12 | 0.331 | 0.338 | 0.965 |
| Conditioned Merge + Stack | 12 | 0.410 | 0.412 | 0.973 |
| the 14 zonings with Single Zone Per Floor Type or Single Zone Building, or over Single Zone Per Floor | 7 to 9 each | 0.410 to 0.439 | 0.415 to 0.440 | 0.977 to 0.984 |
| Semantic Merge + Stacked Floor Zone Multiplier | 12 | 0.839 | 0.837 | 0.999 |
| Perimeter Core (3 m, 4.57 m) + Stack or Stacked Floor Zone Multiplier | 7 each | 0.894 to 0.902 | 0.881 to 0.928 | 0.998 to 1.003 |
| Semantic Merge + Stack | 12 | 0.913 | 0.898 | 0.998 |
| No Simplification + Stacked Floor Zone Multiplier | 12 | 0.988 | 0.980 | 0.995 |
The single-zone stackers' sites are the single-storey and small prototypes (the hospital and the large hotel have none, ADR-026), so their
0.42 is mostly the floor of a 1 to 3 s run. Single Zone Building against the reference, per prototype: outpatient 0.064 CPU (0.69 memory),
small hotel 0.057 (0.80), strip mall 0.256, supermarket 0.418, stand-alone retail 0.435, warehouse 0.620, full-service restaurant 0.787; over
all 50 such sites 0.424 CPU, 0.422 wall, 0.980 memory. Across all 206 timed test sites: 0.504 CPU, 0.521 wall, 0.985 memory.
- Files: D:/bemgen-results/lod-study/timing/ (merged/central.duckdb with site_timing and site_timing_summary, report/, and
timing-analysis/: timing-sites.csv, timing-summary.md, and the script that wrote them, timing_analysis.py).
R4 and R5 decided, 2026-10-29 (the controller under the owner's blanket authority): R4's 24 failures need no BEMGen change; such zonings are
not applicable in their cells, whose recommendations come from the zonings that ran (D-201). R5's costs are reported as medians of site ratios with
the CV distribution and the misses stated; the gate is unchanged (D-202). The repeat check D-202 allowed ran once: the 34 sites of at least 4 s,
timed again three times on the idle machine (run run_20261029-144634 in D:/bgdiag/r6-retime), have no CV at or above 5 % (largest 4.8 %), R5's
late slowdown did not recur, but their absolute times are 15 % above R5's and their ratios to the reference moved by −17 % to +5 % (median −4.5 %).
R6, 2026-10-29 (python -P scripts/lod-study/study_tables.py --write; D-203):
- Report (
research/lod-study/report/2026-10-29-lod-study-report.md): purpose, method, the R3 results per prototype × climate zone × vintage × orientation (recommended zonings, errors, benchmark loads; 11 tables of 24 rows), the R4 sub-study and its 24 failures, the R5 costs by prototype, zoning, and recommended zoning, the repeat check, deduplication, and the limits. Every table is generated from the stage results;--checkverifies them. - Methodology (
…/2026-10-29-lod-study-methodology.md(research/lod-study/report/2026-10-29-lod-study-methodology.md)), §M1 to §M10: question and design, reference geometry, zonings and stackers, heat-transfer options, fixed factors and pairing, deduplication, metrics and threshold, cost protocol, limits, reproducibility; every number with its source. - Consolidated results (
research/lod-study/results/):lod-recommendations.json(R3's 264 entries, 218 with a recommendation, with R5's serial cost on the 12 timed references and 206 timed test sites and atimingblock; schema version 1.1.0),lod-recommendations-ht.json(R4, separate; the 24 failed sites now carry their zoning), andprovenance.json.
5. Size and run time (estimate)¶
There are 11 prototypes × 6 climates × 2 vintages × 2 orientations = 264 test cases. At 24 zonings each,
that is 6,336 sites (main.yaml). Mock-1 ran a median of 4.4 s per site, but DOE prototypes are larger, so assume 15–60 s.
At --parallel 20, R3 takes about 1–4 h. R4 is about 1,400 sites and under 1 h. R5 takes under 2 h. The disk
needed is about 0.4 MB per site in the central DB, plus hourly files, well inside D:'s 1.4 TB free.
6. Left for the owner¶
- The vintages (proposed 90.1-2007 and 90.1-2019, §7) and the six climate cities.
- Whether the secondary synthetic-typology study runs in this paper.
- The items of §7.
7. What the build changed or found (D-186, for the owner)¶
- Vintages. Atlas release 2.0.0 has no 90.1-2004 folders; its 90.1 templates are 2007, 2013, and 2019, beside DOE Ref pre-1980 and 1980-2004. The specs use 90.1-2007 and 90.1-2019.
- Zonings. The 16 cells plus two PerimeterCore cells (18) cannot be written as one spec, whose zonings are a full factorial; the specs use PerimeterCore at both depths with every stacker, 24 zonings. The 18 would need a zoning list in the spec.
- Floor gate.
requireblocks every zoning that merges different programs (16 of 24 in R1), so the specs usereport. - Program keys. Three record keys have no atlas program of their name; the study maps them (
study.jsonnotes): 90.1-2019Retail→ Front_Retail and Core_Retail by represented area;GuestRoom→GuestRooms_Mixed; 90.1-2019 hospitalOffice→Office_Mixed. The atlas holds two 90.1-2007 small-hotel sets with the same metadata;dca6c5is used. - Glazing. The atlas 90.1 programs have no
fenestration, so the DOE record's glazing is used (decision 5). - Climate zone 7. Registered as
7A, the atlas's label for International Falls. - EnergyPlus warnings.
PsyPsatFnTemp(2B, 4A, 7A references) andFixViewFactors(single-zone stackers over many-zone floors) fail the runner's verdict. Their causes are in §8; accepting them would change the runner's expected-warning list, a validation decision for the owner (D-187); nothing was relaxed.
8. The causes of the R1 warnings (D-187)¶
The owner chose "find the cause first" (2026-10-29). Scratch runs in D:\bgdiag, EnergyPlus 26.2.0.
PsyPsatFnTemp is EnergyPlus's outdoor wet-bulb calculation, not a BEMGen object. On the New York reference the warning
stays, at the same time step and with the same input (03/12 11:50, −170.82 °C), with the ideal loads' dehumidification control
off, a minimum cooling supply humidity ratio of 0.0005, no infiltration, no people, no summary tables, and no HVAC objects at
all. Four time steps per hour move it (01/20 07:00, −145.86 °C). The routine named in the context line, PsyTwbFnTdbWPb,
computes the site's outdoor wet-bulb each time step from the weather's dry-bulb, relative humidity, and pressure; at that time
step the outdoor state is 5.6 °C, humidity ratio 0.001519, 100 800 Pa, and EnergyPlus's reported Site Outdoor Air Wetbulb
Temperature is −0.4185 °C, equal to an independent ASHRAE calculation (−0.4182 °C). So the iteration passes an out-of-range trial
temperature to the saturation-pressure function, warns, and still converges. Every instance seen is at an outdoor wet-bulb just
below 0 °C (Sterling 03/15 20:00 about −0.43 °C, Tucson 11/17 01:00 about −0.48 °C), where the saturation curve changes from water
to ice; humid climates reach that state with a less dry air and did not warn. Raising the relative humidity of that one record
from 27 % to 28 % (wet-bulb +0.06 °C) removes the warning, and the summed ideal sensible heating and cooling change by at most
1.1 × 10⁻⁴ kWh in any hour and by less than 10⁻³ kWh a year (the humidity change itself). No object of these IDFs uses the outdoor
wet-bulb (ideal loads without outdoor air, no evaporative or plant equipment). No metric the study reports changes.
FixViewFactors is inherent to a merged zone that keeps every room's floor and ceiling pieces, with a large internal mass.
The Single Zone Per Floor Type zone over No Simplification (E0) has 51 surfaces (23 floor pieces, 24 ceiling pieces, 4
walls) and 7 windows; the Single Zone Per Floor simplifier's zone of the same floor has 6 surfaces. Both have the same areas
(floor and ceiling 1 660.7 m², exterior walls 659.2 m², closed, the floor equal to the footprint) and the same internal mass,
9 466.7 m², 2.4 times the surface area. EnergyPlus's approximate view factors then miss completeness by 0.005 (it asks for 0.001);
without the internal mass the warning goes, and the 6-surface zone with the same mass does not warn. The geometry is not wrong.
The fragmented zone is still a different EnergyPlus model: its annual sensible cooling differs from the 6-surface zone's by
−0.44 % (Single Zone Per Floor Type) and −0.46 % (Single Zone Building), heating by +1.0 % and +2.1 % (of 280 kWh), at most
0.6 and 1.3 kWh in an hour, so deduplication rightly keeps both.
9. Publication on the atlas site¶
The owner will publish the zoning recommendation per program, climate zone, and vintage on the atlas website. report.py writes
lod-recommendations.json (schema scripts/lod-study/schemas/lod-recommendations-v1.schema.json), one entry per test case
(prototype × climate zone × vintage × orientation), indexed by atlas program ID (by_program):
- the atlas program IDs of each program key, read from the suite's saved inputs;
- the reference's benchmark values: conditioned area, zone count, annual ideal sensible heating and cooling per m² of conditioned floor, and their maximum and P99 in kW;
- every test zoning: its §10 metrics as the runner stored them (with their flags), its conditioned-area change, and whether it meets the threshold, with each limit it misses; failed and duplicate sites are listed and never recommended;
- the recommended zonings: the coarsest (fewest modelled zones) that meet the threshold, ties all listed.
The threshold is an owner choice (default in report.py, replaced with --threshold <file.json>, recorded in every file):
for each of sensible heating and cooling, |annual error| ≤ 10 %, CV(RMSE) ≤ 30 % and |NMBE| ≤ 10 % (ASHRAE Guideline 14's hourly
calibration limits), and |conditioned-area change| ≤ 1 %; a load whose reference is below 1 kWh/m² a year is not judged. In R1
(3C, where heating is 0.09 kWh/m²) the coarsest zonings meeting it are the four Perimeter Core zonings with Stack or Stacked
Floor Zone Multiplier, 15 zones against the reference's 65. The site integration (how the atlas reads, aggregates over
orientations, and shows the file) is later atlas work.
The consolidated drop (R6, D-203). The atlas site's zoning section, https://energy-atlas.github.io/archetype-atlas/zoning/, carries the R3/R4
first drop (both lod-recommendations.json files of version 1.0.0). It takes the consolidated drop next, from
research/lod-study/results/: lod-recommendations.json of schema version 1.1.0 (R3's entries unchanged, plus
the optional cost of each timed reference and zoning, and the timing block with the gate verdict of D-202, the repeat check, and the medians
by zoning and prototype), lod-recommendations-ht.json (R4, separate), and provenance.json. A reader of version 1.0.0 that ignores unknown
members reads 1.1.0 unchanged.
Version 1.2.0 (2026-11-01, D-219 to D-223, tooling fixes). After the 2026-10-31 review both files
are written again by report.py and study_tables.py with LF line endings. Added members only: suites, runs, deduplication,
judged_loads, and sensitivity at the top level, judged and finer_than_reference on an entry, status and reason on a zoning. Two
readings change: zonings lists every planned zoning (those the generator refused with status: "Invalid"), and the recommendation is bounded
by the reference's zone count (R3: 214 of 264 cells, 4 finer_than_reference). Deduplication keeps the both-on twin (R4: 7 cells with an off
setting), and the cost medians drop twins and weight prototypes equally. The atlas site takes this drop in its release work (ADR 0050 §4).