Skip to content

Commit

Permalink
Created rule 12-4 RDS
Browse files Browse the repository at this point in the history
  • Loading branch information
JacksonJ-KC committed Jun 27, 2024
1 parent 92ad5b9 commit 15eb969
Showing 1 changed file with 49 additions and 0 deletions.
49 changes: 49 additions & 0 deletions docs/section12/Rule12-4.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Receptacle - Rule 12-4
**Schema Version** 0.0.37
**Primary Rule:** True
**Rule ID:** 12-4
**Rule Description:** Computer room equipment schedules shall be modeled as a constant fraction of the peak design load per the following monthly schedule: Months 1, 5, 9 — 25%; Months 2, 6, 10 — 50%; Months 3, 7, 11 — 75%; Months 4, 8, 12 — 100%
**Appendix G Section:** G3.1.3.16
**Appendix G Section Reference:** None

**Applicability:** All required data elements exist for B_RMR
**Applicability Checks:**
1. Computer rooms are present in the baseline model

**Manual Check:** None
**Evaluation Context:** Each Miscellaneous Equipment object in the baseline model
**Data Lookup:** None
**Function Call:**
1) find_all
2) is_space_a_computer_room
3) compare_schedules

## Applicability Checks:
- Iterate through the spaces in the baseline RMD: `for space_b in find_all("$.buildings[*].building_segments[*].zones[*].spaces[*]", B_RMD):`
- Check if the space is a computer room: `if is_space_a_computer_room(space):`
- Iterate through the miscelleneous equipment loads: `for misc_equip_b in space_b.miscellaneous_equipment:`
- Check if the equipment is IT equipment: `if misc_equip_b.type == "INFORMATION_TECHNOLOGY_EQUIPMENT" and misc_equip_b.power > 0:`
- Rule is applicable: `return True`

## Rule Logic:
- Determine if it is a leap year: `is_leap_year = RPD.calendar.is_leap_year`
- Create a dictionary to map the month numbers to their respective fractions: `month_fractions = {1: 0.25, 2: 0.5, 3: 0.75, 4: 1, 5: 0.25, 6: 0.5, 7: 0.75, 8: 1, 9: 0.25, 10: 0.5, 11: 0.75, 12: 1}`
- Create a dictionary to map the number of days in each month: `days_in_month = {1: 31, 2: 29 if is_leap_year else 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}`
- Create an empty list to store the expected hourly values of the schedule: `expected_hourly_values = []`
- Iterate through the months of the year: `for month in range(1, 13):`
- Get the fraction for the month: `fraction = month_fractions[month]`
- Get the number of days in the month: `days = days_in_month[month]`
- Append the hourly fraction to the list: `expected_hourly_values.extend([fraction] * days * 24)`
- Create the mask schedule to be used for comparison: `mask_schedule = [1] * 8784 if is_leap_year else [1] * 8760`
- Get the multiplier schedule that was modeled for the equipment: `multiplier_schedule_b = misc_equip_b.multiplier_schedule.hourly_values`
- Compare the modeled schedule with the expected schedule: `comparison_data = compare_schedules(multiplier_schedule_b, expected_hourly_values, mask_schedule, is_leap_year)`

**Rule Assertion:**
- Case 1: If the modeled schedule matches the expected schedule for all hours, PASS:`if comparison_data["total_hours_matched"] == 8784 if is_leap_year else 8760: PASS`
- Case 2: Else, FAIL:`else: FAIL`


**Notes:**
1. None

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

0 comments on commit 15eb969

Please sign in to comment.