Skip to content

Commit

Permalink
Merge pull request #1269 from pnnl/develop
Browse files Browse the repository at this point in the history
Update master branch
  • Loading branch information
weilixu authored Jan 24, 2024
2 parents 44c0c7f + b074d3a commit 690b6dc
Show file tree
Hide file tree
Showing 608 changed files with 824,351 additions and 96,063 deletions.
2 changes: 1 addition & 1 deletion docs/_output_project_test_report_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ The following is an example of a JSON output file produced by the RCT.
"description": "Baseline roof assemblies must match the appropriate assembly maximum U-factors in Tables G3.4-1 through G3.4-8.",
"evaluation_type": "FULL",
"standard_section": "G3.1.2.2",
"data_group_name": "Surface",
"data_group_names": ["Surface"],
"evaluations": [
{
"data_group_id": "Surface 1",
Expand Down
102 changes: 56 additions & 46 deletions docs/_toc.md

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions docs/section18/Rule18-2.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,17 +48,17 @@
2. serves ALL the lab zones
3. is in a building with > 15,000cfm lab exhaust
- the function get_lab_zone_hvac_systems gets the hvac systems serving the lab zones. If this system is in the list, AND it is the only one in the list, then this is a lab zone system: `if hvac_system.id in? lab_zone_hvac_systems["LAB_ZONES_ONLY"] && len(lab_zone_hvac_systems["LAB_ZONES_ONLY"]) == 1:`
- if we can tell with 100% certainty that the building has > 15,000 cfm lab exhaust this system can pass and do_multi_zone_evaluation to FALSE: `if lab_zone_exhaust > 15000: result = PASS; do_multi_zone_evaluation = FALSE`
- if we can tell with 100% certainty that the building has > 15,000 cfm lab exhaust this system can pass and do_multi_zone_evaluation to FALSE: `if building_total_lab_zone_exhaust > 15000: result = PASS; do_multi_zone_evaluation = FALSE`
- otherwise, there *might* be > 15000 cfm exhaust, but we are not sure (the function get_lab_zone_hvac_systems relies on get_zone_target_baseline_system, which does the > 15000 cfm check, so we don't have to do it again): `else:`
- set result to UNDETERMINED and do_multi_zone_evaluation to FALSE: `result = UNDETERMINED; do_multi_zone_evaluation = FALSE`
- provide a note expaining the result: `note = "This system serves only lab zones, which is correct if the building has total lab exhaust greater than 15,000 cfm. However, we could not determine with accuracy the total building exhuast."`
- otherwise if the hvac system is in the list (but there is more than one HVAC system): `elif hvac_system.id in? lab_zone_hvac_systems["LAB_ZONES_ONLY]:`
- if we can tell with 100% certainty that the building has > 15,000 cfm lab exhaust, set result to FAIL: `if lab_zone_exhaust > 15000:`
- if we can tell with 100% certainty that the building has > 15,000 cfm lab exhaust, set result to FAIL: `if building_total_lab_zone_exhaust > 15000:`
- set result to fail: `result = FAIL`
- set do_multi_zone_evaluation to false FALSE: `do_multi_zone_evaluation = FALSE`
- provide a note to explain the result: `note = "This HVAC system serves lab zones in a building with > 15,000 cfm of laboratory exhaust. The baseline system should be type 5 or 7 and should serve ALL laboratory zones."`
- otherwise, the hvac system might be a system that serves both lab zones and regular zones: `elif hvac_system.id in? lab_zone_havc_systems["LAB_AND_OTHER"]:`
- if we can tell with 100% certainty that the building has > 15,000 cfm lab exhaust, set result to FAIL: `if lab_zone_exhaust > 15000:`
- if we can tell with 100% certainty that the building has > 15,000 cfm lab exhaust, set result to FAIL: `if building_total_lab_zone_exhaust > 15000:`
- set result to fail: `result = FAIL`
- set do_multi_zone_evaluation to FALSE: `do_multi_zone_evaluation = FALSE`
- provide a note to explain the result: `note = "This HVAC system serves lab zones in a building with > 15,000 cfm of laboratory exhaust. The baseline system for laboratory zones should be type 5 or 7 and should serve only and all laboratory zones."`
Expand All @@ -77,7 +77,7 @@
- now check if hvac_system2 serves any of the zones on the same floor as hvac_system. Get the zones served by hvac_system2: `zones_served_by_system2 = zones_and_terminal_unit_list_dict[hvac_system2_id]["ZONE_LIST"]`
- use set.intersection to see if any of these zones are on the same floor: `if(len(set(zones_served_by_system2).intersection(zones_on_floor))) > 0:`
- the system fails: `result = FAIL`
- UNLESS system_type is SYS_5 or SYS_7 AND all of the zones in hvac_system2 are lab zones: `if hvac_system2_id in? lab_zone_hvac_systems["LAB_ZONES_ONLY"] && len(lab_zone_hvac_systems["LAB_ZONES_ONLY"]) == 1 && lab_zone_exhaust > 15000: result = PASS`
- UNLESS system_type is SYS_5 or SYS_7 AND all of the zones in hvac_system2 are lab zones: `if hvac_system2_id in? lab_zone_hvac_systems["LAB_ZONES_ONLY"] && len(lab_zone_hvac_systems["LAB_ZONES_ONLY"]) == 1 && building_total_lab_zone_exhaust > 15000: result = PASS`
- otherwise then if it's the only lab zone system, but we aren't sure about the exhaust air volume, result = UNDETERMINED: `if hvac_system2_id in? lab_zone_hvac_systems["LAB_ZONES_ONLY"] && len(lab_zone_hvac_systems["LAB_ZONES_ONLY"]) == 1: result = UNDETERMINED; note = "This HVAC system is on the same floor as " + hvac_system2_id + ", which servese lab zones in the building. If the building has greater than 15,000 cfm of lab exhaust and " + hvac_system2_id + " is System type 5 or 7 serving only lab zones, this system passes, otherwise it fails"`
- otherwise the system isn't a lab system, set result to fail: `result = FAIL`

Expand Down
4 changes: 2 additions & 2 deletions docs/section18/Rule18-23.md → docs/section18/Rule18-3.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# HVAC_SystemZoneAssignment – Rule 18-23
# HVAC_SystemZoneAssignment – Rule 18-3
**Schema Version:** 0.0.28
**Mandatory Rule:** False
**Rule ID:** 18-23
**Rule ID:** 18-3

**Rule Description:** The lab exhaust fan shall be modeled as constant horsepower (kilowatts) reflecting constant-volume stack discharge with outdoor air bypass in the baseline

Expand Down
8 changes: 4 additions & 4 deletions docs/section19/Rule19-11.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
**Rule Description:** For systems that serve computer rooms, if the baseline system is HVAC System 11, it shall include an integrated fluid economizer meeting the requirements of Section 6.5.1.2 in the baseline building design.

**Rule Assertion:** Options NOT_APPLICABLE/UNDETERMINED
**Appendix G Section:** G3.1.2.6.1
**Appendix G Section:** Section G3.1.2.6.1
**90.1 Section Reference:** None

**Data Lookup:** None
Expand All @@ -24,15 +24,15 @@
## Rule Logic:
**Applicability Check 1 - Check if there are any Applicable Baseline System Types in the Project at All**
- Create a list of the target system types: `target_system_types = [HVAC_SYS.SYS_11]`
- Create dictionary of baseline system types: `baseline_system_types_dict = get_baseline_system_types(B_RMI)`
- Create dictionary of baseline system types: `baseline_system_types_dict = get_baseline_system_types(B_RMD)`
- Check if B-RMR is modeled with at least one air-side system that is of type 11, if yes then carry on, if no then NOT_APPLICABLE for the project: `if any(baseline_system_type_compare(system_type, target_sys_type, false) for system_type in baseline_hvac_system_dict.keys() for target_system_type in target_system_types):`
This segment identifies applicable HVAC system types (outcome for inapplicable system types will be NOT_APPLICABLE)
- For each hvac system in the B_RMI: `for hvac in B_RMI...HeatingVentilatingAirConditioningSystem:`
- For each hvac system in the B_RMD: `for hvac in B_RMD...HeatingVentilatingAirConditioningSystem:`
- Get the baseline system type: `sys_type = list(baseline_system_types_dict.keys())[list(baseline_system_types_dict.values()).index(hvac.id)])`
- Check if system type is of an applicable system type, if yes then carry on, if no then NOT_APPLICABLE outcome for the hvac system: `If baseline_system_type_compare(sys_type, HVAC_SYS.SYS_11, false) == TRUE: `

- **Rule Assertion:**
- Case 1: The system is modeled as baseline system type 11 and so the outcome is UNDETERMINED: `outcome = "UNDETERMINED" and raise_message "<Insert hvac.id> was modeled as baseline system type 11, conduct a manual check that an integrated fluid economizer meeting the requirements of Section 6.5.1.2 was modeled in the baseline building design."`
- Case 1: The system is modeled as baseline system type 11 and so the outcome is UNDETERMINED: `outcome = "UNDETERMINED" and raise_message "<Insert hvac.id> was modeled as baseline system type 11-1, conduct a manual check that an integrated fluid economizer meeting the requirements of Section 6.5.1.2 was modeled in the baseline building design."`


**Notes/Questions:** None
Expand Down
18 changes: 9 additions & 9 deletions docs/section19/Rule19-16.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
**Rule Description:** For zones served by baseline system types 9 & 10, if the proposed design includes a fan or fans sized and controlled to provide non-mechanical cooling, the baseline building design shall include a separate fan to provide nonmechanical cooling, sized and controlled the same as the proposed design.

**Rule Assertion:** Options NOT_APPLICABLE/UNDETERMINED
**Appendix G Section:** G3.1.2.8.2
**Appendix G Section:** Section G3.1.2.8.2
**90.1 Section Reference:** None

**Data Lookup:** None
Expand All @@ -18,26 +18,26 @@

**Function Calls:**
1. get_baseline_system_types
2. Get_list_hvac_systems_associated_with_zone
2. get_list_hvac_systems_associated_with_zone
3. baseline_system_type_compare
4. match_data_element


## Rule Logic:
**Applicability Check 1 - Check if there are any Applicable Baseline System Types in the Project at All**
- Create a list of the target system types: `target_system_types = [HVAC_SYS.SYS_9, HVAC_SYS.SYS_10]`
- Create dictionary of baseline system types: `baseline_system_types_dict = get_baseline_system_types(B_RMI)`
- Create dictionary of baseline system types: `baseline_system_types_dict = get_baseline_system_types(B_RMD)`
- Check if B-RMR is modeled with at least one air-side system that is of type 9 or 10, if yes then carry on, if no then NOT_APPLICABLE for the project: `if any(baseline_system_type_compare(system_type, target_sys_type, false) for system_type in baseline_hvac_system_dict.keys() for target_system_type in target_system_types):`
This segment identifies applicable zones (outcome for inapplicable zones will be NOT_APPLICABLE)
- For each Zone in the B_RMI: `for zone in B_RMI...Zone:`
- For each Zone in the B_RMD: `for zone in B_RMD...Zone:`
- Reset the zone_served_by_sys_9_or_10 boolean variable to FALSE: `zone_served_by_sys_9_or_10 = FALSE`
- Reset zone_hvac_has_non_mech_cooling boolean variable to false: `zone_hvac_has_non_mech_cooling = False`
- Reset hvac_has_non_mech_cooling boolean variable to false: `hvac_has_non_mech_cooling = False`
- Get the analogous zone object in the P_RMI: `zone_p = match_data_element(P_RMR,Zone,zone.id)`
- Get list of hvac systems serving this zone in the proposed design model: `hvac_sys_list_p = Get_list_hvac_systems_associated_with_zone(P_RMI, zone_p)`
- Get list of hvac systems serving this zone in the proposed design model: `hvac_sys_list_p = get_list_hvac_systems_associated_with_zone(P_RMI, zone_p)`
- Check if any of the hvac systems serving the zone have non-mechanical cooling as the cooling_system type: `for hvac_p in hvac_sys_list_P:`
- Check if the system has non-mechanical cooling: `if hvac_p.cooling_system.cooling_system_options == "NON_MECHANICAL": zone_hvac_has_non_mech_cooling = True`
- Check if the zone has non-mechanical cooling in the proposed design defined at the zone level or if zone_hvac_has_non_mech_cooling equals true, if false for both then the zone is NOT_APPLICABLE, otherwise carry on: `If (zone_p.non_mechanical_cooling_fan_airflow != Null AND zone_p.non_mechanical_cooling_fan_airflow != 0) or zone_hvac_has_non_mech_cooling == True:`
- Get list of the HVAC systems associated with the zone in the baseline: `hvac_sys_list_b = Get_list_hvac_systems_associated_with_zone(B_RMI, zone)`
- Check if the system has non-mechanical cooling: `if hvac_p.cooling_system.type == "NON_MECHANICAL": hvac_has_non_mech_cooling = True`
- Check if the zone has non-mechanical cooling in the proposed design defined at the zone level or if hvac_has_non_mech_cooling equals true, if false for both then the zone is NOT_APPLICABLE, otherwise carry on: `If (zone_p.non_mechanical_cooling_fan_airflow != Null AND zone_p.non_mechanical_cooling_fan_airflow != 0) or hvac_has_non_mech_cooling == True:`
- Get list of the HVAC systems associated with the zone in the baseline: `hvac_sys_list_b = get_list_hvac_systems_associated_with_zone(B_RMD, zone)`
- Check if any are of system 9 or 10: `for hvac in hvac_sys_list_b:`
- Get the baseline system type: `sys_type = list(baseline_system_types_dict.keys())[list(baseline_system_types_dict.values()).index(hvac.id)])`
- Check if system type is of an applicable system type: `If (baseline_system_type_compare(sys_type, HVAC_SYS.SYS_9, false) == TRUE OR baseline_system_type_compare(sys_type, HVAC_SYS.SYS_10, false) == TRUE): zone_served_by_sys_9_or_10 = TRUE`
Expand Down
Loading

0 comments on commit 690b6dc

Please sign in to comment.