Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
@@ -1,70 +1,70 @@
# is_zone_a_vestibule
**Schema Version:** 0.0.23
**Description:** following the guidelines in ASHRAE that a vestibule is defined as a sapce with at least one exterior door and with a surface area of no more than the greater of 50ft2 or 2% of the total area of the floor. There is no 100% check for a vestibule, so a space that meets these requirements and also has only 6 surfaces (floor, ceiling and 4 walls) will return False
We will also check that the lighting space type is in agreement with the space use as a vestibule. If there is no lighting space type or one of the following lighting space types AND the zone meets the other checks then we return MAYBE:
- CORRIDOR_FACILITY_FOR_THE_VISUALLY_IMPAIRED
- CORRIDOR_HOSPITAL
- CORRIDOR_ALL_OTHERS
- LOBBY_FACILITY_FOR_THE_VISUALLY_IMPAIRED
- LOBBY_HOTEL
- LOBBY_MOTION_PICTURE_THEATER
- LOBBY_PERFORMING_ARTS_THEATER
- LOBBY_ALL_OTHERS
- STAIRWELL
**Inputs:**
- **zone**: the zone to be tested
- **RMR**: the building
**Returns:**
- **vestibule_check**: boolean, False means NO, True means MAYBE
**Function Call:**
- **get_zones_on_same_floor**
## setup for all function calls:
- make a list of the allowable space types: `allowable_space_lighting_types = [CORRIDOR_FACILITY_FOR_THE_VISUALLY_IMPAIRED, CORRIDOR_HOSPITAL, CORRIDOR_ALL_OTHERS, LOBBY_FACILITY_FOR_THE_VISUALLY_IMPAIRED, LOBBY_HOTEL, LOBBY_MOTION_PICTURE_THEATER, LOBBY_PERFORMING_ARTS_THEATER, LOBBY_ALL_OTHERS, STAIRWELL]
## Logic:
- check if the zone spaces have either no lighting space type, or a lighting space type on the allowable_space_lighting_types list. Start by looping through the spaces in the zone: `for space in zone.spaces:`
- check if the space lighting type is NOT either Null or one of the allowable types in the list: `if not(space.lighting_space_type == Null or space.lighting_space_type in allowable_space_lighting_types):`
- this is not an eligible space type, the function can return NO right away: `return False`
- if the function makes it this far, the zone contained only vestibule-compatible spaces and we continue with the rest of the vestibule check below
- make a list of the surface adjacencies that would qualify a space as exterior: `surface_adjacencies = [SurfaceAdjacentToOptions.EXTERIOR]
- set result to NO: `vestibule_check = False`
- create a variable to store the surface area of exterior doors: `exterior_door_surface_area = 0`
- first check if there is an exterior door in the zone by looping through the zone surfaces and then subsurfaces: `for surface in zone.surfaces:`
if surface is exterior, check if there is door on the surface: `if surface.adjacent_to in surface_adjacencies:`
- loop through the zone subsurfaces: `for subsurface in subsurfaces:`
- check if the subsurface is a door: `if subsurface.classification == SubsurfaceClassificationOptions.DOOR:`
- add the glazed and opaque area of the exterior door to the exterior_door_surface_area variable: `exterior_door_surface_area += subsurface.glazed_area + subsurface.opaque_area`
- if there were exterior doors, the exterior_door_surface_area will be greater than 0: `if exterior_door_surface_area > 0:`
- create a variable for the total floor area: `floor_area = 0`
- get a list of zones on the same floor: `zones_on_same_floor = get_zones_on_same_floor(B_RMI, zone)`
- loop through the building adding the floor area of all zones on the same floor as the zone: `for building_segment in RMR.building_segments:`
- loop through the zones: `for z in building_segment:`
- check of z is on the same floor by checking whether it is in the list of zones on the same floor: `if z in zones_on_same_floor:`
- loop through the z spaces adding the area to the floor_area: `for space in z.spaces:`
- add space area to floor_area: `floor_area = floor_area + space.floor_area`
- create a variable for the target zone's area: `zone_area = 0`
- find the floor area of the target zone by adding the floor area of the target zone's spaces: `for space in zone.spaces:`
- add the space's floor area to zone_area: `zone_area = zone_area + space.area`
- create a variable that equals that maximum vestibule floor area, which is the larger of 50ft2 or 2% of the floor area: `max_vestibule_area = max(50,0.02*floor_area)`
- if the zone_area is less than or equal to max_vestibule_area, then this could be a vestibule: `if zone_area <= max_vestibule_area:`
- this zone is possibly a vestibule. Set vestibule check to MAYBE: `vestibule_check = True`
**Returns** `return vestibule_check`
**Notes/Questions:**
**[Back](../_toc.md)**
# is_zone_a_vestibule
**Schema Version:** 0.0.23

**Description:** following the guidelines in ASHRAE that a vestibule is defined as a sapce with at least one exterior door and with a surface area of no more than the greater of 50ft2 or 2% of the total area of the floor. There is no 100% check for a vestibule, so a space that meets these requirements and also has only 6 surfaces (floor, ceiling and 4 walls) will return False

We will also check that the lighting space type is in agreement with the space use as a vestibule. If there is no lighting space type or one of the following lighting space types AND the zone meets the other checks then we return MAYBE:
- CORRIDOR_FACILITY_FOR_THE_VISUALLY_IMPAIRED
- CORRIDOR_HOSPITAL
- CORRIDOR_ALL_OTHERS
- LOBBY_FACILITY_FOR_THE_VISUALLY_IMPAIRED
- LOBBY_HOTEL
- LOBBY_MOTION_PICTURE_THEATER
- LOBBY_PERFORMING_ARTS_THEATER
- LOBBY_ALL_OTHERS
- STAIRWELL


**Inputs:**
- **zone**: the zone to be tested
- **RMR**: the building

**Returns:**
- **vestibule_check**: boolean, False means NO, True means MAYBE

**Function Call:**
- **get_zones_on_same_floor**


## setup for all function calls:
- make a list of the allowable space types: `allowable_space_lighting_types = [CORRIDOR_FACILITY_FOR_THE_VISUALLY_IMPAIRED, CORRIDOR_HOSPITAL, CORRIDOR_ALL_OTHERS, LOBBY_FACILITY_FOR_THE_VISUALLY_IMPAIRED, LOBBY_HOTEL, LOBBY_MOTION_PICTURE_THEATER, LOBBY_PERFORMING_ARTS_THEATER, LOBBY_ALL_OTHERS, STAIRWELL]

## Logic:
- check if the zone spaces have either no lighting space type, or a lighting space type on the allowable_space_lighting_types list. Start by looping through the spaces in the zone: `for space in zone.spaces:`
- check if the space lighting type is NOT either Null or one of the allowable types in the list: `if not(space.lighting_space_type == Null or space.lighting_space_type in allowable_space_lighting_types):`
- this is not an eligible space type, the function can return NO right away: `return False`

- if the function makes it this far, the zone contained only vestibule-compatible spaces and we continue with the rest of the vestibule check below

- make a list of the surface adjacencies that would qualify a space as exterior: `surface_adjacencies = [SurfaceAdjacentToOptions.EXTERIOR]
- set result to NO: `vestibule_check = False`
- create a variable to store the surface area of exterior doors: `exterior_door_surface_area = 0`
- first check if there is an exterior door in the zone by looping through the zone surfaces and then subsurfaces: `for surface in zone.surfaces:`
if surface is exterior, check if there is door on the surface: `if surface.adjacent_to in surface_adjacencies:`
- loop through the zone subsurfaces: `for subsurface in subsurfaces:`
- check if the subsurface is a door: `if subsurface.classification == SubsurfaceClassificationOptions.DOOR:`
- add the glazed and opaque area of the exterior door to the exterior_door_surface_area variable: `exterior_door_surface_area += subsurface.glazed_area + subsurface.opaque_area`

- if there were exterior doors, the exterior_door_surface_area will be greater than 0: `if exterior_door_surface_area > 0:`
- create a variable for the total floor area: `floor_area = 0`
- get a list of zones on the same floor: `zones_on_same_floor = get_zones_on_same_floor(B_RMI, zone)`
- loop through the building adding the floor area of all zones on the same floor as the zone: `for building_segment in RMR.building_segments:`
- loop through the zones: `for z in building_segment:`
- check of z is on the same floor by checking whether it is in the list of zones on the same floor: `if z in zones_on_same_floor:`
- loop through the z spaces adding the area to the floor_area: `for space in z.spaces:`
- add space area to floor_area: `floor_area = floor_area + space.floor_area`
- create a variable for the target zone's area: `zone_area = 0`
- find the floor area of the target zone by adding the floor area of the target zone's spaces: `for space in zone.spaces:`
- add the space's floor area to zone_area: `zone_area = zone_area + space.area`
- create a variable that equals that maximum vestibule floor area, which is the larger of 50ft2 or 2% of the floor area: `max_vestibule_area = max(50,0.02*floor_area)`
- if the zone_area is less than or equal to max_vestibule_area, then this could be a vestibule: `if zone_area <= max_vestibule_area:`
- this zone is possibly a vestibule. Set vestibule check to MAYBE: `vestibule_check = True`


**Returns** `return vestibule_check`

**Notes/Questions:**



