Source code for honeybee_ph_utils.ventilation

# -*- coding: utf-8 -*-
# -*- Python Version: 2.7 -*-

"""Utility functions for working with Honeybee-Energy Ventilation Loads and Schedules."""


from honeybee_ph_utils import occupancy


[docs] def hb_room_vent_flowrates(_hb_room): # type: (room.Room) -> tuple[float, float, float, float] """Return the honeybee-Room's four ventilation flow rates in m3/s, or 0 if no ventilation program is found on the room. Arguments: ---------- * _hb_room (honeybee.room.Room): The honeyebee-Room to get the value for. Returns: -------- * tuple[float, float, float, float]: - [0] (m3s): The honeybee-Room's ventilation flow_per_person - [1] (m3s): The honeybee-Room's ventilation flow_per_area - [2] (m3s): The honeybee-Room's ventilation flow_by_air_changes_per_hour - [3] (m3s): The honeybee-Room's ventilation flow_per_zone """ default_flow_rates = (0.0, 0.0, 0.0, 0.0) try: vent_program = _hb_room.properties.energy.ventilation except: return default_flow_rates if vent_program is None: # -- Not all programs have a ventilation. If so, return 0 for all flows. return default_flow_rates else: return ( vent_program.flow_per_person, vent_program.flow_per_area, vent_program.air_changes_per_hour * _hb_room.volume / 3600, vent_program.flow_per_zone, )
[docs] def hb_room_peak_ventilation_airflow_by_zone(_hb_room): # type: (room.Room) -> float """Return the Peak Ventilation Airflow (m3/s) for the 'Zone' related elements of a honeybee-Room. This will return a sum of the room's flow_per_zone, flow_per_area, and air_changes_per_hour but will ignore any occupancy related flow-rates. To get the occupancy-related ventilation airflow, use the 'hb_room_peak_ventilation_airflow_by_occupancy' function and to get the total airflow (by-zone + by-occupancy) use the 'hb_room_peak_ventilation_airflow_total' Arguments: ---------- * _hb_room (room.Room): Returns: -------- * float (m/s): Total airflow (m3/s) For the Ventilation-based airflow (per zone, per area, ach). """ try: rm_vent_program = _hb_room.properties.energy.ventilation vent_m3s_for_zone = rm_vent_program.flow_per_zone vent_m3s_for_area = rm_vent_program.flow_per_area * _hb_room.floor_area vent_m3h_for_ach = rm_vent_program.air_changes_per_hour * _hb_room.volume / 3600 return vent_m3s_for_zone + vent_m3s_for_area + vent_m3h_for_ach except AttributeError: return 0.0
[docs] def hb_room_peak_ventilation_airflow_by_occupancy(_hb_room): # type: (room.Room) -> float """Return the Peak Ventilation Airflow (m3/s) for the 'Occupancy' related elements of a honeybee-Room. This will return the room's flow_per_person, but will ignore any 'zone' related flow-rates. such as flow_per_zone or flow_per_area, To get the zone-related ventilation airflow, use the 'hb_room_peak_ventilation_airflow_by_zone' function and to get the total airflow (by-zone + by-occupancy) use the 'hb_room_peak_ventilation_airflow_total' Arguments: ---------- * _hb_room (room.Room): Returns: -------- * float (m/s): Total airflow (m3/s) For the Occupancy-based airflow (per person). """ try: peak_occupancy = occupancy.hb_room_peak_occupancy(_hb_room) return _hb_room.properties.energy.ventilation.flow_per_person * peak_occupancy except AttributeError: return 0.0
[docs] def hb_room_peak_ventilation_airflow_total(_hb_room): # type: (room.Room) -> float """Return the total peak ventilation flow rate (m/s). Total of occupancy- and zone-related airlfows. Not all honeybee-Rooms have ventilation loads. If that is the case, will return 0. Arguments: ---------- * _hb_room (room.Room): The honeyebee room to calculate values for. Returns: -------- * float: The total ventilation peak airflow for the honeybee-Room. """ vent_m3s_total = hb_room_peak_ventilation_airflow_by_zone(_hb_room) occ_m3s_total = hb_room_peak_ventilation_airflow_by_occupancy(_hb_room) return vent_m3s_total + occ_m3s_total