Changed how coefficients are generated
This commit is contained in:
parent
99a0ac0bce
commit
380c6644a3
Binary file not shown.
|
@ -38,8 +38,8 @@ class AirSourceHPExport(HeatPumpExport):
|
||||||
for energy_system in self._city.energy_systems:
|
for energy_system in self._city.energy_systems:
|
||||||
if energy_system.air_source_hp.model == hp_model:
|
if energy_system.air_source_hp.model == hp_model:
|
||||||
if data_type == 'heat':
|
if data_type == 'heat':
|
||||||
return energy_system.air_source_hp.heating_capacity_coff, energy_system.air_source_hp.heating_comp_power_coff
|
return energy_system.air_source_hp.heating_capacity_coff
|
||||||
return energy_system.air_source_hp.cooling_capacity_coff, energy_system.air_source_hp.cooling_comp_power_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):
|
||||||
|
@ -55,5 +55,5 @@ class AirSourceHPExport(HeatPumpExport):
|
||||||
:return:
|
:return:
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
capacity_coeff, power_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, power_coeff, 'air_source.insel')
|
super(AirSourceHPExport, self)._run_insel(user_input, capacity_coeff, 'air_source.insel')
|
||||||
|
|
|
@ -27,18 +27,17 @@ 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, power_coeff: List, filename: str) -> None:
|
def _run_insel(self, user_input: Dict, capacity_coeff: List, filename: str) -> 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
|
||||||
values necessary to run insel
|
values necessary to run insel
|
||||||
:param capacity_coeff: a list containing capacity coefficients
|
:param capacity_coeff: a list containing capacity coefficients
|
||||||
:param power_coeff: a list containing power demand coefficients
|
|
||||||
:param filename: the name of the insel file to be created
|
:param filename: the name of the insel file to be created
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
self._input_data = user_input
|
self._input_data = user_input
|
||||||
self._update_input_data_with_coff(capacity_coeff, power_coeff)
|
self._update_input_data_with_coff(capacity_coeff)
|
||||||
# update input data with constants
|
# update input data with constants
|
||||||
self._update_input_data_with_constants()
|
self._update_input_data_with_constants()
|
||||||
# update input data with input and output files for insel
|
# update input data with input and output files for insel
|
||||||
|
@ -82,7 +81,7 @@ class HeatPumpExport:
|
||||||
'HP Operational Cost (CAD)', 'Auxiliary Heater Operational Cost (CAD)',
|
'HP Operational Cost (CAD)', 'Auxiliary Heater Operational Cost (CAD)',
|
||||||
'Operational CO2 Emissions of HP (g)',
|
'Operational CO2 Emissions of HP (g)',
|
||||||
'Operational CO2 Emissions of Auxiliary Heater (g)',
|
'Operational CO2 Emissions of Auxiliary Heater (g)',
|
||||||
'Return Temperature', 'Demand (kW)'],
|
'Return Temperature', 'Demand (kW)', 'Test Column'],
|
||||||
self._input_data['fileOut2']: ['Day', 'Operational Daily Emissions from Heat Pumps (g)',
|
self._input_data['fileOut2']: ['Day', 'Operational Daily Emissions from Heat Pumps (g)',
|
||||||
'Operational Daily Emissions from Auxiliary Heater (g)'],
|
'Operational Daily Emissions from Auxiliary Heater (g)'],
|
||||||
self._input_data['fileOut3']: ['Month', 'Monthly Operational Costs of Heat Pumps (CAD)',
|
self._input_data['fileOut3']: ['Month', 'Monthly Operational Costs of Heat Pumps (CAD)',
|
||||||
|
@ -158,9 +157,18 @@ class HeatPumpExport:
|
||||||
for key, value in constants_dict.items():
|
for key, value in constants_dict.items():
|
||||||
self._input_data[key] = value
|
self._input_data[key] = value
|
||||||
# compute water to water HP specific values
|
# compute water to water HP specific values
|
||||||
if self._water_temp is not None:
|
if 55 <= self._input_data['HPSupTemp'] <= 60:
|
||||||
self._input_data["HPDisactivationTemperature"] = self._input_data["HPSupTemp"] - 5
|
self._input_data["HPDisactivationTemperature"] = self._input_data["HPSupTemp"] - 5
|
||||||
self._input_data["HPReactivationTemperature"] = self._input_data["HPSupTemp"] - 18
|
self._input_data["HPReactivationTemperature"] = self._input_data["HPSupTemp"] - 18
|
||||||
|
elif 50 <= self._input_data["HPSupTemp"] < 55:
|
||||||
|
self._input_data["HPDisactivationTemperature"] = self._input_data["HPSupTemp"] - 5
|
||||||
|
self._input_data["HPReactivationTemperature"] = self._input_data["HPSupTemp"] - 13
|
||||||
|
elif 45 <= self._input_data["HPSupTemp"] < 50:
|
||||||
|
self._input_data["HPDisactivationTemperature"] = self._input_data["HPSupTemp"] - 3
|
||||||
|
self._input_data["HPReactivationTemperature"] = self._input_data["HPSupTemp"] - 8
|
||||||
|
elif 35 <= self._input_data["HPSupTemp"] < 40:
|
||||||
|
self._input_data["HPDisactivationTemperature"] = self._input_data["HPSupTemp"] - 2
|
||||||
|
self._input_data["HPReactivationTemperature"] = self._input_data["HPSupTemp"] - 4
|
||||||
|
|
||||||
# compute maximum demand. TODO: This should come from catalog in the future
|
# compute maximum demand. TODO: This should come from catalog in the future
|
||||||
max_demand = self._compute_max_demand()
|
max_demand = self._compute_max_demand()
|
||||||
|
@ -168,12 +176,11 @@ class HeatPumpExport:
|
||||||
self._input_data["TESCapacity"] = self._input_data["HoursOfStorageAtMaxDemand"] * (max_demand * 3.6) / (
|
self._input_data["TESCapacity"] = self._input_data["HoursOfStorageAtMaxDemand"] * (max_demand * 3.6) / (
|
||||||
(self._input_data["Cp"] / 1000) * self._input_data["TemperatureDifference"])
|
(self._input_data["Cp"] / 1000) * self._input_data["TemperatureDifference"])
|
||||||
|
|
||||||
def _update_input_data_with_coff(self, a_coeff: List, b_coeff: List):
|
def _update_input_data_with_coff(self, a_coeff: List):
|
||||||
"""
|
"""
|
||||||
Updates the user data with coefficients derived from imports
|
Updates the user data with coefficients derived from imports
|
||||||
:param a_coeff: insel a coefficient values
|
:param a_coeff: insel a coefficient values
|
||||||
:param b_coeff: insel b coefficient values
|
Meaning of a is in the models for air source heat pump
|
||||||
Meaning of a and b are in the respective models for air source heat pump
|
|
||||||
and water to water source heat pump
|
and water to water source heat pump
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
|
@ -183,12 +190,6 @@ class HeatPumpExport:
|
||||||
self._input_data["a4"] = a_coeff[3]
|
self._input_data["a4"] = a_coeff[3]
|
||||||
self._input_data["a5"] = a_coeff[4]
|
self._input_data["a5"] = a_coeff[4]
|
||||||
self._input_data["a6"] = a_coeff[5]
|
self._input_data["a6"] = a_coeff[5]
|
||||||
self._input_data["b1"] = b_coeff[0]
|
|
||||||
self._input_data["b2"] = b_coeff[1]
|
|
||||||
self._input_data["b3"] = b_coeff[2]
|
|
||||||
self._input_data["b4"] = b_coeff[3]
|
|
||||||
self._input_data["b5"] = b_coeff[4]
|
|
||||||
self._input_data["b6"] = b_coeff[5]
|
|
||||||
|
|
||||||
# additional coefficients for water to water source
|
# additional coefficients for water to water source
|
||||||
if self._water_temp is not None:
|
if self._water_temp is not None:
|
||||||
|
@ -197,11 +198,6 @@ class HeatPumpExport:
|
||||||
self._input_data["a9"] = a_coeff[8]
|
self._input_data["a9"] = a_coeff[8]
|
||||||
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]
|
||||||
self._input_data["b7"] = b_coeff[6]
|
|
||||||
self._input_data["b8"] = b_coeff[7]
|
|
||||||
self._input_data["b9"] = b_coeff[8]
|
|
||||||
self._input_data["b10"] = b_coeff[9]
|
|
||||||
self._input_data["b11"] = b_coeff[10]
|
|
||||||
|
|
||||||
def _get_user_out_put(self):
|
def _get_user_out_put(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -76,12 +76,10 @@ class AirSourceHeatPumpParameters:
|
||||||
c_data = self._extract_heat_pump_data(v_cool)
|
c_data = self._extract_heat_pump_data(v_cool)
|
||||||
heat_pump.cooling_capacity = c_data[0]
|
heat_pump.cooling_capacity = c_data[0]
|
||||||
heat_pump.cooling_comp_power = c_data[1]
|
heat_pump.cooling_comp_power = c_data[1]
|
||||||
heat_pump.cooling_capacity_coff = self._compute_coefficients(c_data[0], "cool")
|
heat_pump.cooling_capacity_coff = self._compute_coefficients(c_data, "cool")
|
||||||
heat_pump.cooling_comp_power_coff = self._compute_coefficients(c_data[1], "cool")
|
|
||||||
heat_pump.heating_capacity = h_data[0]
|
heat_pump.heating_capacity = h_data[0]
|
||||||
heat_pump.heating_comp_power = h_data[1]
|
heat_pump.heating_comp_power = h_data[1]
|
||||||
heat_pump.heating_capacity_coff = self._compute_coefficients(h_data[0])
|
heat_pump.heating_capacity_coff = self._compute_coefficients(h_data)
|
||||||
heat_pump.heating_comp_power_coff = self._compute_coefficients(h_data[1])
|
|
||||||
|
|
||||||
energy_system = EnergySystem('{} capacity heat pump'.format(heat_pump.model), 0, [], None)
|
energy_system = EnergySystem('{} capacity heat pump'.format(heat_pump.model), 0, [], None)
|
||||||
energy_system.air_source_hp = heat_pump
|
energy_system.air_source_hp = heat_pump
|
||||||
|
@ -123,10 +121,13 @@ class AirSourceHeatPumpParameters:
|
||||||
x_values = heat_x_values if data_type == "heat" else cool_x_values
|
x_values = heat_x_values if data_type == "heat" else cool_x_values
|
||||||
x_values = x_values.tolist()
|
x_values = x_values.tolist()
|
||||||
# convert list of lists to one list
|
# convert list of lists to one list
|
||||||
heat_pump_data = list(itertools.chain.from_iterable(heat_pump_data))
|
|
||||||
|
hp_data = [i/j for i, j in
|
||||||
|
zip(list(itertools.chain.from_iterable(heat_pump_data[0])),
|
||||||
|
list(itertools.chain.from_iterable(heat_pump_data[1])))]
|
||||||
|
|
||||||
# Compute heat output coefficients
|
# Compute heat output coefficients
|
||||||
popt, _ = curve_fit(self._objective_function, [x_values, out_temp], heat_pump_data)
|
popt, _ = curve_fit(self._objective_function, [x_values, out_temp], hp_data)
|
||||||
return popt.tolist()
|
return popt.tolist()
|
||||||
|
|
||||||
def _objective_function(self, xdata: List, a1: float, a2: float, a3: float, a4: float, a5: float, a6: float) -> float:
|
def _objective_function(self, xdata: List, a1: float, a2: float, a3: float, a4: float, a5: float, a6: float) -> float:
|
||||||
|
|
|
@ -52,7 +52,7 @@ class TestEnergySystemsFactory(TestCase):
|
||||||
EnergySystemsExportFactory(self._city, user_input, '012', self._output_path).export()
|
EnergySystemsExportFactory(self._city, user_input, '012', self._output_path).export()
|
||||||
df = pd.read_csv(self._output_path)
|
df = pd.read_csv(self._output_path)
|
||||||
self.assertEqual(df.shape, (13, 3))
|
self.assertEqual(df.shape, (13, 3))
|
||||||
self.assertEqual(df.iloc[0, 1], 3045398.0)
|
self.assertEqual(df.iloc[0, 1], 1867715.88)
|
||||||
|
|
||||||
def tearDown(self) -> None:
|
def tearDown(self) -> None:
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user