forked from s_ranjbar/city_retrofit
Included an option for return dictionary when output file is None
This commit is contained in:
parent
04c56587a8
commit
175d772c24
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -6,7 +6,7 @@ Copyright © 2022 Concordia CERC group
|
||||||
Project Coder Peter Yefi peteryefi@gmail.com
|
Project Coder Peter Yefi peteryefi@gmail.com
|
||||||
"""
|
"""
|
||||||
from exports.energy_systems.heat_pump_export import HeatPumpExport
|
from exports.energy_systems.heat_pump_export import HeatPumpExport
|
||||||
from typing import List, Tuple, Union
|
from typing import List, Dict, Union
|
||||||
|
|
||||||
|
|
||||||
class AirSourceHPExport(HeatPumpExport):
|
class AirSourceHPExport(HeatPumpExport):
|
||||||
|
@ -28,7 +28,6 @@ class AirSourceHPExport(HeatPumpExport):
|
||||||
template_path = (base_path / tmp_file)
|
template_path = (base_path / tmp_file)
|
||||||
super().__init__(base_path, city, output_path, template_path, demand_path)
|
super().__init__(base_path, city, output_path, template_path, demand_path)
|
||||||
|
|
||||||
|
|
||||||
def _extract_model_coff(self, hp_model: str, data_type='heat') -> Union[List, None]:
|
def _extract_model_coff(self, hp_model: str, data_type='heat') -> Union[List, None]:
|
||||||
"""
|
"""
|
||||||
Extracts heat pump coefficient data for a specific
|
Extracts heat pump coefficient data for a specific
|
||||||
|
@ -45,7 +44,7 @@ class AirSourceHPExport(HeatPumpExport):
|
||||||
return energy_system.air_source_hp.cooling_capacity_coff
|
return energy_system.air_source_hp.cooling_capacity_coff
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def execute_insel(self, user_input, hp_model, data_type):
|
def execute_insel(self, user_input, hp_model, data_type) -> Union[Dict, None]:
|
||||||
"""
|
"""
|
||||||
Runs insel and produces output files
|
Runs insel and produces output files
|
||||||
Runs insel and write the necessary files
|
Runs insel and write the necessary files
|
||||||
|
@ -56,7 +55,6 @@ class AirSourceHPExport(HeatPumpExport):
|
||||||
:param data_type: a string that indicates whether
|
:param data_type: a string that indicates whether
|
||||||
insel should run for heat or cooling performance
|
insel should run for heat or cooling performance
|
||||||
:return:
|
:return:
|
||||||
:return:
|
|
||||||
"""
|
"""
|
||||||
capacity_coeff = self._extract_model_coff(hp_model, data_type)
|
capacity_coeff = self._extract_model_coff(hp_model, data_type)
|
||||||
super(AirSourceHPExport, self)._run_insel(user_input, capacity_coeff, 'air_source.insel')
|
return super(AirSourceHPExport, self)._run_insel(user_input, capacity_coeff, 'air_source.insel')
|
||||||
|
|
|
@ -5,7 +5,7 @@ Copyright © 2022 Concordia CERC group
|
||||||
Project Coder Peter Yefi peteryefi@gmail.com
|
Project Coder Peter Yefi peteryefi@gmail.com
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
from typing import List, Tuple, Union, Dict
|
from typing import List, Union, Dict
|
||||||
import yaml
|
import yaml
|
||||||
from string import Template
|
from string import Template
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
@ -28,7 +28,7 @@ class HeatPumpExport:
|
||||||
self._base_path = base_path
|
self._base_path = base_path
|
||||||
self._output_path = output_path
|
self._output_path = output_path
|
||||||
|
|
||||||
def _run_insel(self, user_input: Dict, capacity_coeff: List, filename: str) -> None:
|
def _run_insel(self, user_input: Dict, capacity_coeff: List, filename: str) -> Union[Dict, None]:
|
||||||
"""
|
"""
|
||||||
Runs insel and write the necessary files
|
Runs insel and write the necessary files
|
||||||
:param user_input: a dictionary containing the user
|
:param user_input: a dictionary containing the user
|
||||||
|
@ -60,7 +60,7 @@ class HeatPumpExport:
|
||||||
# Writer headers to csv output files generated by insel
|
# Writer headers to csv output files generated by insel
|
||||||
self._write_insel_output_headers()
|
self._write_insel_output_headers()
|
||||||
# User output
|
# User output
|
||||||
self._get_user_out_put()
|
return self._get_user_out_put()
|
||||||
except IOError as err:
|
except IOError as err:
|
||||||
print("I/O exception: {}".format(err))
|
print("I/O exception: {}".format(err))
|
||||||
finally:
|
finally:
|
||||||
|
@ -224,15 +224,30 @@ class HeatPumpExport:
|
||||||
self._input_data["a10"] = a_coeff[9]
|
self._input_data["a10"] = a_coeff[9]
|
||||||
self._input_data["a11"] = a_coeff[10]
|
self._input_data["a11"] = a_coeff[10]
|
||||||
|
|
||||||
def _get_user_out_put(self):
|
def _get_user_out_put(self) -> Union[Dict, None]:
|
||||||
"""
|
"""
|
||||||
Extracts monthly electricity demand and fossil fuel consumption
|
Extracts monthly electricity demand and fossil fuel consumption
|
||||||
from output files generated by insel
|
from output files generated by insel
|
||||||
:return:
|
:return: Dict for json output
|
||||||
"""
|
"""
|
||||||
|
demand_data = 'fileOut8'
|
||||||
|
fossil_data = 'fileOut4'
|
||||||
|
fossil_index = 2
|
||||||
|
demand_index = 2
|
||||||
|
|
||||||
electricity_df = pd.read_csv(self._input_data['fileOut8'].strip("'")).iloc[:, 2]
|
if self._output_path is None:
|
||||||
fossil_df = pd.read_csv(self._input_data['fileOut4'].strip("'")).iloc[:, 2]
|
demand_data = 'fileOut10'
|
||||||
|
fossil_data = 'fileOut9'
|
||||||
|
demand_index = 5
|
||||||
|
|
||||||
|
electricity_df = pd.read_csv(self._input_data[demand_data].strip("'")).iloc[:, demand_index]
|
||||||
|
fossil_df = pd.read_csv(self._input_data[fossil_data].strip("'")).iloc[:, fossil_index]
|
||||||
|
|
||||||
|
if self._output_path is None:
|
||||||
|
return {
|
||||||
|
'hourly_electricity_demand': electricity_df.values.tolist(),
|
||||||
|
'daily_fossil_consumption': fossil_df.values.tolist()
|
||||||
|
}
|
||||||
|
|
||||||
data = [electricity_df, fossil_df]
|
data = [electricity_df, fossil_df]
|
||||||
df = pd.concat(data, axis=1)
|
df = pd.concat(data, axis=1)
|
||||||
|
@ -240,3 +255,5 @@ class HeatPumpExport:
|
||||||
s = pd.Series(["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec", "Total"])
|
s = pd.Series(["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec", "Total"])
|
||||||
df = df.set_index([s])
|
df = df.set_index([s])
|
||||||
df.to_csv(self._output_path)
|
df.to_csv(self._output_path)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ Copyright © 2022 Concordia CERC group
|
||||||
Project Coder Peter Yefi peteryefi@gmail.com
|
Project Coder Peter Yefi peteryefi@gmail.com
|
||||||
"""
|
"""
|
||||||
from exports.energy_systems.heat_pump_export import HeatPumpExport
|
from exports.energy_systems.heat_pump_export import HeatPumpExport
|
||||||
from typing import List, Tuple, Union
|
from typing import List, Dict, Union
|
||||||
|
|
||||||
|
|
||||||
class WaterToWaterHPExport(HeatPumpExport):
|
class WaterToWaterHPExport(HeatPumpExport):
|
||||||
|
@ -41,7 +41,7 @@ class WaterToWaterHPExport(HeatPumpExport):
|
||||||
return energy_system.water_to_water_hp.power_demand_coff
|
return energy_system.water_to_water_hp.power_demand_coff
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def execute_insel(self, user_input, hp_model):
|
def execute_insel(self, user_input, hp_model) -> Union[Dict, None]:
|
||||||
"""
|
"""
|
||||||
Runs insel and produces output files
|
Runs insel and produces output files
|
||||||
Runs insel and write the necessary files
|
Runs insel and write the necessary files
|
||||||
|
@ -52,4 +52,4 @@ class WaterToWaterHPExport(HeatPumpExport):
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
pow_demand_coeff = self._extract_model_coff(hp_model)
|
pow_demand_coeff = self._extract_model_coff(hp_model)
|
||||||
super(WaterToWaterHPExport, self)._run_insel(user_input, pow_demand_coeff, 'w2w.insel')
|
return super(WaterToWaterHPExport, self)._run_insel(user_input, pow_demand_coeff, 'w2w.insel')
|
||||||
|
|
|
@ -48,10 +48,10 @@ class EnergySystemsExportFactory:
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
if source == 'air':
|
if source == 'air':
|
||||||
AirSourceHPExport(self._base_path, self._city, self._output_path, self._sim_type, self._demand_path)\
|
return AirSourceHPExport(self._base_path, self._city, self._output_path, self._sim_type, self._demand_path)\
|
||||||
.execute_insel(self._user_input, self._hp_model, self._data_type)
|
.execute_insel(self._user_input, self._hp_model, self._data_type)
|
||||||
elif source == 'water':
|
elif source == 'water':
|
||||||
WaterToWaterHPExport(self._base_path, self._city, self._output_path, self._sim_type, self._demand_path)\
|
return WaterToWaterHPExport(self._base_path, self._city, self._output_path, self._sim_type, self._demand_path)\
|
||||||
.execute_insel(self._user_input, self._hp_model)
|
.execute_insel(self._user_input, self._hp_model)
|
||||||
|
|
||||||
def export(self, source='air'):
|
def export(self, source='air'):
|
||||||
|
|
|
@ -57,11 +57,11 @@ class TestEnergySystemsFactory(TestCase):
|
||||||
self.assertEqual(df.iloc[0, 1], 1867715.88)
|
self.assertEqual(df.iloc[0, 1], 1867715.88)
|
||||||
|
|
||||||
def test_air_source_parallel_heat_pump_export(self):
|
def test_air_source_parallel_heat_pump_export(self):
|
||||||
EnergySystemsExportFactory(city=self._city, user_input=user_input, hp_model='018',
|
output = EnergySystemsExportFactory(city=self._city, user_input=user_input, hp_model='018',
|
||||||
output_path=self._output_path, sim_type=1).export()
|
output_path=None, sim_type=1).export()
|
||||||
df = pd.read_csv(self._output_path)
|
self.assertEqual(output["hourly_electricity_demand"][0], 38748.5625)
|
||||||
self.assertEqual(df.shape, (13, 3))
|
self.assertIsNotNone(output["daily_fossil_consumption"])
|
||||||
self.assertEqual(df.iloc[0, 1], 22155602.0)
|
self.assertEqual(len(output["hourly_electricity_demand"]), 8760)
|
||||||
|
|
||||||
def tearDown(self) -> None:
|
def tearDown(self) -> None:
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user