diff --git a/hub/catalog_factories/data_models/energy_systems/archetype.py b/hub/catalog_factories/data_models/energy_systems/archetype.py
index b490ebb9..7f43c5dc 100644
--- a/hub/catalog_factories/data_models/energy_systems/archetype.py
+++ b/hub/catalog_factories/data_models/energy_systems/archetype.py
@@ -56,3 +56,5 @@ class Archetype:
}
}
return content
+
+
diff --git a/hub/catalog_factories/data_models/energy_systems/content.py b/hub/catalog_factories/data_models/energy_systems/content.py
index d3fd9068..f6a03ea0 100644
--- a/hub/catalog_factories/data_models/energy_systems/content.py
+++ b/hub/catalog_factories/data_models/energy_systems/content.py
@@ -69,11 +69,4 @@ class Content:
return content
- def __str__(self):
- """Print content"""
- _archetypes = []
- for _archetype in self.archetypes:
- _archetypes.append(_archetype.to_dictionary())
- content = {'Archetypes': _archetypes}
- return str(content)
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..a1e4798e 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
@@ -6,14 +6,13 @@ Project Coder Saeed Ranjbar saeed.ranjbar@concordia.ca
Code contributors: Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
"""
-
import xmltodict
from hub.catalog_factories.catalog import Catalog
from hub.catalog_factories.data_models.energy_systems.system import System
from hub.catalog_factories.data_models.energy_systems.content import Content
from hub.catalog_factories.data_models.energy_systems.generation_system import GenerationSystem
from hub.catalog_factories.data_models.energy_systems.pv_generation_system import PvGenerationSystem
-from hub.catalog_factories.data_models.energy_systems.energy_storage_system import EnergyStorageSystem
+from hub.catalog_factories.data_models.energy_systems.thermal_storage_system import ThermalStorageSystem
from hub.catalog_factories.data_models.energy_systems.performance_curves import PerformanceCurves
from hub.catalog_factories.data_models.energy_systems.archetype import Archetype
from hub.catalog_factories.data_models.construction.material import Material
@@ -40,7 +39,6 @@ class NorthAmericaEnergySystemCatalog(Catalog):
None,
self._storage_components)
print(self._content)
-
def _load_generation_components(self):
generation_components = []
boilers = self._archetypes['EnergySystemCatalog']['energy_generation_components']['boilers']
@@ -55,7 +53,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 +64,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 +98,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 +120,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 +133,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_maximum_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,65 +289,58 @@ class NorthAmericaEnergySystemCatalog(Catalog):
name = tes['@name']
model_name = tes['@modelName']
manufacturer = tes['@manufacturer']
- volume = tes['@volume']
- height = tes['@height']
+ storage_type = 'sensible'
+ 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)
- # the convention is from outside to inside
+ 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,
- name,
- model_name,
- manufacturer,
- 'thermal',
- volume,
- None,
- None,
- None,
- None,
- None,
- height,
- layers,
- maximum_operating_temperature)
+ storage_component = ThermalStorageSystem(storage_id,
+ name,
+ model_name,
+ manufacturer,
+ storage_type,
+ volume,
+ height,
+ layers,
+ maximum_operating_temperature)
storage_components.append(storage_component)
for template in template_storages:
storage_id = template['@storage_id']
name = template['@name']
+ storage_type = 'sensible'
maximum_temperature = template['@maxTemp']
+ height = template['physical_characteristics']['@height']
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 = template['insulation']['@material_id']
+ insulation_material = self._search_material(materials, insulation_material_id)
+ material_id = template['physical_characteristics']['@material_id']
+ tank_material = self._search_material(materials, material_id)
+ thickness = float(template['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)
- # the convention is from outside to inside
+ thickness = float(template['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,
- name,
- None,
- None,
- 'thermal',
- None,
- None,
- None,
- None,
- None,
- None,
- None,
- layers,
- maximum_temperature)
+ storage_component = ThermalStorageSystem(storage_id,
+ name,
+ None,
+ None,
+ storage_type,
+ None,
+ height,
+ layers,
+ maximum_temperature)
storage_components.append(storage_component)
return storage_components
@@ -393,9 +387,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 +404,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 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/test_systems_catalog.py b/tests/test_systems_catalog.py
index 8747acb4..a0720708 100644
--- a/tests/test_systems_catalog.py
+++ b/tests/test_systems_catalog.py
@@ -38,5 +38,7 @@ class TestSystemsCatalog(TestCase):
def test_north_america_systems_catalog(self):
catalog = EnergySystemsCatalogFactory('north_america').catalog
- def test_montreal_catalog(self):
- catalog = EnergySystemsCatalogFactory('montreal_custom').catalog
+
+
+ # def test_montreal_catalog(self):
+ # catalog = EnergySystemsCatalogFactory('montreal_custom').catalog