From 24a670755ad44532f69797233322c642a35dd0f9 Mon Sep 17 00:00:00 2001 From: Saeed Ranjbar Date: Mon, 28 Aug 2023 18:37:55 -0400 Subject: [PATCH] performance_curves.py is fixed material_name is replaced with material_id in north_america_energy_system_catalog.py The unused variables are fixed. The code is modified to accommodate the reorganization Pilar did in generation_systems The system.py is modified to be able to accommodate more than one distribution or emission system --- .../energy_systems/performance_curves.py | 13 ++-- .../data_models/energy_systems/system.py | 24 +++--- .../north_america_energy_system_catalog.py | 78 ++++++++++--------- .../energy_systems/north_america_systems.xml | 71 +++++++++++------ 4 files changed, 107 insertions(+), 79 deletions(-) diff --git a/hub/catalog_factories/data_models/energy_systems/performance_curves.py b/hub/catalog_factories/data_models/energy_systems/performance_curves.py index b713fd44..65cc0878 100644 --- a/hub/catalog_factories/data_models/energy_systems/performance_curves.py +++ b/hub/catalog_factories/data_models/energy_systems/performance_curves.py @@ -14,8 +14,9 @@ class PerformanceCurves: Parameter function class """ - def __init__(self, curve_type, parameters, coefficients): + def __init__(self, curve_type, dependant_variable, parameters, coefficients): self._curve_type = curve_type + self._dependant_variable = dependant_variable self._parameters = parameters self._coefficients = coefficients @@ -35,11 +36,12 @@ class PerformanceCurves: return self._curve_type @property - def function(self): + def dependant_variable(self): """ - y (e.g. COP in COP = a*source temperature**2... ) + y (e.g. COP in COP = a*source temperature**2 + b*source temperature + c*source temperature*supply temperature + + d*supply temperature + e*supply temperature**2 + f) """ - return self._function + return self._dependant_variable @property def parameters(self): @@ -62,7 +64,8 @@ class PerformanceCurves: """Class content to dictionary""" content = {'Parameter Function': { 'curve type': self.curve_type, - 'parameters': self.parameters, + 'dependant variable': self.dependant_variable, + 'parameter(s)': self.parameters, 'coefficients': self.coefficients, } } diff --git a/hub/catalog_factories/data_models/energy_systems/system.py b/hub/catalog_factories/data_models/energy_systems/system.py index 0d4667d3..9dd0ab83 100644 --- a/hub/catalog_factories/data_models/energy_systems/system.py +++ b/hub/catalog_factories/data_models/energy_systems/system.py @@ -36,7 +36,7 @@ class System: self._emission_system = emission_system self._generation_systems = generation_systems self._energy_storage_systems = energy_storage_systems - self._configuration = configuration + # self._configuration = configuration @property def lod(self): @@ -79,7 +79,7 @@ class System: return self._generation_systems @property - def distribution_system(self) -> Union[None, DistributionSystem]: + def distribution_system(self) -> Union[None, List[DistributionSystem]]: """ Get distribution system :return: DistributionSystem @@ -87,7 +87,7 @@ class System: return self._distribution_system @property - def emission_system(self) -> Union[None, EmissionSystem]: + def emission_system(self) -> Union[None, List[EmissionSystem]]: """ Get emission system :return: EmissionSystem @@ -107,12 +107,10 @@ class System: _generation_systems = [] for _generation in self.generation_systems: _generation_systems.append(_generation.to_dictionary()) - _distribution_system = None - if self.distribution_system is not None: - _distribution_system = self.distribution_system.to_dictionary() - _emission_system = None - if self.emission_system is not None: - _emission_system = self.emission_system.to_dictionary() + _distribution_system = [_distribution.to_dictionary() for _distribution in + self.distribution_system] if self.distribution_system is not None else None + _emission_system = [_emission.to_dictionary() for _emission in + self.emission_system] if self.emission_system is not None else None _storage_system = [_storage.to_dictionary() for _storage in self.energy_storage_system] if self.energy_storage_system is not None else None @@ -120,10 +118,10 @@ class System: 'name': self.name, 'level of detail': self.lod, 'demand types': self.demand_types, - 'Generation system(s)': _generation_systems, - 'distribution system': _distribution_system, - 'emission system': _emission_system, - 'energy storage system': _storage_system, + 'generation system(s)': _generation_systems, + 'distribution system(s)': _distribution_system, + 'emission system(s)': _emission_system, + 'energy storage system(s)': _storage_system, } } return content diff --git a/hub/catalog_factories/energy_systems/north_america_energy_system_catalog.py b/hub/catalog_factories/energy_systems/north_america_energy_system_catalog.py index 933ddc62..ceaacfdd 100644 --- a/hub/catalog_factories/energy_systems/north_america_energy_system_catalog.py +++ b/hub/catalog_factories/energy_systems/north_america_energy_system_catalog.py @@ -55,7 +55,8 @@ class NorthAmericaEnergySystemCatalog(Catalog): system_type = 'boiler' boiler_fuel_type = boiler['@fuel'] boiler_nominal_thermal_output = float(boiler['@installedThermalPower']) - boiler_maximum_heat_output = float(boiler['@modulationRange']) + boiler_maximum_heat_output = float(boiler['@maximumHeatOutput']) + boiler_minimum_heat_output = float(boiler['@minimumHeatOutput']) boiler_heat_efficiency = float(boiler['@nominalEfficiency']) boiler_component = GenerationSystem(boiler_id, @@ -65,8 +66,8 @@ class NorthAmericaEnergySystemCatalog(Catalog): system_type, boiler_fuel_type, boiler_nominal_thermal_output, - None, - None, + boiler_maximum_heat_output, + boiler_minimum_heat_output, None, None, boiler_heat_efficiency, @@ -99,18 +100,20 @@ class NorthAmericaEnergySystemCatalog(Catalog): system_type = 'heat pump' heat_pump_fuel_type = heat_pump['@fuel'] heat_pump_nominal_thermal_output = float(heat_pump['@installedThermalPower']) - heat_pump_modulation_range = float(heat_pump['@modulationRange']) - heat_pump_source_type = heat_pump['@heatSource'] + heat_pump_maximum_heat_output = float(heat_pump['@maximumHeatOutput']) + heat_pump_minimum_heat_output = float(heat_pump['@minimumHeatOutput']) + heat_pump_source_medium = heat_pump['@heatSource'] heat_pump_supply_medium = heat_pump['@supply_medium'] heat_pump_nominal_cop = float(heat_pump['@nominalCOP']) - heat_pump_maximum_heating_temperature = float(heat_pump['@maxHeatingSupTemperature']) - heat_pump_minimum_heating_temperature = float(heat_pump['@minHeatingSupTemperature']) - heat_pump_maximum_cooling_temperature = float(heat_pump['@maxCoolingSupTemperature']) - heat_pump_minimum_cooling_temperature = float(heat_pump['@minCoolingSupTemperature']) + heat_pump_maximum_heat_supply_temperature = float(heat_pump['@maxHeatingSupTemperature']) + heat_pump_minimum_heat_supply_temperature = float(heat_pump['@minHeatingSupTemperature']) + heat_pump_maximum_cooling_supply_temperature = float(heat_pump['@maxCoolingSupTemperature']) + heat_pump_minimum_cooling_supply_temperature = float(heat_pump['@minCoolingSupTemperature']) cop_curve_type = heat_pump['performance_curve']['@curve_type'] + dependant_variable = heat_pump['performance_curve']['dependant_variable'] parameters = heat_pump['performance_curve']['parameters'] coefficients = list(heat_pump['performance_curve']['coefficients'].values()) - cop_curve = PerformanceCurves(cop_curve_type, parameters, coefficients) + cop_curve = PerformanceCurves(cop_curve_type, dependant_variable, parameters, coefficients) heat_pump_component = GenerationSystem(heat_pump_id, heat_pump_name, @@ -119,9 +122,9 @@ class NorthAmericaEnergySystemCatalog(Catalog): system_type, heat_pump_fuel_type, heat_pump_nominal_thermal_output, - None, - None, - heat_pump_source_type, + heat_pump_maximum_heat_output, + heat_pump_minimum_heat_output, + heat_pump_source_medium, heat_pump_supply_medium, heat_pump_nominal_cop, None, @@ -132,10 +135,10 @@ class NorthAmericaEnergySystemCatalog(Catalog): None, None, None, - heat_pump_maximum_heating_temperature, - heat_pump_minimum_heating_temperature, - heat_pump_maximum_cooling_temperature, - heat_pump_minimum_cooling_temperature, + heat_pump_minimum_heat_supply_temperature, + heat_pump_minimum_heat_supply_temperature, + heat_pump_maximum_cooling_supply_temperature, + heat_pump_minimum_cooling_supply_temperature, None, None, cop_curve, @@ -288,18 +291,18 @@ class NorthAmericaEnergySystemCatalog(Catalog): name = tes['@name'] model_name = tes['@modelName'] manufacturer = tes['@manufacturer'] - volume = tes['@volume'] - height = tes['@height'] + volume = tes['physical_characteristics']['@volume'] + height = tes['physical_characteristics']['@height'] maximum_operating_temperature = tes['@maxTemp'] materials = self._load_materials() - insulation_material_name = tes['@insulationMaterial'] - insulation_material = self._search_material(materials, insulation_material_name) - material_name = tes['@tankMaterial'] - tank_material = self._search_material(materials, material_name) - thickness = float(tes['@insulationThickness']) / 100 # from cm to m + insulation_material_id = tes['insulation']['@material_id'] + insulation_material = self._search_material(materials, insulation_material_id) + material_id = tes['physical_characteristics']['@material_id'] + tank_material = self._search_material(materials, material_id) + thickness = float(tes['insulation']['@insulationThickness']) / 100 # from cm to m insulation_layer = Layer(None, 'insulation', insulation_material, thickness) - thickness = float(tes['@tankThickness']) / 100 # from cm to m - tank_layer = Layer(None, 'insulation', tank_material, thickness) + thickness = float(tes['physical_characteristics']['@tankThickness']) / 100 # from cm to m + tank_layer = Layer(None, 'tank', tank_material, thickness) # the convention is from outside to inside layers = [insulation_layer, tank_layer] storage_component = EnergyStorageSystem(storage_id, @@ -323,14 +326,14 @@ class NorthAmericaEnergySystemCatalog(Catalog): name = template['@name'] maximum_temperature = template['@maxTemp'] materials = self._load_materials() - insulation_material_name = template['@insulationMaterial'] - insulation_material = self._search_material(materials, insulation_material_name) - material_name = template['@tankMaterial'] - tank_material = self._search_material(materials, material_name) - thickness = float(template['@insulationThickness']) / 100 # from cm to m + insulation_material_id = tes['insulation']['@material_id'] + insulation_material = self._search_material(materials, insulation_material_id) + material_id = tes['physical_characteristics']['@material_id'] + tank_material = self._search_material(materials, material_id) + thickness = float(tes['insulation']['@insulationThickness']) / 100 # from cm to m insulation_layer = Layer(None, 'insulation', insulation_material, thickness) - thickness = float(template['@tankThickness']) / 100 # from cm to m - tank_layer = Layer(None, 'insulation', tank_material, thickness) + thickness = float(tes['physical_characteristics']['@tankThickness']) / 100 # from cm to m + tank_layer = Layer(None, 'tank', tank_material, thickness) # the convention is from outside to inside layers = [insulation_layer, tank_layer] storage_component = EnergyStorageSystem(storage_id, @@ -393,9 +396,10 @@ class NorthAmericaEnergySystemCatalog(Catalog): materials = [] _materials = self._archetypes['EnergySystemCatalog']['materials']['material'] for _material in _materials: + material_id = _material['@material_id'] name = _material['@name'] thermal_conductivity = _material['@thermalConductivity'] - material = Material(None, + material = Material(material_id, name, None, None, @@ -409,15 +413,15 @@ class NorthAmericaEnergySystemCatalog(Catalog): return materials @staticmethod - def _search_material(materials, material_name): + def _search_material(materials, material_id): _material = None for material in materials: - if material.name == material_name: + if int(material.id) == int(material_id): _material = material return _material if _material is None: - raise ValueError(f'Material not found in catalog [{material_name}]') + raise ValueError(f'Material with the id = [{material_id}] not found in catalog ') @staticmethod def _search_generation_equipment(generation_systems, generation_id): diff --git a/hub/data/energy_systems/north_america_systems.xml b/hub/data/energy_systems/north_america_systems.xml index 6fe12090..285f9de7 100644 --- a/hub/data/energy_systems/north_america_systems.xml +++ b/hub/data/energy_systems/north_america_systems.xml @@ -5,37 +5,37 @@ - - - - - - - - - - - + + + + + + + + + + + - + - COP + COP source_temperature supply_temperature - + - COP + COP source_temperature supply_temperature - + - COP + COP source_temperature supply_temperature @@ -55,13 +55,36 @@ - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +