Schema Version: 0.0.37
Mandatory Rule: TRUE
Rule ID: 11-14
Rule Description: Where recirculation pumps are used to ensure prompt availability of service water-heating at the end use, the energy consumption of such pumps shall be calculated explicitly.
Rule Assertion: UNDETERMINED / NOT_APPLICABLE
Appendix G Section Reference: Table G3.1 #11, baseline column, (f)
Evaluation Context: ServiceWaterHeatingDistributionSystem
Data Lookup:
Function Call:
- get_SWH_uses_associated_with_each_building_segment
- get_swh_components_associated_with_each_swh_distribution_system
- get_component_by_id
-
All service water heating distribution systems with water uses are applicable
-
get a dictionary all of the components associated with the swh distribution system in the building:
swh_comps_dict = get_swh_components_associated_with_each_swh_distribution_system(B_RMD)
-
look at each service water heating distribution system in the baseline model:
for swh_dist_sys in B_RMD.service_water_heating_distribution_systems:
- look at the uses associated with this distribution system:
for swh_use_id in swh_comps_dict[swh_dist_sys.id]["USES"]:
- get the swh_use using get_component_by_ID:
swh_use = get_component_by_ID(P_RMD, swh_use_id)
- check to see if the use has SWH loads:
if swh_use.use > 0:
- the rule is applicable:
CONTINUE TO RULE LOGIC
- the rule is applicable:
- get the swh_use using get_component_by_ID:
- for a hard pass, we're looking for all of the loops to recirculate, and have pumps with power > 0
- an undetermined result would be if there is not recirculation (perhaps there should be recirculation), or if only some of the loops meet the criteria for a pass
- a fail would be if the loops recirculate but don't have pumps or pump power
- create a dictionary to keep track of the piping, and pumps attached to the distribution system:
piping_info = {}
- look at each piping connected to the distribution system:
for piping_id in in swh_comps_dict[swh_dist_sys.id]["PIPING"]:
- get the piping:
piping = get_component_by_id(B_RMD,ServiceWaterPiping)
- create a dictionary to store data about this piping:
piping_info[piping_id] = {}
- add the recirculation loop information to the dictionary:
piping_info[piping_id]["IS_RECIRC"] = piping.is_recirculation_loop
- if the piping is a recirculation loop, get the attached pump:
if(piping.is_recirculation_loop):
- need to look at each pump to see if it's connected:
for pump_id in swh_comps_dict[swh_dist_sys.id]["PUMP"]:
- get the pump:
pump = get_component_by_id(B_RMD,PUMP)
- if the pump loop_or_piping matches the current piping, add the pump to the piping dictionary:
piping_info[piping_id]["PUMP_POWER"] = pump.design_electric_power
- get the pump:
- need to look at each pump to see if it's connected:
- get the piping:
- GO TO RULE LOGIC
- Case1: all piping are recirculating and pump power is > 0, PASS:
if all(entry.get("IS_RECIRC") and entry.get("PUMP_POWER", 0) > 0 for entry in piping_info.values()): PASS
- Case2: there is at least one piping that has recirculation, but no pump power, FAIL:
elif any(entry.get("IS_RECIRC") and entry.get("PUMP_POWER", 0) == 0 for entry in hash.values()): FAIL
- Case3: All others, UNDETERMINED:
UNDETERMINED
- look at the uses associated with this distribution system: