From fde6f0f7513e5ea87c60a32e03ecdd517d429248 Mon Sep 17 00:00:00 2001 From: Saeed Ranjbar Date: Thu, 10 Aug 2023 20:55:35 -0400 Subject: [PATCH] Few modifications were mafe to heat_generation_system.py and electricity_generation_system.py classes. A new class named energy_storage_system.py is created to represent different possible energy storage systems in energy systems. --- .../electricity_generation_system.py | 66 ++++-- .../energy_systems/energy_storage_system.py | 217 ++++++++++++++++++ .../energy_systems/heat_generation_system.py | 26 +-- 3 files changed, 272 insertions(+), 37 deletions(-) create mode 100644 hub/catalog_factories/data_models/energy_systems/energy_storage_system.py diff --git a/hub/catalog_factories/data_models/energy_systems/electricity_generation_system.py b/hub/catalog_factories/data_models/energy_systems/electricity_generation_system.py index 762615a3..bc1bdb81 100644 --- a/hub/catalog_factories/data_models/energy_systems/electricity_generation_system.py +++ b/hub/catalog_factories/data_models/energy_systems/electricity_generation_system.py @@ -12,16 +12,17 @@ from typing import Union class ElectricityGenerationSystem: """ - Heat Generation system class + Electricity Generation system class """ - def __init__(self, model_name, manufacturer, system_type, nominal_power_output, nominal_efficiency, + def __init__(self, model_name, manufacturer, system_type, energy_source, nominal_power_output, nominal_efficiency, nominal_ambient_temperature, nominal_cell_temperature, nominal_radiation, standard_test_condition_cell_temperature, standard_test_condition_maximum_power, width, height, - control_strategy): + cogeneration_ratio, control_strategy): self._model_name = model_name self._name = manufacturer self._type = system_type + self._energy_source = energy_source self._nominal_power_output = nominal_power_output self._nominal_efficiency = nominal_efficiency self._nominal_ambient_temperature = nominal_ambient_temperature @@ -32,31 +33,39 @@ class ElectricityGenerationSystem: self._width = width self._height = height self._control_strategy = control_strategy + self._cogeneration_ratio = cogeneration_ratio @property - def id(self): + def model_name(self): """ - Get system id + Get system model :return: float """ return self._model_name @property - def name(self): + def manufacturer(self): """ - Get name + Get name of manufacturer :return: string """ return self._name @property - def type(self): + def system_type(self): """ Get type :return: string """ return self._type + @property + def energy_source(self): + """ + Get the energy source of the electricity generation system from [sun, wind, natural gas, biogas, diesel, biomass] + :return: string + """ + @property def nominal_power_output(self): """ @@ -129,6 +138,13 @@ class ElectricityGenerationSystem: """ return self._height + @property + def cogeneration_ratio(self): + """ + Get the ratio between the heat output and electricity output of CHP units + :return: float + """ + @property def control_strategy(self): """" @@ -139,21 +155,23 @@ class ElectricityGenerationSystem: def to_dictionary(self): """Class content to dictionary""" - content = {'Generation component': {'id': self.id, - 'name': self.name, - 'type': self.type, - 'nominal power output [kW]': self.nominal_power_output, - 'nominal efficiency': self.nominal_efficiency, - 'nominal ambient temperature [Celsius]': self.nominal_ambient_temperature, - 'nominal cell temperature [Celsius]': self.nominal_cell_temperature, - 'nominal radiation [W/m2]': self.nominal_radiation, - 'standard test condition cell temperature [Celsius]': - self.standard_test_condition_cell_temperature, - 'standard test condition maximum power [kW]': - self.standard_test_condition_maximum_power, - 'width': self.width, - 'height': self.height, - 'control strategy': self.control_strategy - } + content = {'Electricity Generation component': {'id': self.model_name, + 'name': self.manufacturer, + 'type': self.system_type, + 'energy source': self.energy_source, + 'nominal power output [kW]': self.nominal_power_output, + 'nominal efficiency': self.nominal_efficiency, + 'nominal ambient temperature [Celsius]': self.nominal_ambient_temperature, + 'nominal cell temperature [Celsius]': self.nominal_cell_temperature, + 'nominal radiation [W/m2]': self.nominal_radiation, + 'standard test condition cell temperature [Celsius]': + self.standard_test_condition_cell_temperature, + 'standard test condition maximum power [kW]': + self.standard_test_condition_maximum_power, + 'width': self.width, + 'height': self.height, + 'cogeneration ratio': self.cogeneration_ratio, + 'control strategy': self.control_strategy + } } return content diff --git a/hub/catalog_factories/data_models/energy_systems/energy_storage_system.py b/hub/catalog_factories/data_models/energy_systems/energy_storage_system.py new file mode 100644 index 00000000..e76c0b65 --- /dev/null +++ b/hub/catalog_factories/data_models/energy_systems/energy_storage_system.py @@ -0,0 +1,217 @@ +""" +Energy System catalog heat generation system +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2023 Concordia CERC group +Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +Code contributors: Saeed Ranjbar saeed.ranjbar@concordia.ca +""" + +from __future__ import annotations +from typing import Union + + +class EnergyStorageSystem: + """" + Energy Storage System Class + """ + + def __init__(self, model_name, manufacturer, storage_type, storage_subtype, physical_volume, rated_output_power, + nominal_efficiency, battery_voltage, depth_of_discharge, self_discharge_rate, diameter, height, + storage_material, storage_thickness, material_conductivity, insulation_material, insulation_thickness, + insulation_conductivity, maximum_operating_temperature): + self._model_name = model_name + self._manufacturer = manufacturer + self._storage_type = storage_type + self._storage_subtype = storage_subtype + self._physical_volume = physical_volume + self._rated_output_power = rated_output_power + self._nominal_efficiency = nominal_efficiency + self._battery_voltage = battery_voltage + self._depth_of_discharge = depth_of_discharge + self._self_discharge_rate = self_discharge_rate + self._diameter = diameter + self._height = height + self._storage_material = storage_material + self._storage_thickness = storage_thickness + self._material_conductivity = material_conductivity + self._insulation_material = insulation_material + self._insulation_thickness = insulation_thickness + self._insulation_conductivity = insulation_conductivity + self._maximum_operating_temperature = maximum_operating_temperature + + @property + def model_name(self): + """ + Get system model + :return: float + """ + return self._model_name + + @property + def manufacturer(self): + """ + Get name of manufacturer + :return: string + """ + return self._manufacturer + + @property + def storage_type(self): + """ + Get storage type from [electrical, electrochemical, mechanical, thermal], chemical] + :return: string + """ + return self._storage_type + + @property + def storage_subtype(self): + """ + Get storage subtype from [lithium ion, lead acid, niMH, caes, flywheel, sensible heat storage, latent heat storage] + :return: string + """ + return self._storage_subtype + + @property + def physical_volume(self): + """ + Get the physical volume of the storage system in cubic meters + :return: float + """ + return self._physical_volume + + @property + def rated_output_power(self): + """ + Get the rated output power of storage system in kW + :return: float + """ + return self._rated_output_power + + @property + def nominal_efficiency(self): + """ + Get the nominal efficiency of the storage system + :return: float + """ + return self._nominal_efficiency + + @property + def battery_voltage(self): + """ + Get the battery voltage in Volt + :return: float + """ + return self._battery_voltage + + @property + def depth_of_discharge(self): + """ + Get the depth of discharge as a percentage + :return: float + """ + return self._depth_of_discharge + + @property + def self_discharge_rate(self): + """ + Get the self discharge rate of battery as a percentage + :return: float + """ + return self._self_discharge_rate + + @property + def diameter(self): + """ + Get the diameter of the storage system in meters + :return: float + """ + return self._diameter + + @property + def height(self): + """ + Get the height of the storage system in meters + :return: float + """ + return self._height + + @property + def storage_material(self): + """ + Get the name of the storage system material + :return: string + """ + return self._storage_material + + @property + def storage_thickness(self): + """ + Get the thickness of the storage system in meters + :return: float + """ + return self._storage_thickness + + @property + def material_conductivity(self): + """ + Get the thermal conductivity of the storage system material in W/(m.K) + :return: float + """ + return self._material_conductivity + + @property + def insulation_material(self): + """ + Get the name of the material used as insulation + :return: string + """ + return self._insulation_material + + @property + def insulation_thickness(self): + """ + Get the thickness of the insulation used for the storage system in meters + :return: float + """ + return self._storage_thickness + + @property + def insulation_conductivity(self): + """ + Get the thickness of the insulation used for the storage system in W/(m.K) + :return: float + """ + return self._insulation_conductivity + + @property + def maximum_operating_temperature(self): + """ + Get maximum operating temperature of the storage system in degree Celsius + :return: float + """ + return self._maximum_operating_temperature + + def to_dictionary(self): + """Class content to dictionary""" + content = {'Storage component': {'model name': self.model_name, + 'manufacturer': self.manufacturer, + 'storage type': self.storage_type, + 'storage subtype': self.storage_subtype, + 'physical volume [m3]': self.physical_volume, + 'rated power [kW]': self.rated_output_power, + 'nominal efficiency': self.nominal_efficiency, + 'battery voltage [V]': self.battery_voltage, + 'depth of discharge': self.depth_of_discharge, + 'self discharge rate': self.self_discharge_rate, + 'diameter [m]': self.diameter, + 'height [m]': self.height, + 'storage material': self.storage_material, + 'storage thickness [m]': self.storage_thickness, + 'storage material thermal conductivity [W/m.K]': self.material_conductivity, + 'insulation material': self.insulation_material, + 'insulation thickness[m]': self.insulation_thickness, + 'insulation thermal conductivity [W/m.K]': self.insulation_conductivity, + 'maximum operating temperature [Celsius]': self.maximum_operating_temperature + } + } + return content \ No newline at end of file diff --git a/hub/catalog_factories/data_models/energy_systems/heat_generation_system.py b/hub/catalog_factories/data_models/energy_systems/heat_generation_system.py index 002d12a9..4b290d15 100644 --- a/hub/catalog_factories/data_models/energy_systems/heat_generation_system.py +++ b/hub/catalog_factories/data_models/energy_systems/heat_generation_system.py @@ -129,18 +129,18 @@ class HeatGenerationSystem: def to_dictionary(self): """Class content to dictionary""" - content = {'Generation component': {'model name': self.model_name, - 'manufacturer': self.manufacturer, - 'type': self.system_type, - 'fuel type': self.fuel_type, - 'nominal thermal output': self.nominal_thermal_output, - 'modulation_range': self.modulation_range, - 'source types': self.source_types, - 'source temperature [Celsius]': self.source_temperature, - 'source mass flow [kg/s]': self.source_mass_flow, - 'heat efficiency': self.heat_efficiency, - 'cooling efficiency': self.cooling_efficiency, - 'electricity efficiency': self.electricity_efficiency, - } + content = {'Heat Generation component': {'model name': self.model_name, + 'manufacturer': self.manufacturer, + 'type': self.system_type, + 'fuel type': self.fuel_type, + 'nominal thermal output': self.nominal_thermal_output, + 'modulation_range': self.modulation_range, + 'source types': self.source_types, + 'source temperature [Celsius]': self.source_temperature, + 'source mass flow [kg/s]': self.source_mass_flow, + 'heat efficiency': self.heat_efficiency, + 'cooling efficiency': self.cooling_efficiency, + 'electricity efficiency': self.electricity_efficiency, + } } return content