-
Notifications
You must be signed in to change notification settings - Fork 7
RDS New Rule Section 12 - 2019 & 2022 #1846
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
Merged
Merged
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,44 @@ | ||
| # Receptacle - Rule 12-5 | ||
| **Schema Version** 0.1.7 | ||
| **Primary Rule:** True | ||
| **Rule ID:** 12-5 | ||
| **Rule Description:** Receptacle and process loads shall always be included in simulations of the building. These loads shall be included when calculating the proposed building performance and the baseline building performance as required by Section G1.2.1. | ||
| **Appendix G Section:** Table G3.1-12 Proposed Building Performance column | ||
| **Appendix G Section Reference:** None | ||
|
|
||
| **Applicability:** This rule applies to all proposed models. | ||
| **Applicability Checks:** | ||
| 1. Always applicable | ||
|
|
||
| **Manual Check:** None | ||
| **Evaluation Context:** P_RMD, B_RMD | ||
| **Data Lookup:** None | ||
| **Function Call:** | ||
| 1. get_schedule_multiplier_hourly_value_or_default | ||
|
|
||
|
|
||
| ## Rule Logic: | ||
| - Iterate through the miscellaneous equipment data groups in the proposed model: `for misc_equipment_p in P_RMD...miscellaneous_equipment:` | ||
| - Get the equivalent full load hours (EFLH) for the assigned schedule: `schedule_eflh_p = sum(get_schedule_multiplier_hourly_value_or_default(P_RMD, misc_equipment_p["multiplier_schedule"], [0]))` | ||
| - Determine if the miscellaneous equipment power is greater than 0 and has either sensible or latent fractions greater than 0, and the assigned schedule has more than 0 EFLH then the loads are included in the building: `loads_included = misc_equipment_p.power > 0 and (misc_equipment_p.sensible_fraction > 0 or misc_equipment_p.latent_fraction > 0) and schedule_eflh_p > 0` | ||
| - End iteration early if a load is included: `if loads_included_p: break` | ||
| - Iterate through the proposed output instance end use results: | ||
| - Determine if the proposed output instance has an end use result with type MISC_EQUIPMENT, INDUSTRIAL_PROCESS, OFFICE_EQUIPMENT, COMPUTER_SERVERS, or COMMERCIAL_COOKING and greater than 0 annual site energy use: `has_annual_energy_use_p = any(result for result in P_RMD.model_output.annual_end_use_results if result.type in ["MISC_EQUIPMENT", "INDUSTRIAL_PROCESS", "OFFICE_EQUIPMENT", "COMPUTER_SERVERS", "COMMERCIAL_COOKING"] and result.annual_site_energy_use > 0)` | ||
| - End iteration early if a matching end use result is found: `if has_annual_energy_use_p: break` | ||
| - Iterate through the miscellaneous equipment data groups in the baseline model: `for misc_equipment_b in P_RMD...miscellaneous_equipment:` | ||
| - Get the equivalent full load hours (EFLH) for the assigned schedule: `schedule_eflh_b = sum(get_schedule_multiplier_hourly_value_or_default(P_RMD, misc_equipment_b["multiplier_schedule"], [0]))` | ||
| - Determine if the miscellaneous equipment power is greater than 0 and has either sensible or latent fractions greater than 0, and the assigned schedule has more than 0 EFLH then the loads are included in the building: `loads_included = misc_equipment_b.power > 0 and (misc_equipment_b.sensible_fraction > 0 or misc_equipment_b.latent_fraction > 0) and schedule_eflh_b > 0` | ||
| - End iteration early if a load is included: `if loads_included_b: break` | ||
| - Iterate through the baseline output instance end use results: | ||
| - Determine if the proposed output instance has an end use result with type MISC_EQUIPMENT, INDUSTRIAL_bROCESS, OFFICE_EQUIPMENT, COMPUTER_SERVERS, or COMMERCIAL_COOKING and greater than 0 annual site energy use: `has_annual_energy_use_b = any(result for result in P_RMD.model_output.annual_end_use_results if result.type in ["MISC_EQUIPMENT", "INDUSTRIAL_PROCESS", "OFFICE_EQUIPMENT", "COMPUTER_SERVERS", "COMMERCIAL_COOKING"] and result.annual_site_energy_use > 0)` | ||
| - End iteration early if a matching end use result is found: `if has_annual_energy_use_b: break` | ||
|
|
||
| - **Rule Assertion:** | ||
| - Case 1: If the proposed and baseline models have miscellaneous equipment loads and end use results: PASS `if loads_included_b and loads_included_p and has_annual_energy_use_b and has_annual_energy_use_p:` PASS` | ||
| - Case 2: Else: FAIL and let the user know which part(s) caused the failure: `else: outcome = FAIL and raise_message(" | ".join(filter(None, [f"Proposed: No misc. loads [power={misc_equipment_p.power}, sens={misc_equipment_p.sensible_fraction}, lat={misc_equipment_p.latent_fraction}, EFLH={schedule_eflh_p}]" if not loads_included_p else "", "Proposed: No annual end use energy." if not has_annual_energy_use_p else "", f"Baseline: No misc. loads [power={misc_equipment_b.power}, sens={misc_equipment_b.sensible_fraction}, lat={misc_equipment_b.latent_fraction}, EFLH={schedule_eflh_b}]" if not loads_included_b else "", "Baseline: No annual end use energy." if not has_annual_energy_use_b else ""])))` | ||
|
|
||
|
|
||
| **Notes:** | ||
| 1. Agree on the MiscellaneousEquipment types that are included? MISC_EQUIPMENT, INDUSTRIAL_PROCESS, OFFICE_EQUIPMENT, COMPUTER_SERVERS, or COMMERCIAL_COOKING | ||
|
|
||
| - **[Back](../_toc.md)** | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this depends what we're targeting with this RDS. Are we targeting both receptacle and process loads? I assume we are. If that is the case, I think what you have included makes sense.
I was tempted to suggest we include refrigeration equipment but that is covered by another section so I think makes sense to exclude it here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I looked up what all should be included and 90.1 is not clear on what in included in process load/energy/application. Anything that is not H/C/lighting could be considered process. In either case, this looks good to me