Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RDS/JDJ/Rule 12-1 #1348

Merged
merged 9 commits into from
Jul 16, 2024
Merged
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 35 additions & 34 deletions docs/section12/Rule12-1.md
Original file line number Diff line number Diff line change
@@ -1,36 +1,37 @@

# Receptacle - Rule 12-1

# Receptacles – Rule 12-1
**Schema Version:** 0.0.36
**Mandatory Rule:** True
**Rule ID:** 12-1
**Rule Description:** Number of spaces modeled in User RMR and Baseline RMR are the same
**Rule Assertion:** Baseline RMR = User RMR
**Appendix G Section:** Section Table G3.1-12 Modeling Requirements for the Proposed design
**Appendix G Section Reference:** None

**Applicability:** All required data elements exist for B_RMR and U_RMR
**Applicability Checks:** None
**Manual Check:** None
**Evaluation Context:** Each Data Element
**Rule Description:** Receptacle and process power shall be modeled as identical to the proposed design
**Rule Assertion:** B-RMD = P-RMD
**Appendix G Section:** G3.1
**Appendix G Section Reference:** Table G3.1-12
**Data Lookup:** None

## Rule Logic:

- Get the total number of spaces in the building segment in the User model: ```for building_segment_user in U_RMR.building.building_segments:```

- For each thermal_block in building segment: ```thermal_block_user in building_segment_user.thermal_blocks:```

- For each zone in thermal block: ```zone_user in thermal_block_user.zones:```

- For each space in zone, add to the total number of spaces in the User model: ```for space_user in zone_user.spaces: num_of_spaces_user += 1```

- Get the total number of spaces in the building segment in the Baseline model: ```for building_segment_baseline in B_RMR.building.building_segments:```

- For each thermal_block in building segment: ```thermal_block_baseline in building_segment.thermal_blocks:```

- For each zone in thermal block: ```zone_baseline in thermal_block_baseline.zones:```

- For each space in zone, add to the total number of spaces in the Baseline model: ```for space_baseline in zone_baseline.spaces: num_of_spaces_baseline += 1```

**Rule Assertion:** ```num_of_spaces_user == num_of_spaces_baseline```

**[Back](../_toc.md)**
**Evaluation Context:** Each RPD

**Applicability Checks:**
KarenWGard marked this conversation as resolved.
Show resolved Hide resolved
N/A

**Function Call:**
match_data_element

## Rule Logic:
- Store a list of any miscellaneous equipment power where proposed is greater than baseline: `unexpected_misc_equipment_power = []`
- Store a list of any miscellaneous equipment power where proposed is less than baseline: `reduced_misc_equipment_power = []`
- For each miscellaneous equipment load in the baseline RMD: `for misc_equipment_b in B_RMD...miscellaneous_equipment:`
- Get the corresponding miscellaneous equipment load in the proposed RMD: `misc_equipment_p = match_data_element(P_RMD, MiscellaneousEquipment, misc_equipment_b.id)`
- Get the miscellaneous equipment power in the proposed RMD: `misc_equipment_power_p = misc_equipment_p.power`
- Get the miscellaneous equipment power in the baseline RMD: `misc_equipment_power_b = misc_equipment_b.power`
- If the miscellaneous equipment power in the baseline RMD is greater than the miscellaneous equipment power in the proposed RMD: `if misc_equipment_power_b > misc_equipment_power_p:`
- Append the miscellaneous equipment info for reporting: `reduced_misc_equipment_power.append({"id": misc_equipment_b.id, "baseline_power": misc_equipment_power_b, "proposed_power": misc_equipment_power_p})`
- If the miscellaneous equipment power in the baseline RMD is less than the miscellaneous equipment power in the proposed RMD: `elif misc_equipment_power_b < misc_equipment_power_p:`
- Append the miscellaneous equipment info for reporting: `unexpected_misc_equipment_power.append({"id": misc_equipment_b.id, "baseline_power": misc_equipment_power_b, "proposed_power": misc_equipment_power_p})`
**Rule Assertion:**
- Case 1: If all equipment power was modeled identically: PASS `if len(unexpected_misc_equipment_power) == 0 and len(reduced_misc_equipment_power) == 0: PASS`
- Case 2: Else if any equipment power is reduced in the proposed: UNDETERMINED: `elif len(unexpected_misc_equipment_power) == 0: UNDETERMINED and raise_message="The proposed building miscellaneous equipment load is less than the baseline, which is only permitted when the model is being used to quantify performance that exceeds the requirements of Standard 90.1."`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My understanding is Rule 1-7 will check and highlight these outcome so this rule essentially, provides more detail messages about the failures?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MiscellaneousEquipment.power is set to FALSE for the AppG B_RMD Equals P_RMD column in the extra schema so 1-6 will not check this (1-7 is for proposed vs. user). False is appropriate for 1-6 and we check in this rule instead because when the project is for a beyond-code program the proposed is allowed to be less than the baseline, but we are unable to tell if the reduction was correctly applied for the beyond code program so outcome is UNDETERMINED.

If proposed is greater than the baseline, FAIL. Also, as Christina pointed out, if RPD.compliance_path == CODE_COMPLIANT, any difference between proposed and baseline is a FAIL.

- Case 2: Else: `FAIL`
JacksonJ-KC marked this conversation as resolved.
Show resolved Hide resolved

**Notes/Questions:**
None

**[Back](../_toc.md)**
Loading