From c47346227657cc8553a9bbca80c593f4a5208841 Mon Sep 17 00:00:00 2001 From: Jackson Jarboe <122476654+JacksonJ-KC@users.noreply.github.com> Date: Tue, 30 Jul 2024 10:38:49 -0400 Subject: [PATCH 1/3] suggested updates --- .../section19/section19rule18.py | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/rct229/rulesets/ashrae9012019/section19/section19rule18.py b/rct229/rulesets/ashrae9012019/section19/section19rule18.py index 1b8cd13efa..1c9ea7b148 100644 --- a/rct229/rulesets/ashrae9012019/section19/section19rule18.py +++ b/rct229/rulesets/ashrae9012019/section19/section19rule18.py @@ -22,11 +22,13 @@ get_fan_system_object_supply_return_exhaust_relief_total_power_flow, ) from rct229.schema.config import ureg +from rct229.schema.schema_enums import SchemaEnums from rct229.utils.assertions import getattr_ from rct229.utils.jsonpath_utils import find_all, find_one from rct229.utils.pint_utils import ZERO from rct229.utils.std_comparisons import std_equal +ENERGY_RECOVERY = SchemaEnums.schema_enums["EnergyRecoveryOptions"] APPLICABLE_SYS_TYPES = [ HVAC_SYS.SYS_3, HVAC_SYS.SYS_4, @@ -172,9 +174,7 @@ def get_calc_vals(self, context, data=None): ) supply_flow_b = fan_sys_info_b["supply_fans_airflow"].to(ureg.cfm) - more_than_one_supply_fan_b = ( - fan_sys_info_b["supply_fans_qty"] != 1 - ) # the reason why > 1 isn't used is to prevent an error when no supply fan exists + exactly_one_supply_fan = fan_sys_info_b["supply_fans_qty"] == 1 total_fan_power_b = ( ( fan_sys_info_b["supply_fans_power"] @@ -183,7 +183,7 @@ def get_calc_vals(self, context, data=None): + fan_sys_info_b["relief_fans_power"] + zonal_exhaust_fan_elec_power_b ) - if not more_than_one_supply_fan_b + if exactly_one_supply_fan else ZERO.POWER ).to(ureg.hp) @@ -191,7 +191,8 @@ def get_calc_vals(self, context, data=None): more_than_one_exhaust_fan_and_energy_rec_is_relevant_b = False if ( fan_sys_b.get("air_energy_recovery") - and fan_sys_info_b["exhaust_fans_qty"] == 1 + and fan_sys_b["air_energy_recovery"].get("type") != ENERGY_RECOVERY.NONE + and fan_sys_info_b["exhaust_fans_qty"] > 1 ): more_than_one_exhaust_fan_and_energy_rec_is_relevant_b = True enthalpy_reco_ratio_b = getattr_( @@ -257,7 +258,7 @@ def get_calc_vals(self, context, data=None): min_fan_wattage_b = min_BHP_b / min_motor_efficiency_b return { - "more_than_one_supply_fan_b": more_than_one_supply_fan_b, + "exactly_one_supply_fan": exactly_one_supply_fan, "more_than_one_exhaust_fan_and_energy_rec_is_relevant_b": more_than_one_exhaust_fan_and_energy_rec_is_relevant_b, "total_fan_power_b": total_fan_power_b, "expected_fan_wattage_b": expected_fan_wattage_b, @@ -265,7 +266,7 @@ def get_calc_vals(self, context, data=None): } def manual_check_required(self, context, calc_vals=None, data=None): - more_than_one_supply_fan_b = calc_vals["more_than_one_supply_fan_b"] + exactly_one_supply_fan = calc_vals["exactly_one_supply_fan"] more_than_one_exhaust_fan_and_energy_rec_is_relevant_b = calc_vals[ "more_than_one_exhaust_fan_and_energy_rec_is_relevant_b" ] @@ -273,7 +274,7 @@ def manual_check_required(self, context, calc_vals=None, data=None): expected_fan_wattage_b = calc_vals["expected_fan_wattage_b"] return ( - more_than_one_supply_fan_b + not exactly_one_supply_fan or more_than_one_exhaust_fan_and_energy_rec_is_relevant_b or ( not std_equal(total_fan_power_b, expected_fan_wattage_b) @@ -288,7 +289,7 @@ def get_manual_check_required_msg(self, context, calc_vals=None, data=None): more_than_one_exhaust_fan_and_energy_rec_is_relevant_b = calc_vals[ "more_than_one_exhaust_fan_and_energy_rec_is_relevant_b" ] - more_than_one_supply_fan_b = calc_vals["more_than_one_supply_fan_b"] + exactly_one_supply_fan = calc_vals["exactly_one_supply_fan"] expected_fan_wattage_b = calc_vals["expected_fan_wattage_b"] black_word = ( @@ -299,7 +300,7 @@ def get_manual_check_required_msg(self, context, calc_vals=None, data=None): undetermined_msg = "" if ( - more_than_one_supply_fan_b + not exactly_one_supply_fan or more_than_one_exhaust_fan_and_energy_rec_is_relevant_b ): undetermined_msg = ( From 5852f3b828619c7829e482fdd8639f33de4225c4 Mon Sep 17 00:00:00 2001 From: Jackson Jarboe <122476654+JacksonJ-KC@users.noreply.github.com> Date: Sun, 4 Aug 2024 00:23:01 -0400 Subject: [PATCH 2/3] nonprimary tcds 21-14 and 21-15 --- .../ashrae9012019/section21/rule_21_14.json | 279 +++++++++ .../ashrae9012019/section21/rule_21_15.json | 279 +++++++++ .../section21_boiler_tcd_master.json | 554 ++++++++++++++++++ 3 files changed, 1112 insertions(+) create mode 100644 rct229/ruletest_engine/ruletest_jsons/ashrae9012019/section21/rule_21_14.json create mode 100644 rct229/ruletest_engine/ruletest_jsons/ashrae9012019/section21/rule_21_15.json diff --git a/rct229/ruletest_engine/ruletest_jsons/ashrae9012019/section21/rule_21_14.json b/rct229/ruletest_engine/ruletest_jsons/ashrae9012019/section21/rule_21_14.json new file mode 100644 index 0000000000..3f7bd53a08 --- /dev/null +++ b/rct229/ruletest_engine/ruletest_jsons/ashrae9012019/section21/rule_21_14.json @@ -0,0 +1,279 @@ +{ + "rule-21-14-a": { + "Section": 21, + "Rule": 14, + "Test": "a", + "test_description": "The project has one building segment with two zones served by a baseline system type 7 that uses purchased hot water.", + "expected_rule_outcome": "undetermined", + "standard": { + "rule_id": "21-14", + "ruleset_reference": "G3.1.3.4", + "rule_description": "When the baseline building is modeled with a hot water plant, served by purchased HW system, hot water supply temperature reset is not modeled. ", + "applicable_rmr": "Baseline Model", + "rule_assertion": "=", + "comparison_value": "Expected Value", + "primary_rule": "Full", + "schema_version": "0.0.36" + }, + "rmd_transformations": { + "baseline": { + "id": "ASHRAE229 1", + "data_timestamp": "2024-02-12T09:00Z", + "ruleset_model_descriptions": [ + { + "id": "RMD 1", + "buildings": [ + { + "id": "Building 1", + "building_open_schedule": "Required Building Schedule 1", + "building_segments": [ + { + "id": "Building Segment 1", + "zones": [ + { + "id": "Thermal Zone 1", + "thermostat_cooling_setpoint_schedule": "Required Cooling Schedule 1", + "thermostat_heating_setpoint_schedule": "Required Heating Schedule 1", + "terminals": [ + { + "id": "VAV Air Terminal 1", + "is_supply_ducted": true, + "heating_source": "HOT_WATER", + "heating_from_loop": "Purchased HW Loop 1", + "type": "VARIABLE_AIR_VOLUME", + "served_by_heating_ventilating_air_conditioning_system": "System 7" + } + ] + }, + { + "id": "Thermal Zone 2", + "thermostat_cooling_setpoint_schedule": "Required Cooling Schedule 1", + "thermostat_heating_setpoint_schedule": "Required Heating Schedule 1", + "terminals": [ + { + "id": "VAV Air Terminal 2", + "is_supply_ducted": true, + "heating_source": "HOT_WATER", + "type": "VARIABLE_AIR_VOLUME", + "served_by_heating_ventilating_air_conditioning_system": "System 7", + "heating_from_loop": "Purchased HW Loop 1" + } + ] + } + ], + "heating_ventilating_air_conditioning_systems": [ + { + "id": "System 7", + "preheat_system": { + "id": "Preheat Coil 1", + "type": "FLUID_LOOP", + "hot_water_loop": "Purchased HW Loop 1" + }, + "fan_system": { + "id": "VAV Fan System 1", + "fan_control": "VARIABLE_SPEED_DRIVE", + "supply_fans": [ + { + "id": "Supply Fan 1" + } + ], + "return_fans": [ + { + "id": "Return Fan 1" + } + ] + }, + "cooling_system": { + "id": "CHW Coil 1", + "type": "FLUID_LOOP", + "chilled_water_loop": "Chilled Water Loop 1" + } + } + ] + } + ] + } + ], + "external_fluid_sources": [ + { + "id": "Purchased HW 1", + "loop": "Purchased HW Loop 1", + "type": "HOT_WATER" + } + ], + "pumps": [ + { + "id": "HW Pump 1", + "loop_or_piping": "Purchased HW Loop 1", + "speed_control": "FIXED_SPEED" + }, + { + "id": "CHW Pump 1", + "loop_or_piping": "Chilled Water Loop 1", + "speed_control": "FIXED_SPEED" + } + ], + "fluid_loops": [ + { + "id": "Purchased HW Loop 1", + "type": "HEATING" + }, + { + "id": "Chilled Water Loop 1", + "type": "COOLING" + } + ], + "type": "BASELINE_0" + } + ] + } + } + }, + "rule-21-14-b": { + "Section": 21, + "Rule": 14, + "Test": "b", + "test_description": "The project has one building segment with two zones served by a baseline system type 7 that does not use purchased hot water.", + "expected_rule_outcome": "not_applicable", + "standard": { + "rule_id": "21-14", + "ruleset_reference": "G3.1.3.4", + "rule_description": "When the baseline building is modeled with a hot water plant, served by purchased HW system, hot water supply temperature reset is not modeled. ", + "applicable_rmr": "Baseline Model", + "rule_assertion": "=", + "comparison_value": "Expected Value", + "primary_rule": "Full", + "schema_version": "0.0.36" + }, + "rmd_transformations": { + "baseline": { + "id": "ASHRAE229 1", + "data_timestamp": "2024-02-12T09:00Z", + "ruleset_model_descriptions": [ + { + "id": "RMD 1", + "buildings": [ + { + "id": "Building 1", + "building_open_schedule": "Required Building Schedule 1", + "building_segments": [ + { + "id": "Building Segment 1", + "zones": [ + { + "id": "Thermal Zone 1", + "thermostat_cooling_setpoint_schedule": "Required Cooling Schedule 1", + "thermostat_heating_setpoint_schedule": "Required Heating Schedule 1", + "terminals": [ + { + "id": "VAV Air Terminal 1", + "is_supply_ducted": true, + "heating_source": "HOT_WATER", + "heating_from_loop": "Boiler Loop 1", + "type": "VARIABLE_AIR_VOLUME", + "served_by_heating_ventilating_air_conditioning_system": "System 7" + } + ] + }, + { + "id": "Thermal Zone 2", + "thermostat_cooling_setpoint_schedule": "Required Cooling Schedule 1", + "thermostat_heating_setpoint_schedule": "Required Heating Schedule 1", + "terminals": [ + { + "id": "VAV Air Terminal 2", + "is_supply_ducted": true, + "heating_source": "HOT_WATER", + "type": "VARIABLE_AIR_VOLUME", + "served_by_heating_ventilating_air_conditioning_system": "System 7", + "heating_from_loop": "Boiler Loop 1" + } + ] + } + ], + "heating_ventilating_air_conditioning_systems": [ + { + "id": "System 7", + "preheat_system": { + "id": "Preheat Coil 1", + "type": "FLUID_LOOP", + "hot_water_loop": "Boiler Loop 1" + }, + "fan_system": { + "id": "VAV Fan System 1", + "fan_control": "VARIABLE_SPEED_DRIVE", + "supply_fans": [ + { + "id": "Supply Fan 1" + } + ], + "return_fans": [ + { + "id": "Return Fan 1" + } + ] + }, + "cooling_system": { + "id": "CHW Coil 1", + "type": "FLUID_LOOP", + "chilled_water_loop": "Secondary CHW Loop 1" + } + } + ] + } + ] + } + ], + "boilers": [ + { + "id": "Boiler 1", + "loop": "Boiler Loop 1", + "energy_source_type": "NATURAL_GAS" + } + ], + "chillers": [ + { + "id": "Chiller 1", + "cooling_loop": "Chiller Loop 1" + } + ], + "pumps": [ + { + "id": "Boiler Pump 1", + "loop_or_piping": "Boiler Loop 1", + "speed_control": "FIXED_SPEED" + }, + { + "id": "Chiller Pump 1", + "loop_or_piping": "Chiller Loop 1", + "speed_control": "FIXED_SPEED" + }, + { + "id": "Secondary CHW Pump", + "loop_or_piping": "Secondary CHW Loop 1", + "speed_control": "VARIABLE_SPEED" + } + ], + "fluid_loops": [ + { + "id": "Boiler Loop 1", + "type": "HEATING" + }, + { + "id": "Chiller Loop 1", + "type": "COOLING", + "child_loops": [ + { + "id": "Secondary CHW Loop 1", + "type": "COOLING" + } + ] + } + ], + "type": "BASELINE_0" + } + ] + } + } + } +} \ No newline at end of file diff --git a/rct229/ruletest_engine/ruletest_jsons/ashrae9012019/section21/rule_21_15.json b/rct229/ruletest_engine/ruletest_jsons/ashrae9012019/section21/rule_21_15.json new file mode 100644 index 0000000000..d07e9d4f13 --- /dev/null +++ b/rct229/ruletest_engine/ruletest_jsons/ashrae9012019/section21/rule_21_15.json @@ -0,0 +1,279 @@ +{ + "rule-21-15-a": { + "Section": 21, + "Rule": 15, + "Test": "a", + "test_description": "The project has one building segment with two zones served by a baseline system type 7 that uses purchased hot water.", + "expected_rule_outcome": "undetermined", + "standard": { + "rule_id": "21-15", + "ruleset_reference": "G3.1.3.5", + "rule_description": "When the baseline building is modeled with a hot water plant, served by purchased HW system, the hot water pump power shall be 14 W/gpm", + "applicable_rmr": "Baseline Model", + "rule_assertion": "=", + "comparison_value": "Expected Value", + "primary_rule": "Full", + "schema_version": "0.0.36" + }, + "rmd_transformations": { + "baseline": { + "id": "ASHRAE229 1", + "data_timestamp": "2024-02-12T09:00Z", + "ruleset_model_descriptions": [ + { + "id": "RMD 1", + "buildings": [ + { + "id": "Building 1", + "building_open_schedule": "Required Building Schedule 1", + "building_segments": [ + { + "id": "Building Segment 1", + "zones": [ + { + "id": "Thermal Zone 1", + "thermostat_cooling_setpoint_schedule": "Required Cooling Schedule 1", + "thermostat_heating_setpoint_schedule": "Required Heating Schedule 1", + "terminals": [ + { + "id": "VAV Air Terminal 1", + "is_supply_ducted": true, + "heating_source": "HOT_WATER", + "heating_from_loop": "Purchased HW Loop 1", + "type": "VARIABLE_AIR_VOLUME", + "served_by_heating_ventilating_air_conditioning_system": "System 7" + } + ] + }, + { + "id": "Thermal Zone 2", + "thermostat_cooling_setpoint_schedule": "Required Cooling Schedule 1", + "thermostat_heating_setpoint_schedule": "Required Heating Schedule 1", + "terminals": [ + { + "id": "VAV Air Terminal 2", + "is_supply_ducted": true, + "heating_source": "HOT_WATER", + "type": "VARIABLE_AIR_VOLUME", + "served_by_heating_ventilating_air_conditioning_system": "System 7", + "heating_from_loop": "Purchased HW Loop 1" + } + ] + } + ], + "heating_ventilating_air_conditioning_systems": [ + { + "id": "System 7", + "preheat_system": { + "id": "Preheat Coil 1", + "type": "FLUID_LOOP", + "hot_water_loop": "Purchased HW Loop 1" + }, + "fan_system": { + "id": "VAV Fan System 1", + "fan_control": "VARIABLE_SPEED_DRIVE", + "supply_fans": [ + { + "id": "Supply Fan 1" + } + ], + "return_fans": [ + { + "id": "Return Fan 1" + } + ] + }, + "cooling_system": { + "id": "CHW Coil 1", + "type": "FLUID_LOOP", + "chilled_water_loop": "Chilled Water Loop 1" + } + } + ] + } + ] + } + ], + "external_fluid_sources": [ + { + "id": "Purchased HW 1", + "loop": "Purchased HW Loop 1", + "type": "HOT_WATER" + } + ], + "pumps": [ + { + "id": "HW Pump 1", + "loop_or_piping": "Purchased HW Loop 1", + "speed_control": "FIXED_SPEED" + }, + { + "id": "CHW Pump 1", + "loop_or_piping": "Chilled Water Loop 1", + "speed_control": "FIXED_SPEED" + } + ], + "fluid_loops": [ + { + "id": "Purchased HW Loop 1", + "type": "HEATING" + }, + { + "id": "Chilled Water Loop 1", + "type": "COOLING" + } + ], + "type": "BASELINE_0" + } + ] + } + } + }, + "rule-21-15-b": { + "Section": 21, + "Rule": 15, + "Test": "b", + "test_description": "The project has one building segment with two zones served by a baseline system type 7 that does not use purchased hot water.", + "expected_rule_outcome": "not_applicable", + "standard": { + "rule_id": "21-15", + "ruleset_reference": "G3.1.3.5", + "rule_description": "When the baseline building is modeled with a hot water plant, served by purchased HW system, the hot water pump power shall be 14 W/gpm", + "applicable_rmr": "Baseline Model", + "rule_assertion": "=", + "comparison_value": "Expected Value", + "primary_rule": "Full", + "schema_version": "0.0.36" + }, + "rmd_transformations": { + "baseline": { + "id": "ASHRAE229 1", + "data_timestamp": "2024-02-12T09:00Z", + "ruleset_model_descriptions": [ + { + "id": "RMD 1", + "buildings": [ + { + "id": "Building 1", + "building_open_schedule": "Required Building Schedule 1", + "building_segments": [ + { + "id": "Building Segment 1", + "zones": [ + { + "id": "Thermal Zone 1", + "thermostat_cooling_setpoint_schedule": "Required Cooling Schedule 1", + "thermostat_heating_setpoint_schedule": "Required Heating Schedule 1", + "terminals": [ + { + "id": "VAV Air Terminal 1", + "is_supply_ducted": true, + "heating_source": "HOT_WATER", + "heating_from_loop": "Boiler Loop 1", + "type": "VARIABLE_AIR_VOLUME", + "served_by_heating_ventilating_air_conditioning_system": "System 7" + } + ] + }, + { + "id": "Thermal Zone 2", + "thermostat_cooling_setpoint_schedule": "Required Cooling Schedule 1", + "thermostat_heating_setpoint_schedule": "Required Heating Schedule 1", + "terminals": [ + { + "id": "VAV Air Terminal 2", + "is_supply_ducted": true, + "heating_source": "HOT_WATER", + "type": "VARIABLE_AIR_VOLUME", + "served_by_heating_ventilating_air_conditioning_system": "System 7", + "heating_from_loop": "Boiler Loop 1" + } + ] + } + ], + "heating_ventilating_air_conditioning_systems": [ + { + "id": "System 7", + "preheat_system": { + "id": "Preheat Coil 1", + "type": "FLUID_LOOP", + "hot_water_loop": "Boiler Loop 1" + }, + "fan_system": { + "id": "VAV Fan System 1", + "fan_control": "VARIABLE_SPEED_DRIVE", + "supply_fans": [ + { + "id": "Supply Fan 1" + } + ], + "return_fans": [ + { + "id": "Return Fan 1" + } + ] + }, + "cooling_system": { + "id": "CHW Coil 1", + "type": "FLUID_LOOP", + "chilled_water_loop": "Secondary CHW Loop 1" + } + } + ] + } + ] + } + ], + "boilers": [ + { + "id": "Boiler 1", + "loop": "Boiler Loop 1", + "energy_source_type": "NATURAL_GAS" + } + ], + "chillers": [ + { + "id": "Chiller 1", + "cooling_loop": "Chiller Loop 1" + } + ], + "pumps": [ + { + "id": "Boiler Pump 1", + "loop_or_piping": "Boiler Loop 1", + "speed_control": "FIXED_SPEED" + }, + { + "id": "Chiller Pump 1", + "loop_or_piping": "Chiller Loop 1", + "speed_control": "FIXED_SPEED" + }, + { + "id": "Secondary CHW Pump", + "loop_or_piping": "Secondary CHW Loop 1", + "speed_control": "VARIABLE_SPEED" + } + ], + "fluid_loops": [ + { + "id": "Boiler Loop 1", + "type": "HEATING" + }, + { + "id": "Chiller Loop 1", + "type": "COOLING", + "child_loops": [ + { + "id": "Secondary CHW Loop 1", + "type": "COOLING" + } + ] + } + ], + "type": "BASELINE_0" + } + ] + } + } + } +} \ No newline at end of file diff --git a/rct229/ruletest_engine/ruletest_jsons/ashrae9012019/section21_boiler_tcd_master.json b/rct229/ruletest_engine/ruletest_jsons/ashrae9012019/section21_boiler_tcd_master.json index c1ede85452..ce5a90ac44 100644 --- a/rct229/ruletest_engine/ruletest_jsons/ashrae9012019/section21_boiler_tcd_master.json +++ b/rct229/ruletest_engine/ruletest_jsons/ashrae9012019/section21_boiler_tcd_master.json @@ -9016,6 +9016,560 @@ } } }, + "rule-21-14-a": { + "Section": 21, + "Rule": 14, + "Test": "a", + "test_description": "The project has one building segment with two zones served by a baseline system type 7 that uses purchased hot water.", + "expected_rule_outcome": "undetermined", + "standard": { + "rule_id": "21-14", + "ruleset_reference": "G3.1.3.4", + "rule_description": "When the baseline building is modeled with a hot water plant, served by purchased HW system, hot water supply temperature reset is not modeled. ", + "applicable_rmr": "Baseline Model", + "rule_assertion": "=", + "comparison_value": "Expected Value", + "primary_rule": "Full", + "schema_version": "0.0.36" + }, + "rmd_transformations": { + "baseline": { + "id": "ASHRAE229 1", + "data_timestamp": "2024-02-12T09:00Z", + "ruleset_model_descriptions": [ + { + "id": "RMD 1", + "buildings": [ + { + "id": "Building 1", + "building_open_schedule": "Required Building Schedule 1", + "building_segments": [ + { + "id": "Building Segment 1", + "zones": [ + { + "id": "Thermal Zone 1", + "thermostat_cooling_setpoint_schedule": "Required Cooling Schedule 1", + "thermostat_heating_setpoint_schedule": "Required Heating Schedule 1", + "terminals": [ + { + "id": "VAV Air Terminal 1", + "is_supply_ducted": true, + "heating_source": "HOT_WATER", + "heating_from_loop": "Purchased HW Loop 1", + "type": "VARIABLE_AIR_VOLUME", + "served_by_heating_ventilating_air_conditioning_system": "System 7" + } + ] + }, + { + "id": "Thermal Zone 2", + "thermostat_cooling_setpoint_schedule": "Required Cooling Schedule 1", + "thermostat_heating_setpoint_schedule": "Required Heating Schedule 1", + "terminals": [ + { + "id": "VAV Air Terminal 2", + "is_supply_ducted": true, + "heating_source": "HOT_WATER", + "type": "VARIABLE_AIR_VOLUME", + "served_by_heating_ventilating_air_conditioning_system": "System 7", + "heating_from_loop": "Purchased HW Loop 1" + } + ] + } + ], + "heating_ventilating_air_conditioning_systems": [ + { + "id": "System 7", + "preheat_system": { + "id": "Preheat Coil 1", + "type": "FLUID_LOOP", + "hot_water_loop": "Purchased HW Loop 1" + }, + "fan_system": { + "id": "VAV Fan System 1", + "fan_control": "VARIABLE_SPEED_DRIVE", + "supply_fans": [ + { + "id": "Supply Fan 1" + } + ], + "return_fans": [ + { + "id": "Return Fan 1" + } + ] + }, + "cooling_system": { + "id": "CHW Coil 1", + "type": "FLUID_LOOP", + "chilled_water_loop": "Chilled Water Loop 1" + } + } + ] + } + ] + } + ], + "external_fluid_sources": [ + { + "id": "Purchased HW 1", + "loop": "Purchased HW Loop 1", + "type": "HOT_WATER" + } + ], + "pumps": [ + { + "id": "HW Pump 1", + "loop_or_piping": "Purchased HW Loop 1", + "speed_control": "FIXED_SPEED" + }, + { + "id": "CHW Pump 1", + "loop_or_piping": "Chilled Water Loop 1", + "speed_control": "FIXED_SPEED" + } + ], + "fluid_loops": [ + { + "id": "Purchased HW Loop 1", + "type": "HEATING" + }, + { + "id": "Chilled Water Loop 1", + "type": "COOLING" + } + ], + "type": "BASELINE_0" + } + ] + } + } + }, + "rule-21-14-b": { + "Section": 21, + "Rule": 14, + "Test": "b", + "test_description": "The project has one building segment with two zones served by a baseline system type 7 that does not use purchased hot water.", + "expected_rule_outcome": "not_applicable", + "standard": { + "rule_id": "21-14", + "ruleset_reference": "G3.1.3.4", + "rule_description": "When the baseline building is modeled with a hot water plant, served by purchased HW system, hot water supply temperature reset is not modeled. ", + "applicable_rmr": "Baseline Model", + "rule_assertion": "=", + "comparison_value": "Expected Value", + "primary_rule": "Full", + "schema_version": "0.0.36" + }, + "rmd_transformations": { + "baseline": { + "id": "ASHRAE229 1", + "data_timestamp": "2024-02-12T09:00Z", + "ruleset_model_descriptions": [ + { + "id": "RMD 1", + "buildings": [ + { + "id": "Building 1", + "building_open_schedule": "Required Building Schedule 1", + "building_segments": [ + { + "id": "Building Segment 1", + "zones": [ + { + "id": "Thermal Zone 1", + "thermostat_cooling_setpoint_schedule": "Required Cooling Schedule 1", + "thermostat_heating_setpoint_schedule": "Required Heating Schedule 1", + "terminals": [ + { + "id": "VAV Air Terminal 1", + "is_supply_ducted": true, + "heating_source": "HOT_WATER", + "heating_from_loop": "Boiler Loop 1", + "type": "VARIABLE_AIR_VOLUME", + "served_by_heating_ventilating_air_conditioning_system": "System 7" + } + ] + }, + { + "id": "Thermal Zone 2", + "thermostat_cooling_setpoint_schedule": "Required Cooling Schedule 1", + "thermostat_heating_setpoint_schedule": "Required Heating Schedule 1", + "terminals": [ + { + "id": "VAV Air Terminal 2", + "is_supply_ducted": true, + "heating_source": "HOT_WATER", + "type": "VARIABLE_AIR_VOLUME", + "served_by_heating_ventilating_air_conditioning_system": "System 7", + "heating_from_loop": "Boiler Loop 1" + } + ] + } + ], + "heating_ventilating_air_conditioning_systems": [ + { + "id": "System 7", + "preheat_system": { + "id": "Preheat Coil 1", + "type": "FLUID_LOOP", + "hot_water_loop": "Boiler Loop 1" + }, + "fan_system": { + "id": "VAV Fan System 1", + "fan_control": "VARIABLE_SPEED_DRIVE", + "supply_fans": [ + { + "id": "Supply Fan 1" + } + ], + "return_fans": [ + { + "id": "Return Fan 1" + } + ] + }, + "cooling_system": { + "id": "CHW Coil 1", + "type": "FLUID_LOOP", + "chilled_water_loop": "Secondary CHW Loop 1" + } + } + ] + } + ] + } + ], + "boilers": [ + { + "id": "Boiler 1", + "loop": "Boiler Loop 1", + "energy_source_type": "NATURAL_GAS" + } + ], + "chillers": [ + { + "id": "Chiller 1", + "cooling_loop": "Chiller Loop 1" + } + ], + "pumps": [ + { + "id": "Boiler Pump 1", + "loop_or_piping": "Boiler Loop 1", + "speed_control": "FIXED_SPEED" + }, + { + "id": "Chiller Pump 1", + "loop_or_piping": "Chiller Loop 1", + "speed_control": "FIXED_SPEED" + }, + { + "id": "Secondary CHW Pump", + "loop_or_piping": "Secondary CHW Loop 1", + "speed_control": "VARIABLE_SPEED" + } + ], + "fluid_loops": [ + { + "id": "Boiler Loop 1", + "type": "HEATING" + }, + { + "id": "Chiller Loop 1", + "type": "COOLING", + "child_loops": [ + { + "id": "Secondary CHW Loop 1", + "type": "COOLING" + } + ] + } + ], + "type": "BASELINE_0" + } + ] + } + } + }, + "rule-21-15-a": { + "Section": 21, + "Rule": 15, + "Test": "a", + "test_description": "The project has one building segment with two zones served by a baseline system type 7 that uses purchased hot water.", + "expected_rule_outcome": "undetermined", + "standard": { + "rule_id": "21-15", + "ruleset_reference": "G3.1.3.5", + "rule_description": "When the baseline building is modeled with a hot water plant, served by purchased HW system, the hot water pump power shall be 14 W/gpm", + "applicable_rmr": "Baseline Model", + "rule_assertion": "=", + "comparison_value": "Expected Value", + "primary_rule": "Full", + "schema_version": "0.0.36" + }, + "rmd_transformations": { + "baseline": { + "id": "ASHRAE229 1", + "data_timestamp": "2024-02-12T09:00Z", + "ruleset_model_descriptions": [ + { + "id": "RMD 1", + "buildings": [ + { + "id": "Building 1", + "building_open_schedule": "Required Building Schedule 1", + "building_segments": [ + { + "id": "Building Segment 1", + "zones": [ + { + "id": "Thermal Zone 1", + "thermostat_cooling_setpoint_schedule": "Required Cooling Schedule 1", + "thermostat_heating_setpoint_schedule": "Required Heating Schedule 1", + "terminals": [ + { + "id": "VAV Air Terminal 1", + "is_supply_ducted": true, + "heating_source": "HOT_WATER", + "heating_from_loop": "Purchased HW Loop 1", + "type": "VARIABLE_AIR_VOLUME", + "served_by_heating_ventilating_air_conditioning_system": "System 7" + } + ] + }, + { + "id": "Thermal Zone 2", + "thermostat_cooling_setpoint_schedule": "Required Cooling Schedule 1", + "thermostat_heating_setpoint_schedule": "Required Heating Schedule 1", + "terminals": [ + { + "id": "VAV Air Terminal 2", + "is_supply_ducted": true, + "heating_source": "HOT_WATER", + "type": "VARIABLE_AIR_VOLUME", + "served_by_heating_ventilating_air_conditioning_system": "System 7", + "heating_from_loop": "Purchased HW Loop 1" + } + ] + } + ], + "heating_ventilating_air_conditioning_systems": [ + { + "id": "System 7", + "preheat_system": { + "id": "Preheat Coil 1", + "type": "FLUID_LOOP", + "hot_water_loop": "Purchased HW Loop 1" + }, + "fan_system": { + "id": "VAV Fan System 1", + "fan_control": "VARIABLE_SPEED_DRIVE", + "supply_fans": [ + { + "id": "Supply Fan 1" + } + ], + "return_fans": [ + { + "id": "Return Fan 1" + } + ] + }, + "cooling_system": { + "id": "CHW Coil 1", + "type": "FLUID_LOOP", + "chilled_water_loop": "Chilled Water Loop 1" + } + } + ] + } + ] + } + ], + "external_fluid_sources": [ + { + "id": "Purchased HW 1", + "loop": "Purchased HW Loop 1", + "type": "HOT_WATER" + } + ], + "pumps": [ + { + "id": "HW Pump 1", + "loop_or_piping": "Purchased HW Loop 1", + "speed_control": "FIXED_SPEED" + }, + { + "id": "CHW Pump 1", + "loop_or_piping": "Chilled Water Loop 1", + "speed_control": "FIXED_SPEED" + } + ], + "fluid_loops": [ + { + "id": "Purchased HW Loop 1", + "type": "HEATING" + }, + { + "id": "Chilled Water Loop 1", + "type": "COOLING" + } + ], + "type": "BASELINE_0" + } + ] + } + } + }, + "rule-21-15-b": { + "Section": 21, + "Rule": 15, + "Test": "b", + "test_description": "The project has one building segment with two zones served by a baseline system type 7 that does not use purchased hot water.", + "expected_rule_outcome": "not_applicable", + "standard": { + "rule_id": "21-15", + "ruleset_reference": "G3.1.3.5", + "rule_description": "When the baseline building is modeled with a hot water plant, served by purchased HW system, the hot water pump power shall be 14 W/gpm", + "applicable_rmr": "Baseline Model", + "rule_assertion": "=", + "comparison_value": "Expected Value", + "primary_rule": "Full", + "schema_version": "0.0.36" + }, + "rmd_transformations": { + "baseline": { + "id": "ASHRAE229 1", + "data_timestamp": "2024-02-12T09:00Z", + "ruleset_model_descriptions": [ + { + "id": "RMD 1", + "buildings": [ + { + "id": "Building 1", + "building_open_schedule": "Required Building Schedule 1", + "building_segments": [ + { + "id": "Building Segment 1", + "zones": [ + { + "id": "Thermal Zone 1", + "thermostat_cooling_setpoint_schedule": "Required Cooling Schedule 1", + "thermostat_heating_setpoint_schedule": "Required Heating Schedule 1", + "terminals": [ + { + "id": "VAV Air Terminal 1", + "is_supply_ducted": true, + "heating_source": "HOT_WATER", + "heating_from_loop": "Boiler Loop 1", + "type": "VARIABLE_AIR_VOLUME", + "served_by_heating_ventilating_air_conditioning_system": "System 7" + } + ] + }, + { + "id": "Thermal Zone 2", + "thermostat_cooling_setpoint_schedule": "Required Cooling Schedule 1", + "thermostat_heating_setpoint_schedule": "Required Heating Schedule 1", + "terminals": [ + { + "id": "VAV Air Terminal 2", + "is_supply_ducted": true, + "heating_source": "HOT_WATER", + "type": "VARIABLE_AIR_VOLUME", + "served_by_heating_ventilating_air_conditioning_system": "System 7", + "heating_from_loop": "Boiler Loop 1" + } + ] + } + ], + "heating_ventilating_air_conditioning_systems": [ + { + "id": "System 7", + "preheat_system": { + "id": "Preheat Coil 1", + "type": "FLUID_LOOP", + "hot_water_loop": "Boiler Loop 1" + }, + "fan_system": { + "id": "VAV Fan System 1", + "fan_control": "VARIABLE_SPEED_DRIVE", + "supply_fans": [ + { + "id": "Supply Fan 1" + } + ], + "return_fans": [ + { + "id": "Return Fan 1" + } + ] + }, + "cooling_system": { + "id": "CHW Coil 1", + "type": "FLUID_LOOP", + "chilled_water_loop": "Secondary CHW Loop 1" + } + } + ] + } + ] + } + ], + "boilers": [ + { + "id": "Boiler 1", + "loop": "Boiler Loop 1", + "energy_source_type": "NATURAL_GAS" + } + ], + "chillers": [ + { + "id": "Chiller 1", + "cooling_loop": "Chiller Loop 1" + } + ], + "pumps": [ + { + "id": "Boiler Pump 1", + "loop_or_piping": "Boiler Loop 1", + "speed_control": "FIXED_SPEED" + }, + { + "id": "Chiller Pump 1", + "loop_or_piping": "Chiller Loop 1", + "speed_control": "FIXED_SPEED" + }, + { + "id": "Secondary CHW Pump", + "loop_or_piping": "Secondary CHW Loop 1", + "speed_control": "VARIABLE_SPEED" + } + ], + "fluid_loops": [ + { + "id": "Boiler Loop 1", + "type": "HEATING" + }, + { + "id": "Chiller Loop 1", + "type": "COOLING", + "child_loops": [ + { + "id": "Secondary CHW Loop 1", + "type": "COOLING" + } + ] + } + ], + "type": "BASELINE_0" + } + ] + } + } + }, "rule-21-16-a": { "Section": 21, "Rule": 16, From c5d35a330734a41071302251933d98cdd2246f60 Mon Sep 17 00:00:00 2001 From: KarenWGard <114143532+KarenWGard@users.noreply.github.com> Date: Wed, 7 Aug 2024 16:30:01 -0400 Subject: [PATCH 3/3] Update Rule18-2.md added PASS result for multi-zone systems and fixed some typos --- docs/section18/Rule18-2.md | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/docs/section18/Rule18-2.md b/docs/section18/Rule18-2.md index 02bb56f4cb..de4e6440cb 100644 --- a/docs/section18/Rule18-2.md +++ b/docs/section18/Rule18-2.md @@ -69,17 +69,18 @@ - check do_multi_zone_evaluation to determine if this is a multi_zone system. Continue checking whether all the zones it serves are on the same floor: `if do_multi_zone_evaluation:` - get the list of zones on the same floor by using the function get_zones_on_same_floor: `zones_on_floor = get_zones_on_same_floor(B_RMI,zones_served_by_system[0])` - - check if all the zones served by the system are on the same floor: `if all(zone in zones_on_floor for zone in zones_served_by_system):` - - now check if there are any other systems of the same system type that serve zones on this floor. First loop through baseline_system_types_dict again: `for hvac_system_type2 in baseline_system_types_dict:` - - check if the hvac_system_type2 is the same type: `if baseline_system_type_compare(hvac_system_type2,system_type,FALSE):` - - look through all of the hvacs of this system type: `for hvac_system2_id in baseline_system_types_dict[hvac_system_type2]:` - - make sure that hvac_system2_id is not the same as hvac_system_id: `if hvac_system2_id != hvac_system_id:` - - 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` - - 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` + - check if all the zones served by the system are on the same floor: `if all(zone in zones_on_floor for zone in zones_served_by_system):` + - set the result to PASS. There are checks on the following lines that will set the result to fail a zone is also served by another system, or if the system serves lab zones: `result = PASS` + - now check if there are any other systems of the same system type that serve zones on this floor. First loop through baseline_system_types_dict again: `for hvac_system_type2 in baseline_system_types_dict:` + - check if the hvac_system_type2 is the same type: `if baseline_system_type_compare(hvac_system_type2,system_type,FALSE):` + - look through all of the hvacs of this system type: `for hvac_system2_id in baseline_system_types_dict[hvac_system_type2]:` + - make sure that hvac_system2_id is not the same as hvac_system_id: `if hvac_system2_id != hvac_system_id:` + - 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` + - 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 serves 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 other system isn't a lab system, set result to fail: `result = FAIL` **Rule Assertion - Zone:**