added operational co2 emissions-> NOT WORKING

This commit is contained in:
Pilar Monsalvete 2023-07-28 12:17:48 -04:00
parent a519b0e01c
commit 41b9fe4049
3 changed files with 86 additions and 7 deletions

80
costs/co2_emission.py Normal file
View File

@ -0,0 +1,80 @@
"""
CO2 emission module
SPDX - License - Identifier: LGPL - 3.0 - or -later
Copyright © 2023 Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
"""
from hub.city_model_structure.building import Building
import hub.helpers.constants as cte
class Co2Emission:
"""
Cost class
"""
def __init__(self, building: Building, emissions_factor=None):
if emissions_factor is None:
emissions_factor = {cte.GAS: 1,
cte.ELECTRICITY: 1,
cte.WOOD: 1,
cte.DIESEL: 1,
cte.RENEWABLE: 0}
self._emissions_factor = emissions_factor
self._building = building
@property
def building(self) -> Building:
"""
Get current building.
"""
return self._building
@property
def operational_co2(self) -> dict:
"""
Get operational_co2
:return: dict
"""
results = {}
for energy_system in self._building.energy_systems:
fuel_type = energy_system.generation_system.generic_generation_system.fuel_type
for demand_type in energy_system.demand_types:
results_by_time_period = {}
if str(demand_type).lower() == str(cte.HEATING).lower():
for time_period in self._building.heating_consumption:
values = []
for value in self._building.heating_consumption[time_period]:
values.append(value * self._emissions_factor[fuel_type])
results_by_time_period[time_period] = values
if demand_type == cte.COOLING:
for time_period in self._building.cooling_consumption:
values = []
for value in self._building.cooling_consumption[time_period]:
values.append(value * self._emissions_factor[fuel_type])
results_by_time_period[time_period] = values
if demand_type == cte.DOMESTIC_HOT_WATER:
for time_period in self._building.domestic_hot_water_consumption:
values = []
for value in self._building.domestic_hot_water_consumption[time_period]:
values.append(value * self._emissions_factor[fuel_type])
results_by_time_period[time_period] = values
results[demand_type] = results_by_time_period
results_by_time_period = {}
for time_period in self._building.lighting_electrical_demand:
values = []
for value in self._building.lighting_electrical_demand[time_period]:
values.append(value * self._emissions_factor[cte.ELECTRICITY])
results_by_time_period[time_period] = values
results[cte.LIGHTING] = results_by_time_period
results_by_time_period = {}
for time_period in self._building.appliances_electrical_demand:
values = []
for value in self._building.appliances_electrical_demand[time_period]:
values.append(value * self._emissions_factor[cte.ELECTRICITY])
results_by_time_period[time_period] = values
results[cte.APPLIANCES] = results_by_time_period
return results

View File

@ -62,13 +62,6 @@ class Cost:
"""
return self._building
@building.setter
def building(self, value: Building):
"""
Set current building.
"""
self._building = value
def _npv_from_list(self, list_cashflow):
return npf.npv(self._configuration.discount_rate, list_cashflow)

View File

@ -17,6 +17,7 @@ from hub.helpers.dictionaries import Dictionaries
from costs.cost import Cost
from costs.constants import SKIN_RETROFIT, SKIN_RETROFIT_AND_SYSTEM_RETROFIT_AND_PV, SYSTEM_RETROFIT_AND_PV
from costs.co2_emission import Co2Emission
class Initialize:
@ -81,6 +82,11 @@ class UnitTests(unittest.TestCase):
result = Cost(building, retrofit_scenario=SKIN_RETROFIT_AND_SYSTEM_RETROFIT_AND_PV).life_cycle
self.assertIsNotNone(result)
def test_co2_emission(self):
for building in self.init.city.buildings:
result = Co2Emission(building).operational_co2
self.assertIsNotNone(result)
def tearDown(self):
files = glob.glob('output/[!.]*')
for file in files: