Skip to content

Latest commit

 

History

History
67 lines (57 loc) · 8.99 KB

File metadata and controls

67 lines (57 loc) · 8.99 KB

Airside System - Rule 4-11

Schema Version: 0.0.23
Mandatory Rule: True
Rule ID: 4-11

Rule Description: Fan schedules shall be modeled identically in the baseline and proposed unless Table G3.1 Section 4 baseline exceptions are applicable. Fan Schedules may be allowed to differ when Section 4 Baseline Column Exceptions #1, #2 Or #3 are applicable.

  1. Set points and schedules for HVAC systems that automatically provide occupant thermal comfort via means other than directly controlling the air dry-bulb and wet-bulb temperature may be allowed to differ, provided that equivalent levels of occupant thermal comfort are demonstrated via the methodology in ASHRAE Standard 55, Section 5.3.3, “Elevated Air Speed,” or Standard 55, Appendix B, “Computer Pro-gram for Calculation of PMV-PPD.”
  2. Schedules may be allowed to differ between proposed design and baseline building design when necessary to model nonstandard efficiency measures, provided that the revised schedules have been approved by the rating authority. Measures that may warrant use of different schedules include but are not limited to automatic lighting controls, automatic natural ventilation controls, automatic demand control ventilation controls, and automatic controls that reduce service water-heating loads. In no case shall schedules differ where the controls are manual (e.g., manual operation of light switches or manual operation of windows).
  3. Fan schedules may be allowed to differ when SectionG3.1.1(c) applies. Baseline HVAC system type 3 or 4 has been used for spaces (zones) that differ by more than 40 equivalent full load hrs/week from other spaces (zones) served by the system or when the total peak internal gains that differ by 10 Btu/h·ft2 or more from the average of other HVAC zones served by the system.

Rule Assertion: P-RMD = B-RMD
Appendix G Section: Table G3.1 Section 4
Appendix G Section Reference: None
Data Lookup: None
Evaluation Context: Evaluate each Zone Data Table

Applicability Checks: None

Function Call:

  1. get_baseline_system_types()
  2. get_aggregated_zone_hvac_fan_operating_schedule()
  3. match_data_element()
  4. get_dict_of_zones_hvac_sys_serving_specific_floor()
  5. get_list_hvac_systems_associated_with_zone()
  6. get_hvac_zone_list_w_area()

