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, merge7c543f5d, ADR 0060 to ADR 0062; manifest SHA-25651ce9c9e04f3e8d23d4b326d841ef7cc3299b60485cb8a0d2153a3dc3317bd7f), generatoratlas-schedules4.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¶
- 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. - The ID map tests first (
AtlasIdMapTests, failing to compile onAtlasIdMap.Maps), then the chain. - Schedule Draw: the pins, the 2.4.0 generation files, the four draws recorded again with
python -m atlas_schedulesin the checkout (two runs, same bytes). - The cap test first in each layer:
UnoccupiedLightingCapTests(core, failing to compile),LightingCapImportTests(program JSON, failing to compile),IdfUnoccupiedLightingCapTests(export, failing to compile onWriteUnoccupiedLightingCap),DoeSuiteTests.TheLightingCapIsWrittenOnlyWhenTheSpecAsksForIt(observed failing on the spec schema), and the opt-in end-to-end run. - 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.