ADR-014: Program types and department zoning¶
Status: Accepted (by the controller under D-098; provisional pending the owner's reading); the example presets' infiltration values are dropped by ADR-017 (D-124); department zoning is relaxed for the DOE generators, whose most detailed level is the DOE zone (the owner's decision O4 of the DOE geometry note; D-097 is relaxed for them), by ADR-025
Date: 2026-10-02
Decisions: D-009, D-023, D-024, D-026, D-038, D-047, D-061, D-065, D-085, D-093, D-094, D-096, D-097, D-098, D-108, D-109; applies ADR-005, ADR-006, and ADR-007
Context¶
Through S8.3 every plan generator placed housing: dwelling units, stairs, and corridors, with the illustrative presets ExampleResidentialPresets (D-023, D-061). The four-source precedent set (D-093, syn-typologies.md) adds non-residential families, and D-094 puts every program type of the set in scope: retail, an operating suite, food service, office, elder care, and assembly or community uses. Each new space type needs its own typed program preset with explicit, documented assumptions (D-094), and D-097 zones a non-residential floor at its most detailed level per department: a contiguous group of rooms of one program in one part of the floor, not one zone per room or tenancy. This ADR fixes the new space types, one illustrative preset per type, and, for every new family, which rooms form one zone and which space type that zone has.
Options considered¶
Space types¶
- One generic
NonResidentialtype with a program name. Few enum values, but the program would be carried by a name, which D-061 and AGENTS.md forbid (semantics are explicit data, never encoded in names). - Reuse
Otherwith different presets. A generator could not say which preset each zone takes: one slot per space type (D-061) needs distinct types. - One space type per department program that a family places (chosen). Explicit data, one typed preset slot per type, and the existing default-preset pattern (D-061, D-065) extends unchanged. Existing types are reused where they mean the same thing.
Zoning of non-residential floors (settled by D-097)¶
Rooms or tenancies as zones would need a room layout the precedents do not give and would break the parity with housing, where a dwelling is never subdivided (D-009). One zone per department is the most detailed level; the simplifiers and aggregators coarsen it as for housing.
A preset without a space type (S8.8, D-108)¶
D-108 asks for a preset that every program input of every plan generator accepts, made from any preset, built-in or general, while a preset that keeps its space type must still match its input.
- A
SpaceTypevalueAny. One enum value, butSpaceTypeis the semantic category of a zone, and no zone would ever have this one; every switch over space types (preview colours, Semantic Merge grouping, Convert2BEM) would have to handle a value that never occurs on a zone, andOtherandMixedalready mean something else. - A flag beside a kept space type. The preset would keep, say,
Kitchenand say that it fits every input: two sources of truth, and a preset that readsKitchenwhile it programs a dwelling. - No space type (chosen).
ProgramPreset.SpaceTypebecomesSpaceType?,nullmeaning that the preset has no space type;AsAnyProgram()returns the preset without it. The absence is explicit data, nothing is inferred from a name (D-061), and the slot check needs one condition more. - Matching by name or by a list of compatible types. Names are descriptive only (D-061), and a compatibility table would be a research rule that no source supports.
Decision¶
Space types¶
SpaceType gets twelve values, appended after the existing ones so that existing values keep their order: Office, Retail, Mall, Kitchen, Dining, OperatingTheatre, CleanCorridor, DirtyCorridor, ClinicalSupport, CareBedroom, CareCommunal, ActivityHall. Three existing values gain a non-residential use without changing meaning: Core (an office service core: lifts, stairs, toilets, risers), Lobby (a public foyer), and Service (the support rooms of a foyer family: changing rooms, stores, toilets).
| Space type | Department it zones | Why its own type |
|---|---|---|
Office |
an office work area | the work-area program of 017 |
Core (reused) |
an office service core | already "service or circulation core"; distinct from Stair, which stays the housing core |
Retail |
the shops of one mall wing, or one anchor store | shop program of 014; anchors are shops with the same program |
Mall |
the public mall route | a conditioned public route with shop-hour occupancy, unlike a residential Corridor |
Kitchen |
food preparation and servery as one department | high equipment and extract ventilation (016) |
Dining |
the dining field | dense lunchtime occupancy (016) |
OperatingTheatre |
one bank of operating theatres | high equipment and ventilation (015) |
CleanCorridor |
the clean route of an operating suite | the separation of routes is the family's defining relation (015-R002), so the two routes are distinct data |
DirtyCorridor |
the dirty route | as above |
ClinicalSupport |
the support rooms of an operating suite | scrub, anaesthesia, stores, recovery, sluice (015) |
CareBedroom |
one group of care bedrooms | 24-hour occupied, warmer setpoints (018) |
CareCommunal |
the communal and service hub of a care home | day-long communal use with meal peaks (018) |
ActivityHall |
one activity hall | evening and weekend use, lower heating setpoint (019) |
Lobby (reused) |
a public foyer | already "entrance lobby" |
Service (reused) |
the support rooms of a foyer family | already "service space" |
Mechanical, Other, and Mixed are unchanged; Mixed remains the type of a simplified zone that combines several types. Names were checked against shorter alternatives: OperatingTheatre rather than Surgery (which also names a clinic), CareBedroom and CareCommunal rather than Bedroom (a room of a dwelling, never modelled, D-009).
Presets: ExampleNonResidentialPresets¶
A new static class in Lod.Core.Programs, following ExampleResidentialPresets: for each of the fifteen types above a …Values (PresetValues) and the ProgramPreset built from it, named Example <Type> (Example Office, Example Operating Theatre, …). The values are illustrative round numbers chosen to be plausible for development and tests (D-023). They are not taken from the DOE prototype buildings, from any standard, or from measured data, and they are not research inputs; sourced presets remain an open research input (program-presets.md §3). Every preset is conditioned: each space is one that people occupy or pass through and that is normally heated (the residential stair is the only unconditioned example). The year starts on a Monday, as for the residential presets.
| Preset | WWR | Heating / cooling °C | Occupancy, people/m² | Lighting, W/m² | Equipment, W/m² | Ventilation, 1/h | Infiltration, 1/h |
|---|---|---|---|---|---|---|---|
| Office | 0.4 | 21 / 24 | 0.10 office | 10 office lighting | 10 office equipment | — | 0.3 always on |
| Core | 0.0 | 21 / 24 | — | 5 office lighting | 3 office equipment | — | 0.3 always on |
| Retail | 0.3 | 20 / 24 | 0.20 retail | 15 retail lighting | 5 retail equipment | — | 0.5 always on |
| Mall | 0.2 | 20 / 24 | 0.10 retail | 10 retail lighting | — | — | 0.8 always on |
| Kitchen | 0.1 | 18 / 26 | 0.05 kitchen staff | 12 kitchen hours | 30 electric (kitchen electric), 40 gas (kitchen gas) | 15 kitchen hours | 0.3 always on |
| Dining | 0.4 | 21 / 24 | 0.60 dining | 10 dining hours | 2 dining hours | — | 0.3 always on |
| Operating theatre | 0.0 | 20 / 22 | 0.10 theatre sessions | 25 theatre services | 30 theatre services | 20 theatre ventilation | 0.1 always on |
| Clean corridor | 0.1 | 20 / 24 | — | 8 always on | — | — | 0.3 always on |
| Dirty corridor | 0.1 | 20 / 24 | — | 8 always on | — | — | 0.3 always on |
| Clinical support | 0.2 | 21 / 24 | 0.05 theatre sessions | 12 theatre services | 10 theatre services | — | 0.3 always on |
| Care bedroom | 0.3 | 22 / 25 | 0.04 care bedroom | 6 care bedroom lighting | 3 care bedroom equipment | — | 0.3 always on |
| Care communal | 0.4 | 22 / 25 | 0.15 care communal | 10 care communal hours | 5 care communal hours | — | 0.3 always on |
| Lobby | 0.5 | 20 / 24 | 0.10 community | 10 community hours | — | — | 0.6 always on |
| Activity hall | 0.2 | 18 / 25 | 0.10 community | 12 community hours | 2 community hours | — | 0.3 always on |
| Service | 0.1 | 18 / 26 | — | 6 community hours | — | — | 0.3 always on |
Every load is expressed per floor area except ventilation and infiltration, which are air changes per hour (ADR-007; the magnitude is m³/h = value × zone volume). Equipment is ElectricEquipment except the kitchen's 40 W/m² of GasEquipment. Ventilation (LoadType.Ventilation) is given only where the program clearly needs mechanical air beyond infiltration: the kitchen's extract hoods and the operating theatres' air changes. No preset defines DomesticHotWater.
Reasons for the values.
- Office. A typical open-plan density (one person per 10 m²), lighting and small-power densities of an office floor, and the glazing of a curtain-walled plate. Core: no occupancy of its own (people pass through, as in the residential corridor); lifts and riser fans as small equipment; WWR 0 because a core is enclosed by shafts and service rooms, so a core on a façade gets no window by default.
- Retail and mall. Shop-floor densities with display lighting; the mall is less dense and has no equipment. Heating 20 °C because customers keep their coats on. Higher infiltration for frequently opened entrances, highest for the mall, whose ends are the building's entrances.
- Kitchen and dining. The kitchen carries the cooking load (gas ranges, electric ovens, refrigeration and dishwashing) and a hood extract of 15 air changes while it operates; a wide 18–26 °C band because cooking heat dominates. The dining field is densely occupied around lunch.
- Operating suite. Theatres hold a team of about six in 60 m², high equipment and lighting, a tight 20–22 °C band, 20 air changes during sessions with a setback to half at night and at weekends, and very low infiltration because theatres are kept at positive pressure; WWR 0 because theatres are usually windowless. The clean and dirty corridors have the same values: their difference is the route, not the program, and two types keep the routes apart as data. Support rooms have a light, session-hour occupancy.
- Elder care. Residents are older and less active, so both setpoints are 1 °C warmer than for dwellings. Bedrooms are occupied at night and partly by day, every day; the communal hub is busy all day with meal peaks, and a care station keeps a little light and occupancy at night.
- Community. The foyer and halls are used for daytime classes and mostly in the evenings and at weekends; a sports hall is heated to 18 °C, and the foyer is glazed (WWR 0.5) with an entrance's infiltration. Support rooms (changing rooms, stores, toilets) are heated to a wide 18–26 °C band and have no occupancy of their own.
Schedules. Fractions per hour of the day (hour 0 is the first hour); Monday to Friday use the weekday profile, Saturday and Sunday the weekend profile, except the retail schedules, which have their own Saturday and Sunday profiles because shops trade longest on Saturday.
Schedule (Example …) |
Weekday | Weekend |
|---|---|---|
Office Occupancy |
0 until 7:00; 0.1, 0.5 (7–9); 0.95 (9–12); 0.5 (12–13); 0.95 (13–17); 0.5, 0.2, 0.1 (17–20); then 0 | 0 |
Office Lighting |
0.05 until 7:00; 0.3, 0.8; 0.9 (9–12); 0.8; 0.9 (13–17); 0.6, 0.3, 0.2; then 0.05 | 0.05 |
Office Equipment |
0.2 until 7:00; 0.4, 0.7; 0.9 (9–12); 0.7; 0.9 (13–17); 0.6, 0.4, 0.3; then 0.2 | 0.2 |
Retail Occupancy |
0 until 9:00; 0.3, 0.5, 0.6, 0.8, 0.8, 0.6, 0.6, 0.7, 0.8, 0.7, 0.4 (9–20); then 0 | Saturday 0 until 9:00; 0.5, 0.8, 1.0 (11–16), 0.9, 0.8, 0.6, 0.3 (9–20); Sunday 0 until 11:00; 0.4, 0.6, 0.7, 0.7, 0.6, 0.4 (11–17); then 0 |
Retail Lighting |
0.1 until 8:00; 0.5; 1.0 (9–20); 0.5; then 0.1 | Saturday as the weekday; Sunday 0.1 until 10:00; 0.5; 1.0 (11–17); 0.5; then 0.1 |
Retail Equipment |
0.3 until 8:00; 0.6; 0.9 (9–20); 0.6; then 0.3 | Saturday as the weekday; Sunday 0.3 until 10:00; 0.6; 0.9 (11–17); 0.6; then 0.3 |
Kitchen Staff |
0 until 6:00; 0.3, 0.8; 1.0 (8–15); 0.5; then 0 | 0 |
Kitchen Hours |
1.0 from 6:00 to 16:00, else 0 | 0 |
Kitchen Electric |
0.2 until 6:00; 0.4; 0.6 (7–11); 0.9, 1.0, 0.9 (11–14); 0.6, 0.4; then 0.2 | 0.2 |
Kitchen Gas |
0 until 7:00; 0.3 (7–10); 0.6, 1.0, 1.0, 0.6, 0.2 (10–15); then 0 | 0 |
Dining Occupancy |
0 until 7:00; 0.1, 0.2, 0.1, 0.1 (7–11); 0.4, 1.0, 0.8, 0.3, 0.1 (11–16); then 0 | 0 |
Dining Hours |
1.0 from 7:00 to 16:00, else 0 | 0 |
Theatre Sessions |
0 until 7:00; 0.5; 1.0 (8–18); 0.5; then 0 | 0 |
Theatre Services |
0.2 until 7:00; 0.6; 1.0 (8–18); 0.6; then 0.2 | 0.2 |
Theatre Ventilation |
0.5 until 7:00; 1.0 (7–19); then 0.5 | 0.5 |
Care Bedroom Occupancy (every day) |
1.0 until 7:00; 0.8, 0.5; 0.3 (9–12); 0.2; 0.4 (13–16); 0.3, 0.2, 0.4, 0.6, 0.8 (16–21); then 1.0 | as the weekday |
Care Bedroom Lighting (every day) |
0.05 until 6:00; 0.3, 0.6, 0.4; 0.1 (9–16); 0.2, 0.4, 0.6, 0.8, 0.8, 0.6, 0.3, 0.1 (16–24) | as the weekday |
Care Bedroom Equipment |
constant 0.5 | constant 0.5 |
Care Communal Occupancy (every day) |
0.05 until 7:00; 0.3, 0.9, 0.6, 0.7, 0.7, 1.0, 0.6, 0.7, 0.7, 0.7, 1.0, 0.8, 0.6, 0.4, 0.2 (7–22); then 0.05 | as the weekday |
Care Communal Hours (every day) |
0.2 until 7:00; 1.0 (7–22); then 0.2 | as the weekday |
Community Occupancy |
0 until 9:00; 0.2 (9–17); 0.6; 0.9 (18–21); 0.6, 0.2; then 0 | 0 until 9:00; 0.8 (9–20); 0.4; then 0 |
Community Hours |
1.0 from 8:00 to 23:00, else 0 | 1.0 from 8:00 to 21:00, else 0 |
Always On |
constant 1.0 (the residential presets' schedule) | constant 1.0 |
The exact hourly values are in ExampleNonResidentialPresets and listed in program-presets.md §2.2.
Default preset components (D-061, D-065). One per type in panel 1 Program (since S8.8 in panel 1 Program Presets, with Dwelling Unit Preset, Corridor Preset, and Stair Preset, D-108), each visible on the toolbar and built on DefaultPresetComponent, with these values as input defaults and the remark that they are illustrative: Office Preset, Core Preset, Retail Preset, Mall Preset, Kitchen Preset, Dining Preset, Operating Theatre Preset, Clean Corridor Preset, Dirty Corridor Preset, Clinical Support Preset, Care Bedroom Preset, Care Communal Preset, Lobby Preset, Activity Hall Preset, and Service Preset. The existing label and unit mapping of DefaultPresetComponent already covers every load above (Gas Equipment in W/m², Ventilation and Infiltration in 1/h); no component is special-cased.
Department zoning per family (D-097)¶
At the most detailed level each family below places these zones. "One zone" means one polygon that may surround other zones (a ring) but is never split into rooms or tenancies. Housing families keep one zone per dwelling and storey (D-009, D-085), and their stairs and corridors are their own zones.
| Family | Zones and their space types | Not zoned separately |
|---|---|---|
SYN-TYP-010 Radial lobes (housing) |
the point-access core (Stair); each dwelling of each lobe (DwellingUnit), one zone per dwelling and storey |
rooms of a dwelling |
SYN-TYP-011 Court cluster (housing) |
each stair (Stair) and each dwelling (DwellingUnit) of every wing |
rooms; the courts, which are outside the building |
SYN-TYP-012 Stepped bands (housing) |
the stair (Stair), the shared circulation edge (Corridor), each dwelling (DwellingUnit), per storey |
rooms; the terraces, which are outdoor roofs |
SYN-TYP-014 Branching mall |
the public mall, hub and branches together (Mall); the shops on each side of each branch, one zone per side (Retail); each anchor store (Retail) |
individual shops and tenancies |
SYN-TYP-015 Operating suite |
each bank of operating theatres (OperatingTheatre); each clean corridor (CleanCorridor); each dirty corridor (DirtyCorridor); the support rooms together (ClinicalSupport) |
individual theatres, scrub and anaesthetic rooms, stores, recovery, sluice |
SYN-TYP-016 Cafeteria |
the kitchen and servery as one department (Kitchen); the dining field (Dining) |
the servery counter, stores, wash-up, queue |
SYN-TYP-017 Office plate |
the office work area, one ring around the core (Office); the service core (Core) |
individual work areas, meeting rooms, lifts, stairs, toilets |
SYN-TYP-018 Care hub |
the communal and service hub (CareCommunal); the bedrooms on each side of each wing corridor, one zone per side (CareBedroom); each wing corridor (Corridor) |
individual bedrooms and en-suites, the care station |
SYN-TYP-019 Foyer and halls |
the foyer (Lobby); each activity hall (ActivityHall); the support rooms together (Service) |
individual changing rooms, stores, toilets |
SYN-TYP-013 has no generator (D-096). The 001–009 families are unchanged (ADR-006).
Any-program presets (S8.8, D-108)¶
- Model.
ProgramPreset.SpaceTypeisSpaceType?;IsAnyProgramistruewhen it isnull. A preset is always created with a space type (ProgramPreset.Create,PresetValues.ToPreset, every default preset component, Program Preset);AsAnyProgram()returns a copy without it that keeps everything else: the name, the sameZoneProgram(loads, their schedules, conditioning, setpoints), and the WWR. Casting an any-program preset again returns it unchanged. - Plan generators. The slot check of every generator, single-plan and multi-storey (
PlanBuilder), accepts an any-program preset on any slot; a preset with a space type must still have its slot's (PresetSpaceTypeMismatch, unchanged). A zone keeps the space type the generator's layout gives it (PlannedZone.SpaceType) and takes its program and the WWR of its windows from its slot's preset, as for a typed preset. - Provenance (GLOBAL.md scientific rule 3). The plan's
Presetsparameter lists{slot space type}:{preset name}per slot, which for a typed preset is its own space type, as before. For each slot that received an any-program preset the plan also recordsAnyProgramPreset.{Input}= the preset's name (PlanPresets.AnyProgramPresetKeyPrefix), for exampleAnyProgramPreset.Corridor=Example Office; every floor and building made from the plan carries it in its provenance inputs. A plan of typed presets records no such key, so its output is unchanged. - Downstream. Zones carry their space type and program, never their preset, so simplifiers, aggregators, validation, the mapping, Inspect, and Convert2BEM are unchanged: a dwelling zone with an office program is a
DwellingUnitzone with that program, it is coloured and grouped by Semantic Merge as a dwelling, and Convert2BEM reports its space typeDwellingUnit. Integration tests run a linear plan and a stepped band with any-program presets through every simplifier and aggregator, and every result validates. - Grasshopper. The parameter Any Program Preset (AnyP,
AnyProgramPresetParameter,24bc6a12-ad06-4c25-bc9d-4e8318b8744c) in panel 1 Program is a floating data node like Grasshopper's Geometry parameter: wire any preset into it (a default preset component, Program Preset, or a Program Preset parameter), and it outputs the any-program cast (AnyProgramPresetGoo, shown asPreset <name> (any program, no space type, WWR <ratio>)). It holds no data of its own. Every preset input of every generator, a Program Preset parameter, takes it; the input's description says so.
Consequences¶
- The enum grows by twelve values at its end; existing values, snapshots, and diagnostics are unchanged. Semantic Merge groups by space type as before, so a non-residential floor merges departments of the same type that touch; Perimeter Core and the single-zone methods give
Mixedzones as before. - Fifteen illustrative presets and fifteen default preset components;
ExampleResidentialPresetsis unchanged. Tests check that every preset builds, its space type, conditioning, setpoints, WWR, and the design value and annual fraction of every load. - Non-residential zones are departments, so the detailed model has fewer and larger zones than a room-level model would; comparisons with room-level reference models must state this.
- The presets are not representative of any building or standard; results computed with them are development results only (D-023).
- Changing a value changes the snapshots of the families that use it and is recorded in this ADR and in program-presets.md.
- An any-program preset lets a zone's program differ from its space type (D-108). This is always the user's explicit choice and always in the plan's provenance; a typed preset still cannot be given to another type's input.