Skip to content

Commit 425298c

Browse files
authored
feat(routines): add Title 24 differential offset variant (#60)
Add the E3 Title 24 differential dry-bulb offset-1 routine and make routine test fixtures follow the registry inventory.
1 parent 249edcc commit 425298c

16 files changed

Lines changed: 502 additions & 27 deletions

File tree

routines/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
# Routine catalog
22

3-
Status: **one executable routine**, source-evidenced at E3.
3+
Status: **two executable routines**, source-evidenced at E3.
44

55
`registry.json` is the executable routine inventory. `g36/coverage.json`
6-
records aggregate scope without duplicating that inventory. The current entry
7-
is one scalar specialization of G36 Generic AirEconomizerHighLimits; it does
6+
records aggregate scope without duplicating that inventory. The current entries
7+
are two scalar specializations of G36 Generic AirEconomizerHighLimits; they do
88
not establish class, family, donor-set, or guideline completeness.
99

1010
Revision ownership is explicit:

routines/g36/generic/air-economizer-high-limits/ashrae-differential-dry-bulb/card.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ ID is recorded separately in `provenance.json`.
4545
## Completeness
4646

4747
- Donor configuration: complete for this fixed variant.
48-
- Canonical class: partial; 1 of 12 donor variants is present.
48+
- Canonical class: partial; 2 of 12 donor variants are present.
4949
- Family package: not applicable to this leaf.
5050
- Declared guideline profile: partial.
5151

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2+
<html>
3+
4+
<body>
5+
6+
<h1>License</h1>
7+
<p>
8+
Modelica Buildings Library. Copyright (c) 1998-2026
9+
Modelica Association,
10+
International Building Performance Simulation Association (IBPSA),
11+
The Regents of the University of California, through Lawrence Berkeley National Laboratory
12+
(subject to receipt of any required approvals from the U.S. Dept. of Energy) and
13+
contributors.
14+
All rights reserved.
15+
</p>
16+
<p>
17+
NOTICE. This Software was developed under funding from the U.S. Department of Energy and
18+
the U.S. Government consequently retains certain rights.
19+
As such, the U.S. Government has been granted for itself and others acting on its behalf
20+
a paid-up, nonexclusive, irrevocable, worldwide license in the Software
21+
to reproduce, distribute copies to the public, prepare derivative works, and
22+
perform publicly and display publicly, and to permit other to do so.
23+
</p>
24+
<p>
25+
Redistribution and use in source and binary forms, with or without modification,
26+
are permitted provided that the following conditions are met:
27+
</p>
28+
<ol>
29+
<li>
30+
Redistributions of source code must retain the above copyright notice,
31+
this list of conditions and the following disclaimer.
32+
</li>
33+
<li>
34+
Redistributions in binary form must reproduce the above copyright notice,
35+
this list of conditions and the following disclaimer
36+
in the documentation and/or other materials provided with the distribution.
37+
</li>
38+
<li>
39+
Neither the names of the Modelica Association,
40+
International Building Performance Simulation Association (IBPSA),
41+
the University of California,
42+
Lawrence Berkeley National Laboratory,
43+
U.S. Dept. of Energy,
44+
nor the names of its contributors
45+
may be used to endorse or promote products derived from this software
46+
without specific prior written permission.
47+
</li>
48+
</ol>
49+
<p>
50+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
51+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
52+
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
53+
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
54+
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
55+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
56+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
57+
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
58+
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
59+
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
60+
</p>
61+
<p>
62+
You are under no obligation whatsoever to provide any bug fixes, patches,
63+
or upgrades to the features, functionality or performance of the source code
64+
("Enhancements") to anyone; however, if you choose to make your Enhancements
65+
available either publicly, or directly to Lawrence Berkeley National
66+
Laboratory, without imposing a separate written license agreement for such
67+
Enhancements, then you hereby grant the following license: a non-exclusive,
68+
royalty-free perpetual license to install, use, modify, prepare derivative
69+
works, incorporate into other computer software, distribute, and sublicense
70+
such enhancements or derivative works thereof, in binary and source code form.
71+
</p>
72+
<p>
73+
Note: The license is a revised 3 clause BSD license with an ADDED paragraph
74+
at the end that makes it easy to accept improvements.
75+
</p>
76+
77+
</body>
78+
79+
</html>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Third-party notices
2+
3+
`routine.cxf.jsonld` implements a fixed specialization of the Modelica
4+
Buildings `AirEconomizerHighLimits` block. Modelica Buildings is distributed
5+
under its revised 3-clause BSD terms, including the enhancement paragraph.
6+
The exact terms from `Buildings/legal.html` at `SOURCE_PIN` are preserved in
7+
`LICENSE-BUILDINGS.html`. No upstream name may be used for endorsement without
8+
prior written permission.
9+
10+
The copied graph and golden evidence came from Open Control Engine at
11+
`DONOR_PIN`. That repository offers its work under either MIT or Apache-2.0;
12+
this repository's root `LICENSE-MIT` and `LICENSE-APACHE` contain those terms.
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# Title 24 zone 2 differential dry-bulb economizer high limit
2+
3+
| Field | Value |
4+
|---|---|
5+
| Routine ID | `G36-GEN-AEHL__title24-differential-offset-1` |
6+
| Status | `source_evidenced` |
7+
| Evidence | E3 |
8+
| Runtime profile | `HostTick-v1` |
9+
10+
## Purpose
11+
12+
This fixed specialization computes the outdoor-air economizer temperature
13+
cutoff for California Title 24 climate zone 2 with differential dry-bulb
14+
control. It is one executable variant of
15+
`Buildings.Controls.OBC.ASHRAE.G36.Generic.AirEconomizerHighLimits`.
16+
17+
Fixed parameters:
18+
19+
- `eneStd = Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.California_Title_24`
20+
- `ecoHigLimCon = Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.DifferentialDryBulb`
21+
- `tit24CliZon = Buildings.Controls.OBC.ASHRAE.G36.Types.Title24ClimateZone.Zone_2`
22+
23+
## Interface and behavior
24+
25+
| Connector | Direction | Type | Unit | Quantity |
26+
|---|---|---|---|---|
27+
| `TRet` | input | Real scalar | K | ThermodynamicTemperature |
28+
| `TCut` | output | Real scalar | K | ThermodynamicTemperature |
29+
30+
For this specialization:
31+
32+
```text
33+
TCut = TRet - 1 K
34+
```
35+
36+
The fixture represents the selected zone 2/4/10 source branch with
37+
`Buildings.Controls.OBC.CDL.Reals.AddParameter(p=-1)`. It has no state,
38+
optional connectors, or host services beyond the tick call.
39+
40+
![Signal flow](diagram.svg)
41+
42+
## Replay and evidence
43+
44+
`vectors.json` replays all four donor reference rows with zero absolute
45+
tolerance: 289.25 → 288.25 K at 0 s, 293.15 → 292.15 K at 1 s, 297.5 →
46+
296.5 K at 2 s, and 301.75 → 300.75 K at 3 s. The graph and files under
47+
`golden/` are preserved from the donor and hash-locked in `provenance.json`.
48+
49+
The stable routine ID names the human contract. The evaluator-derived content
50+
ID is recorded separately in `provenance.json`.
51+
52+
## Completeness
53+
54+
- Donor configuration: complete for this fixed variant.
55+
- Canonical class: partial; 2 of 12 donor variants are present.
56+
- Family package: not applicable to this leaf.
57+
- Declared guideline profile: partial.
58+
59+
This card does not claim complete AirEconomizerHighLimits, generic-family,
60+
donor-set, or G36 coverage.
61+
62+
## Exclusions
63+
64+
Arrays, member lists, enum-domain inputs, optional or package connectors,
65+
state, controller traces, other climate-zone offsets, and fixed dry-bulb or
66+
other AirEconomizerHighLimits variants are outside this bundle. E4/E5,
67+
Modelica execution, and EnergyPlus execution are not claimed.
68+
69+
## References
70+
71+
- Modelica Buildings, `Buildings/Controls/OBC/ASHRAE/G36/Generic/AirEconomizerHighLimits.mo`, at `SOURCE_PIN`.
72+
- Open Control Engine fixture and independent oracle files at `DONOR_PIN`.
73+
- Redistribution terms: `LICENSE-BUILDINGS.html` and `THIRD_PARTY_NOTICES.md`.
Lines changed: 17 additions & 0 deletions
Loading
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#1
2+
# columns: time return_air_temperature temperature_cutoff
3+
double G36_generic_air_economizer_high_limits_title24_differential_offset_1_reference(4,3)
4+
0.0 289.25 288.25
5+
1.0 293.15 292.15
6+
2.0 297.5 296.5
7+
3.0 301.75 300.75
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
blocks: 1
2+
B0 decl=0 class=CDL.Reals.AddParameter instance_iri=Some("http://example.org#g36.source.generic_air_economizer_high_limits_title24_differential_offset_1.addPar")
3+
inputs=[0] outputs=[1]
4+
param p=Real(0xbff0000000000000)
5+
connectors: 2
6+
C0 block=B0 dir=In type=Real decl=0 iri=Some("http://example.org#g36.source.generic_air_economizer_high_limits_title24_differential_offset_1.TRet")
7+
C1 block=B0 dir=Out type=Real decl=1 iri=Some("http://example.org#g36.source.generic_air_economizer_high_limits_title24_differential_offset_1.addPar.y")
8+
connections: 0
9+
external_inputs: [0]
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#1
2+
# columns: time temperature_cutoff
3+
double G36_generic_air_economizer_high_limits_title24_differential_offset_1_temperature_cutoff(4,2)
4+
0.0 288.25
5+
1.0 292.15
6+
2.0 296.5
7+
3.0 300.75
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"class_path": "G36",
3+
"scenario": "generic_air_economizer_high_limits_title24_differential_offset_1",
4+
"signal": "temperature_cutoff",
5+
"tier": "A",
6+
"source": "hand-derived G36 sequence reference from fixture topology plus CDL / Buildings .mo semantics; independent re-derivation",
7+
"value_kind": "Real",
8+
"compare_regime": "exact G36 Tier-A sequence f64 trace (Value::bit_eq)",
9+
"n_samples": 4,
10+
"n_reference_columns": 3,
11+
"reference_csv": "reference.csv",
12+
"reference_columns": ["time", "return_air_temperature", "temperature_cutoff"],
13+
"inputs": [
14+
{ "name": "return_air_temperature", "value_kind": "Real", "values": [289.25, 293.15, 297.5, 301.75] }
15+
],
16+
"input": "Title24 differential dry-bulb high-limit bucket for California zones 2, 4, and 10; return_air_temperature=[289.25,293.15,297.5,301.75] K",
17+
"reference_rule": "AirEconomizerHighLimits.mo California_Title_24 + DifferentialDryBulb table selects addPar.p=-1 K, so TCut=TRet-1 K",
18+
"source_commit": "a131864e4c4df22ebcd52bb8da439de0087ac365",
19+
"source_files": "Buildings/Controls/OBC/ASHRAE/G36/Generic/AirEconomizerHighLimits.mo",
20+
"fixture_status": "supported-runtime-sequence source-verified composite",
21+
"format": "Modelica CombiTimeTable CSV (_spec/07 §9); signal CSV is time+one output; reference.csv is time+inputs+all outputs; ryu shortest-round-trip f64",
22+
"generator": "golden-gen 0.0.0",
23+
"depends_on_oce_blocks": false
24+
}

0 commit comments

Comments
 (0)