**[Back](../_toc.md)**
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
# does_zone_meet_G3_1_1f
**Schema Version:** 0.0.22
**Description:** determines whether a given zone meets the G3_1_1f exception "If the baseline HVAC system type is 9 or 10, use additional system types for all HVAC zones that are mechanically cooled in the proposed design." - this function is only called if the expected baseline system type has already been confirmed to be system type 9 or 10
**Inputs:**
- **B-RMI** - the baseline building
- **zone_id** - the zone in the proposed building
**Returns:**
- **result**: an enum - either YES or NO
**Function Call:**
- **is_zone_mechanically_cooled**
## Logic:
- set the result variable to NO - only a positive test can give it a different value: `result = NO`
- get the proposed zone: `zone_p = get_component_by_id(P-RMI, zone_id)for building_segment_p in P-RMI.building_segments:`
- check if the proposed is cooled: `if is_zone_mechanically_cooled(P-RMI, zone_p):`
- `result = YES`
**Returns** `result`
**Notes/Questions:**
# does_zone_meet_G3_1_1f
**Schema Version:** 0.0.22

**Description:** determines whether a given zone meets the G3_1_1f exception "If the baseline HVAC system type is 9 or 10, use additional system types for all HVAC zones that are mechanically cooled in the proposed design." - this function is only called if the expected baseline system type has already been confirmed to be system type 9 or 10

**Inputs:**
- **B-RMI** - the baseline building
- **zone_id** - the zone in the proposed building

**Returns:**
- **result**: an enum - either YES or NO

**Function Call:**
- **is_zone_mechanically_cooled**

## Logic:
- set the result variable to NO - only a positive test can give it a different value: `result = NO`
- get the proposed zone: `zone_p = get_component_by_id(P-RMI, zone_id)for building_segment_p in P-RMI.building_segments:`
- check if the proposed is cooled: `if is_zone_mechanically_cooled(P-RMI, zone_p):`
- `result = YES`

**Returns** `result`


**Notes/Questions:**

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
76 changes: 38 additions & 38 deletions docs/section1/Rule1-6.md → docs/ashrae9012019/section1/Rule1-6.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,38 @@
# Section 1 - Rule 1-6
**Rule ID:** 1-6
**Rule Description:** On-site renewable energy shall not be included in the baseline building performance.
**Rule Assertion:** Baseline RMD = expected value
**Appendix G Section:** G3.11 18 Baseline
**Mandatory Rule:** True
**Evaluation Context:** Each baseline RMD
**Function Call:**
## Applicability Check:
- All projects are applicable
## Rule Logic:
- set a boolean has_renewables and set it to false: `has_renewables = false`
- look at each baseline model rotation: `for rotation in [B_RMD, B_RMD_90, B_RMD_180, B_RMD_270]:`
- get the baseline output schema: `output = rotation.output`
- get the output instance: `output_instance = output.output_instance`
- look at each end use result: `for end_use_result in output_instance.annual_end_use_results:`
- check if the energy source for the end_use_result is "ON_SITE_RENEWABLES": `if end_use_result.energy_source == "ON_SITE_RENEWABLES":`
- check if the energy end use is greater than 0: `if end_us_result.annual_site_energy_use > 0:`
- set has_renewables to true and continue to rule assertion: `has_renewables = true; CONTINUE TO RULE ASSERTION`
- if we get here without going to the rule assertion, continue to rule assertion: `CONTINUE TO RULE ASSERTION`
**Rule Assertion:**
- Case 1: If has_renewables is true, then FAIL: `if has_renewables == true: FAIL`
- Case 2: otherwise, there are no renewables, PASS: `else: PASS`
**Notes:**
1.
**[Back](../_toc.md)**

# Section 1 - Rule 1-6

**Rule ID:** 1-6
**Rule Description:** On-site renewable energy shall not be included in the baseline building performance.
**Rule Assertion:** Baseline RMD = expected value
**Appendix G Section:** G3.11 18 Baseline

**Mandatory Rule:** True
**Evaluation Context:** Each baseline RMD
**Function Call:**

## Applicability Check:
- All projects are applicable


## Rule Logic:
- set a boolean has_renewables and set it to false: `has_renewables = false`
- look at each baseline model rotation: `for rotation in [B_RMD, B_RMD_90, B_RMD_180, B_RMD_270]:`
- get the baseline output schema: `output = rotation.output`
- get the output instance: `output_instance = output.output_instance`
- look at each end use result: `for end_use_result in output_instance.annual_end_use_results:`
- check if the energy source for the end_use_result is "ON_SITE_RENEWABLES": `if end_use_result.energy_source == "ON_SITE_RENEWABLES":`
- check if the energy end use is greater than 0: `if end_us_result.annual_site_energy_use > 0:`
- set has_renewables to true and continue to rule assertion: `has_renewables = true; CONTINUE TO RULE ASSERTION`
- if we get here without going to the rule assertion, continue to rule assertion: `CONTINUE TO RULE ASSERTION`

**Rule Assertion:**
- Case 1: If has_renewables is true, then FAIL: `if has_renewables == true: FAIL`
- Case 2: otherwise, there are no renewables, PASS: `else: PASS`


**Notes:**
1.

**[Back](../_toc.md)**


File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loading
Loading