From 9ac039db286dec1b0949bf7c782213165e724c8e Mon Sep 17 00:00:00 2001 From: KarenWGard <114143532+KarenWGard@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:12:17 -0400 Subject: [PATCH 01/11] Create Rule6-10.md --- docs/section6/Rule6-10.md | 50 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 docs/section6/Rule6-10.md diff --git a/docs/section6/Rule6-10.md b/docs/section6/Rule6-10.md new file mode 100644 index 0000000000..a2bab06b80 --- /dev/null +++ b/docs/section6/Rule6-10.md @@ -0,0 +1,50 @@ + +# Lighting - Rule 6-10 + +**Rule ID:** 6-10 +**Rule Description:** Where retail display lighting is included in the proposed building design in accordance with Section 9.5.2.2(b), the baseline building design retail display lighting additional power shall be equal to the limits established by Section 9.5.2.2(b) or same as proposed, whichever is less. +**Rule Assertion:** Baseline RMD = expected value +**Appendix G Section:** G3.1 6 Baseline + +**Mandatory Rule:** True +**Evaluation Context:** Each Space +**Function Call:** + +- get_component_by_id() + +## Applicability Check: +- look at each building segment: `for building_segment in P_RMD.building_segments:` + - get the building segment lighting type: `building_segment_lighting_type = building_segment.lighting_building_area_type` + - look at each space: `for space in building_segment...spaces:` + - set a boolean called applicable to false: `applicable = false` + - set lighting_space_type equal to the space.lighting_space_type: `lighting_space_type = space.lighting_space_type` + - if the lighting_space_type is NULL, set the lighting_space_type equal to the building_segment_lighting_type: `if lighting_space_type == NULL: lighting_space_type = building_segment_lighting_type` + - if the lighting space type is one of the retail space types, look at each InteriorLighting object in the model: `if lighting_space_type in? ["RETAIL_FACILITIES_DRESSING_FITTING_ROOM", "RETAIL_FACILITIES_MALL_CONCOURSE", "RETAIL"]:` + - look at each interior lighting: `for interior_lighting in space.interior_lighting:` + - if the interior lighting purpose_type is RETAIL_DISPLAY, set applicable to true - we don't go to the rule logic for each interior lighting because the evaluation context is at the space level: `if interior_lighting.purpose_type == "RETAIL_DISPLAY": applicable = true` + - if the boolean applicable is true, continue to rule logic: `if applicable: CONTINUE TO RULE LOGIC` + - otherwise, rule is not applicable: `else: RULE NOT APPLICABLE` + + ## Rule Logic: + - 9.5.2.2(b) gives a formula (750 W + (Retail Area 1 × 0.40 W/ft2) + (Retail Area 2 × 0.40 W/ft2) + (Retail Area 3 × 0.70 W/ft2) + (Retail Area 4 × 1.00 W/ft2)) for retail display lighting that is based on four area categories. We don't have access to these four area categories in the schema, so we will calculate the maximum and minimum values possible based on this function. The maximum is calculated based on 100% of the space floor area being type 4: `maximum_retail_display_W = 750 + space.floor_area * (1)` + - the minimum is calculated based on none of the floor area being a retail area: `minimum_retail_display_W = 750` + - now calculate the total proposed interior display lighting power for this space - initialize at 0: `proposed_interior_display_W = 0` + - look at each lighting in the space: `for interior_lighting in space.interior_lighting:` + - if the interior lighting purpose_type is RETAIL_DISPLAY, add the lighting wattage to proposed_interior_display_W: `if interior_lighting.purpose_type == "RETAIL_DISPLAY": proposed_interior_display_W = proposed_interior_display_W + interior_lighting.power_per_area * space.floor_area` + - get the equivalent space in the baseline model: `space_b = get_component_by_id(space.id, B_RMD);` + - calculate to total baseline interior display lighting power for this space - initialize at 0: `baseline_interior_display_W = 0` + - look at each lighting in the space: `for interior_lighting in space_b.interior_lighting:` + - if the interior lighting purpose_type is RETAIL_DISPLAY, add the lighting wattage to baseline_interior_display_W: `if interior_lighting.purpose_type == "RETAIL_DISPLAY": baseline_interior_display_W = baseline_interior_display_W + interior_lighting.power_per_area * space_b.floor_area` + + **Rule Assertion:** + - Case 1: If the proposed_interior_display_W is less than the minimum AND the baseline_interior_display_W is equal to the proposed, then PASS: `if((proposed_interior_display_W < minimum_retail_display_W) and (baseline_interior_display_W == proposed_interior_display_W)): PASS` + - Case 2: Otherwise, if the baseline_interior_display_W is greater than the maximum of proposed_interior_display_W and maximum_retail_display_W, then FAIL: `elif baseline_interior_display_W > max(proposed_interior_display_W,maximum_retail_display_W): FAIL` + - Case 3: All other cases UNDETERMINED and provide note: `else: UNDETERMINED; note = "The RCT could not determine whether the baseline retail display lighting power is correctly the minimum of the proposed retail display lighting power and the result of the formula given by ASRAE 90.1 9.5.2.2(b)."` + + +**Notes:** +1. Is the lighting space type check necessary because we are checking the interior_lighting.purpose_type to be RETAIL_DISPLAY? + +**[Back](../_toc.md)** + + From f33f2914f6c0d6e612618e62bb961ebbf457aa31 Mon Sep 17 00:00:00 2001 From: KarenWGard <114143532+KarenWGard@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:20:23 -0400 Subject: [PATCH 02/11] Update Rule6-1.md update rule 6-1 to remove Retail Display Lighting from the building total as this is covered in the new rule 6-10 --- docs/section6/Rule6-1.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/section6/Rule6-1.md b/docs/section6/Rule6-1.md index 7edc7da27b..e4af14c869 100644 --- a/docs/section6/Rule6-1.md +++ b/docs/section6/Rule6-1.md @@ -28,7 +28,16 @@ - For each space in zone: `space_p in zone_p.spaces:` - - For each interior lighting in space, add lighting power to building segment total: `building_segment_design_lighting_wattage += sum(interior_lighting.power_per_area for interior_lighting in space_p.interior_lighting) * space_p.floor_area` + - the total modeled interior lighting power is the total lighting power EXCEPT for retail display lighting (as defined in Rule 6-10). Create a variable building_segment_design_lighting_wattage and set it to 0: `building_segment_design_lighting_wattage = 0` + + - Look at each interior lighting in the space: `for int_lighting in space:` + + - create a boolean part_of_total and set it to true: `part_of_total = TRUE` + + - Check whether the lighting type is `if interior_lighting.purpose_type == "RETAIL_DISPLAY":` + - Check whether the space lighting space type is one of the retail type spaces. If it is, we don't add the wattage of this lighting to the total: `if space.lighting_space_type in? ["RETAIL_FACILITIES_DRESSING_FITTING_ROOM", "RETAIL_FACILITIES_MALL_CONCOURSE", "RETAIL"]: part_of_total = FALSE` + + - Add this lighting to the total if it is NOT retail lighting in a retail space type: `if part_of_total: building_segment_design_lighting_wattage += interior_lighting.power_per_area * space_p.floor_area` - If building segment specifies lighting building area type , add space floor area to the total building segment floor area: `if allowable_LPD_BAM: total_building_segment_area_p += space_p.floor_area` From 5772890f93b666cddbeca6b65cbcf297e748d420 Mon Sep 17 00:00:00 2001 From: KarenWGard <114143532+KarenWGard@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:26:34 -0400 Subject: [PATCH 03/11] Update Rule6-1.md --- docs/section6/Rule6-1.md | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/docs/section6/Rule6-1.md b/docs/section6/Rule6-1.md index e4af14c869..847eeabd8c 100644 --- a/docs/section6/Rule6-1.md +++ b/docs/section6/Rule6-1.md @@ -30,14 +30,7 @@ - the total modeled interior lighting power is the total lighting power EXCEPT for retail display lighting (as defined in Rule 6-10). Create a variable building_segment_design_lighting_wattage and set it to 0: `building_segment_design_lighting_wattage = 0` - - Look at each interior lighting in the space: `for int_lighting in space:` - - - create a boolean part_of_total and set it to true: `part_of_total = TRUE` - - - Check whether the lighting type is `if interior_lighting.purpose_type == "RETAIL_DISPLAY":` - - Check whether the space lighting space type is one of the retail type spaces. If it is, we don't add the wattage of this lighting to the total: `if space.lighting_space_type in? ["RETAIL_FACILITIES_DRESSING_FITTING_ROOM", "RETAIL_FACILITIES_MALL_CONCOURSE", "RETAIL"]: part_of_total = FALSE` - - - Add this lighting to the total if it is NOT retail lighting in a retail space type: `if part_of_total: building_segment_design_lighting_wattage += interior_lighting.power_per_area * space_p.floor_area` + - For each interior lighting in space, add lighting power to building segment total: `building_segment_design_lighting_wattage += sum(interior_lighting.power_per_area for interior_lighting in space_p.interior_lighting) * space_p.floor_area` - If building segment specifies lighting building area type , add space floor area to the total building segment floor area: `if allowable_LPD_BAM: total_building_segment_area_p += space_p.floor_area` From a48f26f47b1d945330d86477212743191be62eb6 Mon Sep 17 00:00:00 2001 From: KarenWGard <114143532+KarenWGard@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:27:30 -0400 Subject: [PATCH 04/11] Update Rule6-1.md --- docs/section6/Rule6-1.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/section6/Rule6-1.md b/docs/section6/Rule6-1.md index 847eeabd8c..7751a46fd1 100644 --- a/docs/section6/Rule6-1.md +++ b/docs/section6/Rule6-1.md @@ -27,8 +27,6 @@ - For each zone in thermal block: `zone_p in thermal_block_p.zones:` - For each space in zone: `space_p in zone_p.spaces:` - - - the total modeled interior lighting power is the total lighting power EXCEPT for retail display lighting (as defined in Rule 6-10). Create a variable building_segment_design_lighting_wattage and set it to 0: `building_segment_design_lighting_wattage = 0` - For each interior lighting in space, add lighting power to building segment total: `building_segment_design_lighting_wattage += sum(interior_lighting.power_per_area for interior_lighting in space_p.interior_lighting) * space_p.floor_area` From 275fcc81042cdfb63c6722a300569dde67d44cc3 Mon Sep 17 00:00:00 2001 From: KarenWGard <114143532+KarenWGard@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:27:49 -0400 Subject: [PATCH 05/11] Update Rule6-1.md --- docs/section6/Rule6-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/section6/Rule6-1.md b/docs/section6/Rule6-1.md index 7751a46fd1..3c9450c408 100644 --- a/docs/section6/Rule6-1.md +++ b/docs/section6/Rule6-1.md @@ -27,7 +27,7 @@ - For each zone in thermal block: `zone_p in thermal_block_p.zones:` - For each space in zone: `space_p in zone_p.spaces:` - + - For each interior lighting in space, add lighting power to building segment total: `building_segment_design_lighting_wattage += sum(interior_lighting.power_per_area for interior_lighting in space_p.interior_lighting) * space_p.floor_area` - If building segment specifies lighting building area type , add space floor area to the total building segment floor area: `if allowable_LPD_BAM: total_building_segment_area_p += space_p.floor_area` From 2c6e016ec9fc9d7535be364f456a8b6490a0fe16 Mon Sep 17 00:00:00 2001 From: KarenWGard <114143532+KarenWGard@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:28:24 -0400 Subject: [PATCH 06/11] Update Rule6-1.md --- docs/section6/Rule6-1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/section6/Rule6-1.md b/docs/section6/Rule6-1.md index 3c9450c408..7edc7da27b 100644 --- a/docs/section6/Rule6-1.md +++ b/docs/section6/Rule6-1.md @@ -28,7 +28,7 @@ - For each space in zone: `space_p in zone_p.spaces:` - - For each interior lighting in space, add lighting power to building segment total: `building_segment_design_lighting_wattage += sum(interior_lighting.power_per_area for interior_lighting in space_p.interior_lighting) * space_p.floor_area` + - For each interior lighting in space, add lighting power to building segment total: `building_segment_design_lighting_wattage += sum(interior_lighting.power_per_area for interior_lighting in space_p.interior_lighting) * space_p.floor_area` - If building segment specifies lighting building area type , add space floor area to the total building segment floor area: `if allowable_LPD_BAM: total_building_segment_area_p += space_p.floor_area` From a25f68f9fc2bd9209bef34f17083aef5c541272a Mon Sep 17 00:00:00 2001 From: KarenWGard <114143532+KarenWGard@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:36:53 -0400 Subject: [PATCH 07/11] Update Rule6-4.md update baseline LPD calculation to exclude retail display lighting --- docs/section6/Rule6-4.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/section6/Rule6-4.md b/docs/section6/Rule6-4.md index 9e8cb336d3..f7d5ad7b09 100644 --- a/docs/section6/Rule6-4.md +++ b/docs/section6/Rule6-4.md @@ -35,7 +35,12 @@ - For each space in zone: `space_b in zone_b.spaces:` - - Get total lighting power density in space: `total_space_LPD_b = sum(interior_lighting.power_per_area for interior_lighting in space_b.interior_lighting)` + - Get total lighting power density in space, EXCLUDING retail display lighting located in retail space types: `total_space_LPD_b = 0` + - Look at each lighting object in the space: `for interior_lighting in space_b.interior_lighting:` + - create a boolean is_part_of_total and set it to true: `is_part_of_total = TRUE` + - check whether the space type is one of the retail space types: `if space.lighting_space_type in? ["RETAIL_FACILITIES_DRESSING_FITTING_ROOM", "RETAIL_FACILITIES_MALL_CONCOURSE", "RETAIL"]:` + - check whether this specific interior_lighting object is Retail display. If it is, set is_part_of_total to FALSE: `if interior_lighting.purpose_type == "RETAIL_DISPLAY": is_part_of_total = FALSE` + - Add the LPD of this interior_lighting if it is not retail display lighting located in a retail space: `if is_part_of_total: total_space_LPD_b += interior_lighting.power_per_area` - Get lighting status type for space: `space_lighting_status_type = space_lighting_status_type_dict_p[match_data_element(P_RMR, Spaces, space_b.id).id]` From f551605d468d068c0ba6f8a5c6ae0740048deb87 Mon Sep 17 00:00:00 2001 From: KarenWGard <114143532+KarenWGard@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:40:46 -0400 Subject: [PATCH 08/11] Update Rule6-4.md --- docs/section6/Rule6-4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/section6/Rule6-4.md b/docs/section6/Rule6-4.md index f7d5ad7b09..fecc029237 100644 --- a/docs/section6/Rule6-4.md +++ b/docs/section6/Rule6-4.md @@ -38,7 +38,7 @@ - Get total lighting power density in space, EXCLUDING retail display lighting located in retail space types: `total_space_LPD_b = 0` - Look at each lighting object in the space: `for interior_lighting in space_b.interior_lighting:` - create a boolean is_part_of_total and set it to true: `is_part_of_total = TRUE` - - check whether the space type is one of the retail space types: `if space.lighting_space_type in? ["RETAIL_FACILITIES_DRESSING_FITTING_ROOM", "RETAIL_FACILITIES_MALL_CONCOURSE", "RETAIL"]:` + - check whether the space type is one of the retail space types: `if space.lighting_space_type == "SALES AREA":` - check whether this specific interior_lighting object is Retail display. If it is, set is_part_of_total to FALSE: `if interior_lighting.purpose_type == "RETAIL_DISPLAY": is_part_of_total = FALSE` - Add the LPD of this interior_lighting if it is not retail display lighting located in a retail space: `if is_part_of_total: total_space_LPD_b += interior_lighting.power_per_area` From 58bbf9fb5f428391b7c77e34913b143bb6b08b56 Mon Sep 17 00:00:00 2001 From: KarenWGard <114143532+KarenWGard@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:41:04 -0400 Subject: [PATCH 09/11] Update Rule6-10.md --- docs/section6/Rule6-10.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/section6/Rule6-10.md b/docs/section6/Rule6-10.md index a2bab06b80..64bd52e32d 100644 --- a/docs/section6/Rule6-10.md +++ b/docs/section6/Rule6-10.md @@ -19,7 +19,7 @@ - set a boolean called applicable to false: `applicable = false` - set lighting_space_type equal to the space.lighting_space_type: `lighting_space_type = space.lighting_space_type` - if the lighting_space_type is NULL, set the lighting_space_type equal to the building_segment_lighting_type: `if lighting_space_type == NULL: lighting_space_type = building_segment_lighting_type` - - if the lighting space type is one of the retail space types, look at each InteriorLighting object in the model: `if lighting_space_type in? ["RETAIL_FACILITIES_DRESSING_FITTING_ROOM", "RETAIL_FACILITIES_MALL_CONCOURSE", "RETAIL"]:` + - if the lighting space type is one of the retail space types, look at each InteriorLighting object in the model: `if lighting_space_type == "SALES AREA":` - look at each interior lighting: `for interior_lighting in space.interior_lighting:` - if the interior lighting purpose_type is RETAIL_DISPLAY, set applicable to true - we don't go to the rule logic for each interior lighting because the evaluation context is at the space level: `if interior_lighting.purpose_type == "RETAIL_DISPLAY": applicable = true` - if the boolean applicable is true, continue to rule logic: `if applicable: CONTINUE TO RULE LOGIC` From ab1eea9d74e18dd1de8f1a6e1c4e7d436cdbffb9 Mon Sep 17 00:00:00 2001 From: KarenWGard <114143532+KarenWGard@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:48:35 -0400 Subject: [PATCH 10/11] Update Rule6-4.md --- docs/section6/Rule6-4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/section6/Rule6-4.md b/docs/section6/Rule6-4.md index fecc029237..ba9876734f 100644 --- a/docs/section6/Rule6-4.md +++ b/docs/section6/Rule6-4.md @@ -35,7 +35,7 @@ - For each space in zone: `space_b in zone_b.spaces:` - - Get total lighting power density in space, EXCLUDING retail display lighting located in retail space types: `total_space_LPD_b = 0` + - Get total lighting power density in space, EXCLUDING retail display lighting located in Sales Area space types: `total_space_LPD_b = 0` - Look at each lighting object in the space: `for interior_lighting in space_b.interior_lighting:` - create a boolean is_part_of_total and set it to true: `is_part_of_total = TRUE` - check whether the space type is one of the retail space types: `if space.lighting_space_type == "SALES AREA":` From 9153fbf25fd2f0ef745a5ca73984f2885a6efc4c Mon Sep 17 00:00:00 2001 From: KarenWGard <114143532+KarenWGard@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:50:02 -0400 Subject: [PATCH 11/11] Update Rule6-4.md --- docs/section6/Rule6-4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/section6/Rule6-4.md b/docs/section6/Rule6-4.md index ba9876734f..9b7ea23ab7 100644 --- a/docs/section6/Rule6-4.md +++ b/docs/section6/Rule6-4.md @@ -38,7 +38,7 @@ - Get total lighting power density in space, EXCLUDING retail display lighting located in Sales Area space types: `total_space_LPD_b = 0` - Look at each lighting object in the space: `for interior_lighting in space_b.interior_lighting:` - create a boolean is_part_of_total and set it to true: `is_part_of_total = TRUE` - - check whether the space type is one of the retail space types: `if space.lighting_space_type == "SALES AREA":` + - check whether the space type is one of the retail space types: `if space_b.lighting_space_type == "SALES AREA":` - check whether this specific interior_lighting object is Retail display. If it is, set is_part_of_total to FALSE: `if interior_lighting.purpose_type == "RETAIL_DISPLAY": is_part_of_total = FALSE` - Add the LPD of this interior_lighting if it is not retail display lighting located in a retail space: `if is_part_of_total: total_space_LPD_b += interior_lighting.power_per_area`