hub/imports/constructions/helpers/construction_helper.py
2021-06-01 18:31:50 -04:00

150 lines
4.4 KiB
Python

"""
Construction helper
SPDX - License - Identifier: LGPL - 3.0 - or -later
Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
"""
import sys
class ConstructionHelper:
# NREL
function_to_nrel = {
'residential': 'residential',
'single family house': 'single family house',
'multifamily house': 'multifamily house',
'hotel': 'hotel',
'hospital': 'hospital',
'outpatient': 'outpatient',
'commercial': 'commercial',
'strip mall': 'strip mall',
'warehouse': 'warehouse',
'primary school': 'primary school',
'secondary school': 'secondary school',
'office': 'office',
'large office': 'large office'
}
nrel_function_default_value = 'residential'
nrel_standards = {
'ASHRAE Std189': 1,
'ASHRAE 90.1_2004': 2
}
reference_city_to_nrel_climate_zone = {
'Miami': 'ASHRAE_2004:1A',
'Houston': 'ASHRAE_2004:2A',
'Phoenix': 'ASHRAE_2004:2B',
'Atlanta': 'ASHRAE_2004:3A',
'Los Angeles': 'ASHRAE_2004:3B',
'Las Vegas': 'ASHRAE_2004:3B',
'San Francisco': 'ASHRAE_2004:3C',
'Baltimore': 'ASHRAE_2004:4A',
'Albuquerque': 'ASHRAE_2004:4B',
'Seattle': 'ASHRAE_2004:4C',
'Chicago': 'ASHRAE_2004:5A',
'Boulder': 'ASHRAE_2004:5B',
'Minneapolis': 'ASHRAE_2004:6A',
'Helena': 'ASHRAE_2004:6B',
'Duluth': 'ASHRAE_2004:7A',
'Fairbanks': 'ASHRAE_2004:8A'
}
nrel_window_types = ['window', 'door', 'skylight']
# todo: review with the same idea, to define a internal set and do the conversion to NREL
nrel_construction_types = {
'Wall': 'exterior wall',
'interior wall': 'interior wall',
'ground wall': 'ground wall',
'Ground': 'exterior slab',
'attic floor': 'attic floor',
'interior slab': 'interior slab',
'Roof': 'roof'
}
# NRCAN
function_to_nrcan = {
'residential': 'residential',
'single family house': 'single family house',
'multifamily house': 'multifamily house',
'hotel': 'hotel',
'hospital': 'hospital',
'outpatient': 'outpatient',
'commercial': 'commercial',
'strip mall': 'strip mall',
'warehouse': 'warehouse',
'primary school': 'primary school',
'secondary school': 'secondary school',
'office': 'office',
'large office': 'large office'
}
nrcan_function_default_value = 'residential'
nrcan_window_types = ['window']
# todo: review with the same idea, to define a internal set and do the conversion to NREL
nrcan_construction_types = {
'WallSurface': 'wall',
'ground wall': 'basement_wall',
'GroundSurface': 'floor',
'attic floor': 'attic floor',
'interior slab': 'interior slab',
'RoofSurface': 'roof'
}
@staticmethod
def nrel_from_function(function):
"""
Get NREL function from the given internal function key
:param function: str
:return: str
"""
try:
return ConstructionHelper.function_to_nrel[function]
except KeyError:
sys.stderr.write('Error: keyword not found. Returned default NREL function "residential"\n')
return ConstructionHelper.nrel_function_default_value
@staticmethod
def yoc_to_nrel_standard(year_of_construction):
"""
Year of construction to NREL standard
:param year_of_construction: int
:return: str
"""
if int(year_of_construction) < 2009:
standard = 'ASHRAE 90.1_2004'
else:
standard = 'ASHRAE 189.1_2009'
return standard
@staticmethod
def city_to_reference_city(city):
"""
City name to reference city
:param city: str
:return: str
"""
# ToDo: Dummy function that needs to be implemented
reference_city = 'Baltimore'
if city is not None:
reference_city = 'Baltimore'
return reference_city
@staticmethod
def city_to_nrel_climate_zone(city):
"""
City name to NREL climate zone
:param city: str
:return: str
"""
reference_city = ConstructionHelper.city_to_reference_city(city)
return ConstructionHelper.reference_city_to_nrel_climate_zone[reference_city]
@staticmethod
def nrcan_from_function(function):
"""
Get NREL function from the given internal function key
:param function: str
:return: str
"""
try:
return ConstructionHelper.function_to_nrcan[function]
except KeyError:
sys.stderr.write('Error: keyword not found. Returned default NRCAN function "residential"\n')
return ConstructionHelper.nrcan_function_default_value