forked from s_ranjbar/city_retrofit
Modified coefficient computation for water to water hp
This commit is contained in:
parent
a8e44d5e30
commit
73593744b7
@ -20,7 +20,6 @@ class WaterToWaterHP(HeatPump):
|
|||||||
self._total_cooling_capacity = None
|
self._total_cooling_capacity = None
|
||||||
self._power_demand = None
|
self._power_demand = None
|
||||||
self._flow_rate = None
|
self._flow_rate = None
|
||||||
self._heat_output_coff = None # b coefficients
|
|
||||||
self._power_demand_coff = None # a coefficients
|
self._power_demand_coff = None # a coefficients
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -112,24 +111,6 @@ class WaterToWaterHP(HeatPump):
|
|||||||
if self._flow_rate is None:
|
if self._flow_rate is None:
|
||||||
self._flow_rate = value
|
self._flow_rate = value
|
||||||
|
|
||||||
@property
|
|
||||||
def heat_output_coff(self) -> List[float]:
|
|
||||||
"""
|
|
||||||
Get coefficients for total cooling capacity
|
|
||||||
:return: [[float]]
|
|
||||||
"""
|
|
||||||
return self._heat_output_coff
|
|
||||||
|
|
||||||
@heat_output_coff.setter
|
|
||||||
def heat_output_coff(self, value):
|
|
||||||
"""
|
|
||||||
Set coefficients for totol cooling capacity
|
|
||||||
:param value: [[float]]
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
if self._heat_output_coff is None:
|
|
||||||
self._heat_output_coff = value
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def power_demand_coff(self) -> List[float]:
|
def power_demand_coff(self) -> List[float]:
|
||||||
"""
|
"""
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -71,17 +71,6 @@ class HeatPumpExport:
|
|||||||
Write headers to the various csv file generated by insel
|
Write headers to the various csv file generated by insel
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
file_one_headers = ['Year', ' Month', ' Day', 'Hour', 'Minute', 'HP Heat Output (kW)',
|
|
||||||
'HP Electricity Consumption (kW)', 'HP COP', 'TES Charging Rate (kg/s)',
|
|
||||||
'TES Discharging Rate (kg/s)', 'TES Node 1 Temperature', 'TES Node 2 Temperature',
|
|
||||||
'TES Node 3 Temperature', 'TES Node 4 Temperature', 'TES Energy Content (J)',
|
|
||||||
'TES Energy Content (kWh)', 'TES Energy Content Variation (kWh)',
|
|
||||||
'Auxiliary Heater Fuel Flow Rate (kg/s)', 'Auxiliary Heater Energy Input (kW)',
|
|
||||||
'HP Operational Cost (CAD)', 'Auxiliary Heater Operational Cost (CAD)',
|
|
||||||
'Operational CO2 Emissions of HP (g)',
|
|
||||||
'Operational CO2 Emissions of Auxiliary Heater (g)',
|
|
||||||
'Return Temperature', 'Demand (kW)', 'Test Column']
|
|
||||||
|
|
||||||
header_data = {
|
header_data = {
|
||||||
self._input_data['fileOut1']: ['Year', ' Month', ' Day', 'Hour', 'Minute', 'HP Heat Output (kW)',
|
self._input_data['fileOut1']: ['Year', ' Month', ' Day', 'Hour', 'Minute', 'HP Heat Output (kW)',
|
||||||
'HP Electricity Consumption (kW)', 'HP COP', 'TES Charging Rate (kg/s)',
|
'HP Electricity Consumption (kW)', 'HP COP', 'TES Charging Rate (kg/s)',
|
||||||
@ -200,6 +189,7 @@ class HeatPumpExport:
|
|||||||
and water to water source heat pump
|
and water to water source heat pump
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self._input_data["a1"] = a_coeff[0]
|
self._input_data["a1"] = a_coeff[0]
|
||||||
self._input_data["a2"] = a_coeff[1]
|
self._input_data["a2"] = a_coeff[1]
|
||||||
self._input_data["a3"] = a_coeff[2]
|
self._input_data["a3"] = a_coeff[2]
|
||||||
|
@ -26,22 +26,19 @@ class WaterToWaterHPExport(HeatPumpExport):
|
|||||||
water_temp = (base_path / 'heat_pumps/wt_hourly3.txt')
|
water_temp = (base_path / 'heat_pumps/wt_hourly3.txt')
|
||||||
super().__init__(base_path, city, output_path, template_path, water_temp)
|
super().__init__(base_path, city, output_path, template_path, water_temp)
|
||||||
|
|
||||||
def _extract_model_coff(self, hp_model: str, data_type='heat') -> Union[Tuple[List, List], None]:
|
def _extract_model_coff(self, hp_model: str) -> Union[List, None]:
|
||||||
"""
|
"""
|
||||||
Extracts heat pump coefficient data for a specific
|
Extracts heat pump coefficient data for a specific
|
||||||
model. e.g 012, 140
|
model. e.g ClimateMaster 156 kW, etc
|
||||||
:param hp_model: the model type
|
:param hp_model: the model type
|
||||||
:param data_type: indicates whether we're extracting cooling
|
|
||||||
or heating perfarmcn coefficients
|
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
for energy_system in self._city.energy_systems:
|
for energy_system in self._city.energy_systems:
|
||||||
if energy_system.water_to_water_hp.model == hp_model:
|
if energy_system.water_to_water_hp.model == hp_model:
|
||||||
return energy_system.water_to_water_hp.power_demand_coff, \
|
return energy_system.water_to_water_hp.power_demand_coff
|
||||||
energy_system.water_to_water_hp.heat_output_coff
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def execute_insel(self, user_input, hp_model, data_type):
|
def execute_insel(self, user_input, hp_model):
|
||||||
"""
|
"""
|
||||||
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
|
||||||
@ -49,10 +46,7 @@ class WaterToWaterHPExport(HeatPumpExport):
|
|||||||
values necessary to run insel
|
values necessary to run insel
|
||||||
:param hp_model: a string that indicates the heat
|
:param hp_model: a string that indicates the heat
|
||||||
pump model to be used e.g. 012, 015
|
pump model to be used e.g. 012, 015
|
||||||
:param data_type: a string that indicates whether
|
|
||||||
insel should run for heat or cooling performance
|
|
||||||
:return:
|
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
pow_demand_coeff, heat_output_coeff = self._extract_model_coff(hp_model, data_type)
|
pow_demand_coeff = self._extract_model_coff(hp_model)
|
||||||
super(WaterToWaterHPExport, self)._run_insel(user_input, pow_demand_coeff, heat_output_coeff, 'w2w.insel')
|
super(WaterToWaterHPExport, self)._run_insel(user_input, pow_demand_coeff, 'w2w.insel')
|
||||||
|
@ -47,7 +47,7 @@ class EnergySystemsExportFactory:
|
|||||||
.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)\
|
WaterToWaterHPExport(self._base_path, self._city, self._output_path, self._sim_type)\
|
||||||
.execute_insel(self._user_input, self._hp_model, self._data_type)
|
.execute_insel(self._user_input, self._hp_model)
|
||||||
|
|
||||||
def export(self, source='air'):
|
def export(self, source='air'):
|
||||||
"""
|
"""
|
||||||
|
@ -125,24 +125,20 @@ class WaterToWaterHPParameters:
|
|||||||
heat_pump.flow_rate = data['fr']
|
heat_pump.flow_rate = data['fr']
|
||||||
heat_pump.entering_water_temp = data['ewt']
|
heat_pump.entering_water_temp = data['ewt']
|
||||||
heat_pump.leaving_water_temp = data['lwt']
|
heat_pump.leaving_water_temp = data['lwt']
|
||||||
heat_pump.power_demand_coff = self._compute_coefficients(data, data_type='power')
|
heat_pump.power_demand_coff = self._compute_coefficients(data)
|
||||||
heat_pump.heat_output_coff = self._compute_coefficients(data)
|
|
||||||
|
|
||||||
energy_system = EnergySystem(heat_pump.model, 0, [], None)
|
energy_system = EnergySystem(heat_pump.model, 0, [], None)
|
||||||
energy_system.water_to_water_hp = heat_pump
|
energy_system.water_to_water_hp = heat_pump
|
||||||
self._city.add_city_object(energy_system)
|
self._city.add_city_object(energy_system)
|
||||||
return self._city
|
return self._city
|
||||||
|
|
||||||
def _compute_coefficients(self, heat_pump_data: Dict, data_type="heat_output") -> List[float]:
|
def _compute_coefficients(self, heat_pump_data: Dict) -> List[float]:
|
||||||
"""
|
"""
|
||||||
Compute heat output and electrical demand coefficients
|
Compute heat output and electrical demand coefficients
|
||||||
from heating performance data
|
from heating performance data
|
||||||
:param heat_pump_data: a dictionary of heat pump data.
|
:param heat_pump_data: a dictionary of heat pump data.
|
||||||
:param data_type: string to indicate whether coefficient are power demands
|
|
||||||
or heat output coefficients. Default is heat output
|
|
||||||
:return: Tuple[Dict, Dict]
|
:return: Tuple[Dict, Dict]
|
||||||
"""
|
"""
|
||||||
demand = heat_pump_data['tc'] if data_type == "heat_output" else heat_pump_data['pd']
|
demand = [i / j for i, j in zip(heat_pump_data['tc'], heat_pump_data['pd'])]
|
||||||
|
|
||||||
# Compute heat output coefficients
|
# Compute heat output coefficients
|
||||||
popt, _ = curve_fit(self._objective_function, [heat_pump_data['ewt'], heat_pump_data['lwt'], heat_pump_data['fr']],
|
popt, _ = curve_fit(self._objective_function, [heat_pump_data['ewt'], heat_pump_data['lwt'], heat_pump_data['fr']],
|
||||||
|
Loading…
Reference in New Issue
Block a user