Source code for cea.utilities.helpers

# -*- coding: utf-8 -*-
"""
Some helper functions that could be useful
"""

from __future__ import division
import math
import numpy as np


[docs]def hoy_2_doy(hoy): """ Hour of year to day of year hoy: hour of year doy: day of year """ if check_hoy(hoy): return int(math.floor(hoy/24)) + 1 else: return None
[docs]def doy_2_hoy(doy): """ Day of year to hour of year doy: day of year hoy: hour of year """ if check_doy(doy): return doy*24 else: return None
[docs]def hoy_2_woy(hoy): """ Hour of year to week of year hoy: hour of year woy: weak of year """ if check_hoy(hoy): return int(math.floor(hoy_2_doy(hoy)/7)) + 1 else: return None
[docs]def hoy_2_moy(hoy): """ hour of year to month of year hoy: hour of year moy: month of year """ if check_hoy(hoy): # months_of_year = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) days_in_month = np.array([0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]) return np.where(np.cumsum(days_in_month) >= hoy_2_doy(hoy))[0][0] else: return None
[docs]def hoy_2_hod(hoy): """ hour of year to hour of day hoy: hour of year hod: hour of day """ if check_hoy(hoy): return hoy % 24 else: return None
[docs]def hoy_2_dom(hoy): """ hour of year to day of month hoy: hour of year dom: day of month """ if check_hoy(hoy): days_in_month = np.array([0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]) doy = hoy_2_doy(hoy) moy = hoy_2_moy(hoy) return doy - np.cumsum(days_in_month)[moy] + days_in_month[moy] else: return None
[docs]def hoy_2_seasonhour(hoy, gv): """ hour of year to hour relative to start of heating season hoy: hour of year seasonhour: hour relative to start of heating season """ hoy_heat_stop, hoy_heat_start = gv.seasonhours if check_hoy(hoy): if hoy > hoy_heat_start - 1: seasonhour = hoy - hoy_heat_start else: seasonhour = hoy + 8760 - hoy_heat_start return seasonhour else: return None
[docs]def seasonhour_2_hoy(seasonhour, gv): """ hour relative to start of heating season to hour of year seasonhour: hour relative to start of heating season hoy: hour of year """ hoy_heat_stop, hoy_heat_start = gv.seasonhours # convert negative seasonhours to positive (for heating up phase consideration) if seasonhour < 0: seasonhour = 8760 - abs(seasonhour) if check_hoy(seasonhour): if seasonhour < 8760 - hoy_heat_start: hoy = hoy_heat_start + seasonhour else: hoy = hoy_heat_start - 8760 + seasonhour return hoy else: return None
[docs]def check_hoy(hoy): """ check for hour of year within bounds hoy: hour of year bool """ if 0 <= hoy <= 8759: return True else: print('Error: hour of year out of bounds') print(hoy) return False
[docs]def check_doy(doy): """ check for day of year within bounds doy: day of year bool """ if 0 <= doy <= 359: return True else: print('Error: day of year out of bounds') print(doy) return False
[docs]def is_nighttime_hoy(hoy): """ Check if a certain hour of year is during night or not hoy: hour of year bool """ if check_hoy(hoy): location = 'CH' # TODO get location start_night = 21 # 21:00 # TODO: make dynamic (e.g. as function of location/country) stop_night = 7 # 07:00 # TODO: make dynamic (e.g. as function of location/country) if start_night <= hoy_2_hod(hoy) or stop_night >= hoy_2_hod(hoy): return True else: return False else: return
[docs]def is_daytime_hoy(hoy): """ Check if a certain hour of the year is during the daytime or not hoy : hour of year bool """ if check_hoy(hoy): if not is_nighttime_hoy(hoy): return True else: return False else: return
[docs]def is_heatingseason_hoy(hoy): """ checks if a certain hour of the year is part of the heating season or not hoy : hour of year bool """ if check_hoy(hoy): #TODO: get location from (?) location = 'CH' #TODO: get start heating season f(location) seasonhours = [3216, 6192] if hoy > seasonhours[1] or hoy < seasonhours[0]: return True else: return False else: return
[docs]def is_coolingseason_hoy(hoy): """ checks if a certain hour of the year is part of the cooling season or not hoy : hour of year bool """ if check_hoy(hoy): if not is_heatingseason_hoy(hoy): return True else: return False else: return
[docs]def test_helpers(): """ test helpers """ import cea.globalvar gv = cea.globalvar.GlobalVariables() # translate hours of year to hours relative to start of heating season a = np.vectorize(hoy_2_seasonhour)(range(8760), gv) # translate back b = np.vectorize(seasonhour_2_hoy)(a, gv) # compare print(np.array_equal(range(8760), b))
if __name__ == '__main__': test_helpers()