Skip to content

Commit

Permalink
Merge pull request #1553 from pnnl/RS/YJ/Rule_11-6_organized
Browse files Browse the repository at this point in the history
RS/YJ/Rule 11-6 (include only necessary codes)
  • Loading branch information
weilixu authored Dec 3, 2024
2 parents 8e7ddc4 + b63006e commit bf34583
Show file tree
Hide file tree
Showing 5 changed files with 246 additions and 21 deletions.
37 changes: 20 additions & 17 deletions docs/section11/Rule11-6.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,34 @@
**Schema Version:** 0.0.37
**Mandatory Rule:** True
**Rule ID:** 11-6
**Rule Description:** Piping losses shall not be modeled.
**Rule Description:** Piping losses shall not be modeled.
**Rule Assertion:** Options are PASS/FAIL/NOT_APPLICABLE/UNDETERMINED
**Appendix G Section Reference:** Table G3.1 #11, baseline column, i
**Appendix G Section Reference:** Table G3.1 #11, baseline column, i

**Evaluation Context:** Each SWH Distribution System
**Data Lookup:**
**Function Call:**

1. get_swh_components_associated_with_each_swh_distribution_system()
**Data Lookup:**
**Function Call:**

**Applicability Checks:**
- Every Baseline distribution system is applicable
- Every Baseline distribution system is applicable


## Rule Logic:
- Get to the `service_water_heating_distribution_systems` level
- Define a list that stores the pipe data: `piping_losses_modeled = []`
- Loop over the `service_water_piping` object: `for service_water_piping in swh_dist_sys_b["service_water_piping"]:`
- Store the current piping obj: `queue = deque([service_water_piping])`
- Check the `are_thermal_losses_modeled` value including all the child pipes:
- `while queue:`
- `current_piping = queue.popleft()`
- `children_piping = current_piping.get("child", [])`
- `queue.extend(children_piping)`
- `piping_losses_modeled_b.append(current_piping.get("are_thermal_losses_modeled"))`

## Rule Logic:
- use get_swh_components_associated_with_each_swh_distribution_system to get the SWH BATs and SWH equipment in the building: `swh_distribution_and_eq_dict = get_swh_components_associated_with_each_swh_distribution_system(B_RMD)`
- create a value indicating whether piping losses were modeled: `piping_losses_modeled = false`
- look at every ServiceWaterPiping connected to the distribution: `for piping_id in swh_distribution_and_eq_dict[distribution_id]["Piping"]`
- get the piping: `piping = get_component_by_id(piping_id, B_RMD, ServiceWaterPiping) `
- check if the piping has piping_losses_modeled: `if piping.are_thermal_losses_modeled:`
- set the piping_losses_modeled to true and go directly to rule assertion: `piping_losses_modeled = true: GO TO RULE_ASSERTION`

- **Rule Assertion - Zone:**
- Case1: piping losses are not modeled, PASS: `if !piping_losses_modeled: PASS`
- Case2: piping losses are modeled, FAIL: `else: FAIL`
- **Rule Assertion - Zone:**
- Case1: piping losses are not modeled, PASS: `if not any(piping_losses_modeled_b): PASS`
- Case2: piping losses are modeled, FAIL: `else: FAIL`


**Notes:**
Expand Down
4 changes: 1 addition & 3 deletions rct229/rulesets/ashrae9012019/section11/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,11 @@
# "section11rule3",
# "section11rule4",
# "section11rule5",
# "section11rule6",
"section11rule6",
# "section11rule7",
# "section11rule8",
# "section11rule9",
# "section11rule10",
# "section11rule11",
# "section11rule12",
"section11rule11",
"section11rule12",
"section11rule13",
Expand Down
81 changes: 81 additions & 0 deletions rct229/rulesets/ashrae9012019/section11/section11rule6.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
from collections import deque

from rct229.rule_engine.rule_base import RuleDefinitionBase
from rct229.rule_engine.rule_list_indexed_base import RuleDefinitionListIndexedBase
from rct229.rule_engine.ruleset_model_factory import produce_ruleset_model_description
from rct229.rulesets.ashrae9012019 import BASELINE_0
from rct229.utils.jsonpath_utils import find_all


class Section11Rule6(RuleDefinitionListIndexedBase):
"""Rule 6 of ASHRAE 90.1-2019 Appendix G Section 11 (Service Water Heating)"""

def __init__(self):
super(Section11Rule6, self).__init__(
rmds_used=produce_ruleset_model_description(
USER=False, BASELINE_0=True, PROPOSED=False
),
each_rule=Section11Rule6.RMDRule(),
index_rmd=BASELINE_0,
id="11-6",
description="Piping losses shall not be modeled.",
ruleset_section_title="Service Water Heating",
standard_section="Table G3.1 #11, baseline column, i",
is_primary_rule=True,
list_path="ruleset_model_descriptions[0]",
)