Rule Logic:

  • Get dictionary for finding baseline system types for hvac systems: baseline_hvac_sys_type_ids_dict_b = get_baseline_system_types(B_RMD)

  • Get dictionary with list of zones associated with each HVAC system: dict_hvac_sys_zones_served_p = get_hvac_zone_list_w_area(P_RMD)

  • For each zone in the P_RMD: for zone_p in P_RMD...Zone:

    • Reset schedule mismatch variable which is used to track if the schedules mismatches: schedule_mismatch = FALSE
    • Get the aggregated fan operating schedule for the proposed to compare to the baseline fan schedule: fan_schedule_p = get_aggregated_zone_hvac_fan_operating_schedule_p(zone_p.id, P_RMD)
    • Get aggregated fan operating schedule for the baseline to compare to proposed (should only be one system in the baseline but just in case we calculate the aggregated schedule): fan_schedule_b = get_aggregated_zone_hvac_fan_operating_schedule(match_data_element(B_RMD,Zone,zone_p.id).id, B_RMD)
    • Loop through each hour of the schedules and compare across the B_RMD and P_RMD, : for x in len(fan_schedule_b):
      • Check if schedules matches for each hour of the year, if there is a mismatch then set the schedule_mismatch boolean variable equal to TRUE: if fan_schedule_b.hourly_values(x) != fan_schedule_p.hourly_values(x):
        • Set schedule_mismatch boolean variable to TRUE: schedule_mismatch = TRUE
    • Reset proposed served by multizone boolean variable to FALSE: proposed_served_by_multizone = FALSE
    • Reset baseline served by multizone boolean variable to FALSE: baseline_served_by_multizone = FALSE
    • Reset system type (SZ versus MZ) match btw baseline and proposed boolean variable to FALSE: system_type_match_baseline_proposed = FALSE
    • Get baseline hvac system serving the zone (should only be one system per zone): hvac_b = match_data_element(B_RMD,Zone,zone_p.id).terminals[0].served_by_heating_ventilating_air_conditioning_system
    • Get the baseline system type: hvac_sys_type_b = baseline_hvac_sys_type_ids_dict_b.keys()[list(baseline_hvac_sys_type_ids_dict_b.values()).index(hvac_b.id)]
    • Check if the baseline system type is multi-zone, and set baseline_served_by_multizone boolean accordingly : if hvac_sys_type_b in ["SYS-5","SYS-5b","SYS-6", "SYS-6b","SYS-7","SYS-7a","SYS-7b","SYS-7c","SYS-8","SYS-8a","SYS-8b","SYS-8c"]:baseline_served_by_multizone = TRUE
    • Check if the zone is served by a multizone system in the proposed by first getting the list of hvac systems serving the zone in the proposed: list_hvac_systems_p = get_list_hvac_systems_associated_with_zone(P_RMD, zone_p.id)
      • Loop through each hvac system and check if any serve multiple zones: for hvac_pr in list_hvac_systems_p:
        • Check if the hvac system serves more than one zone: if len(list(dict_hvac_sys_zones_served_p[hvac_pr.id]["Zone_List"].values())) > 1:
          • Loop through terminal units associated with the zone to determine which is/are served by this HVAC system and check if it has reheat: for terminal_p in zone_p.terminals:
          • Check if the terminal unit is served by the HVAC system: if terminal_p.served_by_heating_ventilating_air_conditioning_system == hvac_pr.id:
            • Check if it has reheat, if it does then assume its a multizone unit and set the proposed served by multizone boolean variable to TRUE: if terminal_p.heating_capacity >0:proposed_served_by_multizone = TRUE
    • Check if single zone or multi-zone systems are modeled in both the baseline and proposed (i.e. if both boolean variables are TRUE then both modeled with MZ, if both FALSE then both modeled with SZ, if mismatch then there is a mismatch between the baseline and proposed): if proposed_served_by_multizone == baseline_served_by_multizone: system_type_match_baseline_proposed = True
    • Reset hvac type check (set to true below if there is a system type 5,6,7, or 8 on the floor) boolean variable to FALSE: hvac_type_check = FALSE
    • Get the floor name associated with the zone: floor_name = match_data_element(B_RMD,Zone,zone_p.id).floor_name
    • Get dictionary of zones and hvac systems associated with the floor name: dict_of_zones_hvac_systems_serving_specific_floor = get_dict_of_zones_hvac_sys_serving_specific_floor(floor_name,B_RMD)
    • Create list of hvac system serving the floor from the dictionary: list_hvac_sys_serving_floor = list(dict_of_zones_hvac_systems_serving_specific_floor.values())
    • Loop through and check if any systems are of type 5, 5b, 6, 6b, 7, 7a, 7b, 7c, 8, 8a, 8b, 8c: for hvac_flr in list_hvac_sys_serving_floor:
      • Check if the system is of type 5, 5b, 6, 6b, 7, 7a, 7b, 7c, 8, 8a, 8b, 8c: if baseline_hvac_sys_type_ids_dict_b.keys()[list(baseline_hvac_sys_type_ids_dict_b.values()).index(hvac_flr.id)] in ["SYS-5","SYS-5b","SYS-6, SYS-6b", SYS-7",SYS-7a",SYS-7b",SYS-7c",SYS-8",SYS-8a",SYS-8b",SYS-8c"]:
        • Set hvac_type_check boolean variable to TRUE: hvac_type_check = TRUE

    Rule Assertion:

    • Case 1: For each zone, hvac fan schedules match between the baseline and proposed and either single zone systems or multizone systems are both modeled in the baseline and proposed then PASS: if schedule_mismatch == FALSE and system_type_match_baseline_proposed == TRUE: outcome == "PASS"
    • Case 2: For each applicable zone, elif there is a fan schedule mismatch but Section G3.1.1(c) appears to apply then undetermined: elif schedule_mismatch == TRUE AND baseline_served_by_multizone == FALSE AND hvac_type_check == TRUE AND proposed_served_by_multizone == TRUE: outcome == "UNDETERMINED" and raise_message "THERE IS A FAN OPERATING SCHEDULE MISMATCH BETWEEN THE BASELINE AND PROPOSED BUT SECTION G3.1.1(c) APPEARS APPLICABLE. VERIFY MISMATCH IS APPROPRIATE PER SECTION G3.1.1(c) AND THAT THE FAN OPERATING SCHEDULE IN THE BASELINE IS IN ALIGNMENT WITH THE OCCUPANCY SCHEDULES."
    • Case 4: Else if, there is a schedule mismatch between the baseline and proposed then undetermined: elif schedule_mismatch == TRUE: outcome == "UNDETERMINED" and raise_message "THERE IS A FAN SCHEDULE MISMATCH BETWEEN THE BASELINE AND PROPOSED RMDs FOR THE HVAC SYSTEM(S) SERVING THIS ZONE. FAIL UNLESS TABLE G3.1 SECTION 4 BASELINE COLUMN EXCEPTIONS #1, #2 or #3 IS APPLICABLE"
    • Case 3: Else (schedules match between the baseline and proposed), undertermined: Else: outcome == "UNDETERMINED" and raise_message "FAN SCHEDULES MATCH BETWEEN THE BASELINE AND PROPOSED RMDs FOR THE HVAC SYSTEM(S) SERVING THIS ZONE. VERIFY THAT MATCHING SCHEDULES ARE APPROPRIATE IN THAT NONE OF THE SECTION 4 BASELINE COLUMN EXCEPTIONS #1, #2 or #3 ARE APPLICABLE"

Back