2020-10-28 13:42:58 -04:00
|
|
|
"""
|
|
|
|
Building module
|
|
|
|
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
|
|
|
Copyright © 2020 Project Author Sanam Dabirian sanam.dabirian@mail.concordia.ca
|
2020-11-02 13:41:42 -05:00
|
|
|
Contributors Pilar Monsalvete pilar_monsalvete@yahoo.es
|
2020-10-28 13:42:58 -04:00
|
|
|
"""
|
|
|
|
|
2020-11-02 13:41:42 -05:00
|
|
|
import calendar as cal
|
|
|
|
|
2020-10-28 13:42:58 -04:00
|
|
|
|
|
|
|
class Occupancy:
|
|
|
|
"""
|
|
|
|
Occupancy class
|
|
|
|
"""
|
|
|
|
|
2020-11-02 13:41:42 -05:00
|
|
|
def __init__(self):
|
2020-10-28 13:42:58 -04:00
|
|
|
"""
|
|
|
|
Constructor
|
|
|
|
"""
|
|
|
|
|
2020-11-02 13:41:42 -05:00
|
|
|
self._internal_heat_gain = None
|
|
|
|
self._heat_dissipation = None
|
|
|
|
self._occupant_rate = None
|
|
|
|
self._occupant_type = None
|
|
|
|
self._occupant_zone = None
|
|
|
|
self._occupant_schedule = None
|
|
|
|
self._number_of_occupants = None
|
|
|
|
self._arrival_time = None
|
|
|
|
self._departure_time = None
|
|
|
|
self._break_time = None
|
|
|
|
self._day_of_week = None
|
|
|
|
self._pd_of_meetings_duration = None
|
|
|
|
self._complete_year_schedule = None
|
2020-10-28 13:42:58 -04:00
|
|
|
|
|
|
|
@property
|
|
|
|
def internal_heat_gain(self):
|
|
|
|
"""
|
|
|
|
Get internal heat gain of occupants
|
|
|
|
:return: occupant heat gain
|
|
|
|
"""
|
|
|
|
return self._internal_heat_gain
|
|
|
|
|
|
|
|
@property
|
|
|
|
def heat_dissipation(self):
|
|
|
|
"""
|
|
|
|
Get heat dissipation of occupants
|
|
|
|
:return: heat dissipation
|
|
|
|
"""
|
|
|
|
return self._heat_dissipation
|
|
|
|
|
|
|
|
@property
|
|
|
|
def occupant_rate(self):
|
|
|
|
"""
|
|
|
|
Get rate of occupancy
|
|
|
|
:return: rate of occupancy
|
|
|
|
"""
|
|
|
|
return self._occupant_rate
|
|
|
|
|
|
|
|
@property
|
|
|
|
def occupant_type(self):
|
|
|
|
"""
|
|
|
|
Get type of occupancy
|
|
|
|
:return: type of occupancy
|
|
|
|
"""
|
|
|
|
return self._occupant_type
|
|
|
|
|
|
|
|
@property
|
|
|
|
def occupant_zone(self):
|
|
|
|
"""
|
|
|
|
Get the zone that occupant is in it
|
|
|
|
:return: occupant zone
|
|
|
|
"""
|
|
|
|
return self._occupant_zone
|
|
|
|
|
|
|
|
@property
|
|
|
|
def occupant_schedule(self):
|
|
|
|
"""
|
|
|
|
Get the schedule when an occupant is in a zone
|
|
|
|
:return: occupant schedule
|
|
|
|
"""
|
|
|
|
return self._occupant_schedule
|
|
|
|
|
|
|
|
@property
|
|
|
|
def number_of_occupants(self):
|
|
|
|
"""
|
|
|
|
Get the number of occupants
|
|
|
|
:return: number of occupants
|
|
|
|
"""
|
|
|
|
return self._number_of_occupants
|
|
|
|
|
|
|
|
@property
|
|
|
|
def arrival_time(self):
|
|
|
|
"""
|
|
|
|
Get the arrival time of the occupant (for office building)
|
|
|
|
:return: arrival time
|
|
|
|
"""
|
|
|
|
return self._arrival_time
|
|
|
|
|
|
|
|
@property
|
|
|
|
def departure_time(self):
|
|
|
|
"""
|
|
|
|
Get the departure time of the occupant (for office building)
|
|
|
|
:return: departure time
|
|
|
|
"""
|
|
|
|
return self._departure_time
|
|
|
|
|
|
|
|
@property
|
|
|
|
def break_time(self):
|
|
|
|
"""
|
|
|
|
Get the lunch or break time of the occupant (for office building)
|
|
|
|
:return: break time
|
|
|
|
"""
|
|
|
|
return self._break_time
|
|
|
|
|
|
|
|
@property
|
|
|
|
def day_of_week(self):
|
|
|
|
"""
|
|
|
|
Get the day of the week
|
|
|
|
:return: day of the week
|
|
|
|
"""
|
|
|
|
return self._day_of_week
|
|
|
|
|
|
|
|
@property
|
|
|
|
def pd_of_meetings_duration(self):
|
|
|
|
"""
|
|
|
|
Get the probability distribution of the meeting duration
|
|
|
|
:return: probability distribution of the meeting duration
|
|
|
|
"""
|
|
|
|
return self._pd_of_meetings_duration
|
2020-11-02 13:41:42 -05:00
|
|
|
|
|
|
|
def get_complete_year_schedule(self, schedules):
|
|
|
|
if self._complete_year_schedule is None:
|
|
|
|
self._complete_year_schedule = []
|
|
|
|
for i in range(1, 13):
|
|
|
|
month_range = cal.monthrange(2015, i)
|
|
|
|
for day in range(1, month_range[1]+1):
|
|
|
|
if cal.weekday(2015, i, day) < 5:
|
|
|
|
for j in range(0, 24):
|
|
|
|
week_schedule = schedules['WD'][j]
|
|
|
|
self._complete_year_schedule.append(week_schedule)
|
|
|
|
elif cal.weekday(2015, i, day) == 5:
|
|
|
|
for j in range(0, 24):
|
|
|
|
week_schedule = schedules['Sat'][j]
|
|
|
|
self._complete_year_schedule.append(week_schedule)
|
|
|
|
else:
|
|
|
|
for j in range(0, 24):
|
|
|
|
week_schedule = schedules['Sun'][j]
|
|
|
|
self._complete_year_schedule.append(week_schedule)
|
|
|
|
return self._complete_year_schedule
|