class RMDRule(RuleDefinitionListIndexedBase):
def __init__(self):
super(Section11Rule6.RMDRule, self).__init__(
rmds_used=produce_ruleset_model_description(
USER=False, BASELINE_0=True, PROPOSED=False
),
each_rule=Section11Rule6.RMDRule.SWHDistRule(),
index_rmd=BASELINE_0,
list_path="$.service_water_heating_distribution_systems[*]",
)

def is_applicable(self, context, data=None):
rmd_b = context.BASELINE_0

swh_dist_sys_list_b = find_all(
"$.service_water_heating_distribution_systems[*]", rmd_b
)

return swh_dist_sys_list_b

class SWHDistRule(RuleDefinitionBase):
def __init__(self):
super(Section11Rule6.RMDRule.SWHDistRule, self).__init__(
rmds_used=produce_ruleset_model_description(
USER=False,
BASELINE_0=True,
PROPOSED=False,
),
required_fields={
"$": ["service_water_piping"],
},
)

def get_calc_vals(self, context, data=None):
swh_dist_sys_b = context.BASELINE_0

piping_losses_modeled_b = []
for service_water_piping in swh_dist_sys_b["service_water_piping"]:
queue = deque([service_water_piping])
while queue:
current_piping = queue.popleft()
children_piping = current_piping.get("child", [])
queue.extend(children_piping)

piping_losses_modeled_b.append(
current_piping.get("are_thermal_losses_modeled")
)

return {"piping_losses_modeled_b": piping_losses_modeled_b}

def rule_check(self, context, calc_vals=None, data=None):
piping_losses_modeled_b = calc_vals["piping_losses_modeled_b"]

return not any(piping_losses_modeled_b)
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
{
"rule-11-6-a": {
"Section": 11,
"Rule": 6,
"Test": "a",
"test_description": "A one story, single zone building has service hot water piping. The service hot water piping losses are correctly not modeled.",
"expected_rule_outcome": "pass",
"standard": {
"rule_id": "11-6",
"ruleset_reference": "Table G3.1 #11, baseline column, i",
"rule_description": "Piping losses shall not be modeled.",
"applicable_rmr": "Baseline Model",
"rule_assertion": "=",
"comparison_value": "Expected Value",
"mandatory_rule": "Yes",
"schema_version": "0.0.34"
},
"rmd_transformations": {
"baseline": {
"id": "ASHRAE229 1",
"calendar": {
"is_leap_year": false
},
"data_timestamp": "2024-02-12T12:00Z",
"ruleset_model_descriptions": [
{
"id": "RMD 1",
"buildings": [
{
"id": "Building 1",
"building_segments": [
{
"id": "Building Segment 1",
"zones": [
{
"id": "Thermal Zone 1",
"floor_name": "Floor1",
"spaces": [
{
"id": "Space 1",
"service_water_heating_uses": [
{
"id": "SHW 1",
"served_by_distribution_system": "SHW Distribution 1"
}
]
}
]
}
]
}
]
}
],
"service_water_heating_distribution_systems": [
{
"id": "SHW Distribution 1",
"service_water_piping": [
{
"id": "SHW Piping 1",
"are_thermal_losses_modeled": false
}
]
}
],
"type": "BASELINE_0"
}
]
}
}
},
"rule-11-6-b": {
"Section": 11,
"Rule": 6,
"Test": "b",
"test_description": "A one story, single zone building has service hot water piping. The service hot water piping losses are modeled.",
"expected_rule_outcome": "fail",
"standard": {
"rule_id": "11-6",
"ruleset_reference": "Table G3.1 #11, baseline column, i",
"rule_description": "Piping losses shall not be modeled.",
"applicable_rmr": "Baseline Model",
"rule_assertion": "=",
"comparison_value": "Expected Value",
"mandatory_rule": "Yes",
"schema_version": "0.0.34"
},
"rmd_transformations": {
"baseline": {
"id": "ASHRAE229 1",
"calendar": {
"is_leap_year": false
},
"data_timestamp": "2024-02-12T12:00Z",
"ruleset_model_descriptions": [
{
"id": "RMD 1",
"buildings": [
{
"id": "Building 1",
"building_segments": [
{
"id": "Building Segment 1",
"zones": [
{
"id": "Thermal Zone 1",
"floor_name": "Floor1",
"spaces": [
{
"id": "Space 1",
"service_water_heating_space_type": "OFFICE",
"service_water_heating_uses": [
{
"id": "SHW 1",
"served_by_distribution_system": "SHW Distribution 1"
}
]
}
]
}
]
}
]
}
],
"service_water_heating_distribution_systems": [
{
"id": "SHW Distribution 1",
"service_water_piping": [
{
"id": "SHW Piping 1",
"are_thermal_losses_modeled": true
}
]
}
],
"type": "BASELINE_0"
}
]
}
}
}
}
2 changes: 1 addition & 1 deletion rct229/schema/ASHRAE229.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -5094,4 +5094,4 @@
},
"version": "0.0.36",
"$ref": "ASHRAE229.schema.json#/definitions/RulesetProjectDescription"
}
}

0 comments on commit bf34583

Please sign in to comment.