Skip to content

REL-B2: BEMGen 1.10.0 on atlas release 2.4.0, and the unoccupied lighting cap

Status: Done (built 2026-11-01 on feat/relb2-atlas-2-4-0; D-253 to D-260) · Stage: REL-B2 of the 2026-10-31 review's fix plan, round 2 (the owner's answers G1 to G10; G4 applied here) · Decisions: D-253 to D-260, ADR-040, ADR-035 and ADR-038 amended · Atlas: release 2.4.0 (atlas PR #50, merge 7c543f5d, ADR 0060 to ADR 0062; manifest SHA-256 51ce9c9e04f3e8d23d4b326d841ef7cc3299b60485cb8a0d2153a3dc3317bd7f), generator atlas-schedules 4.1.1

1. Scope

Item What it became
1. The 2.4.0 contracts Program JSON 6.1.0 read, its schema embedded byte for byte from atlas 7c543f5d; constructions unchanged (a 2.3.0 document is still read); the known release and site manifest are 2.4.0's; fixtures re-exported (twelve programs, four new for the cap), the three recorded sites recorded again (D-253).
2. Moved IDs Stored 2.0.0 to 2.3.0 texts, maps, and mixes refused naming their 2.4.0 IDs through id-map-2.3.0.json and the embedded id-map-2.4.0.json (D-254).
3. Schedule Draw Generator 4.1.1 on release 2.4.0; the recorded draws drawn again (D-255).
4. The cap (G4) Read, carried, merged only when equal, written by Convert2IDF on request as PNNL's EMS program per zone, only for zones whose read people are not zero at all times (D-256, ADR-040); the EnergyPlus check (D-257).
5. Building services The new zone services listed in Left Out; the building-level exterior elevators not read (D-258).
6. Owner's answer on toplit daylighting Computed shares kept (D-259).
7. Version, checks, release D-260.

2. Approach

  1. Re-export the fixtures from an atlas checkout at 7c543f5d (export_fixtures.py, now --jobs), see the program tests fail on the version (6.1.0 refused as newer), then move the readers, the schema, and the maps; record the sites again from the live 2.4.0 site.
  2. The ID map tests first (AtlasIdMapTests, failing to compile on AtlasIdMap.Maps), then the chain.
  3. Schedule Draw: the pins, the 2.4.0 generation files, the four draws recorded again with python -m atlas_schedules in the checkout (two runs, same bytes).
  4. The cap test first in each layer: UnoccupiedLightingCapTests (core, failing to compile), LightingCapImportTests (program JSON, failing to compile), IdfUnoccupiedLightingCapTests (export, failing to compile on WriteUnoccupiedLightingCap), DoeSuiteTests.TheLightingCapIsWrittenOnlyWhenTheSpecAsksForIt (observed failing on the spec schema), and the opt-in end-to-end run.
  5. A second agent's review (D-111), its fixes, the headless smoke specs moved, the documents, the version.

3. The cap on BEMGen's zones

Rule part BEMGen
zone_occupant_count_zero the zone's People objects' occupant count, summed
other_zone_occupant_count_zero, condition_zone the People objects of the building's zones whose name or ID is the condition zone; none: not capped, with a warning (the DOE warehouse's office is Office, the prototype's Zone1 Office)
threshold on all lighting every Lights object's electricity rate, summed, against the threshold times the zone's floor area
set_lights_to_cap the first general Lights object set to the cap times the floor area, other general ones to 0
additional_lighting_when_capped_W_m2 the other Lights objects set to it times the floor area (the strip mall's 0)
calling_point one calling manager per calling point
zone_conditions not applied, listed
people zero at all times (G4) not capped, with a warning
merged zone, mix kept only when every source carries the same rule

4. Open for a person

The owner's calls in D-256 (the default, G4's reading for a rule on another zone, the warehouse's condition zone); the Rhino steps of D-260: rebuild the examples holding atlas texts, the full headless smoke run, RealDrawTests with the released 4.1.1 wheel, and the docs export; the release 1.10.0 checklist's window items.