diff --git a/hub/__pycache__/__init__.cpython-39.pyc b/hub/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..0b825b54 Binary files /dev/null and b/hub/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/catalog_factories/__pycache__/__init__.cpython-39.pyc b/hub/catalog_factories/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..28c574d6 Binary files /dev/null and b/hub/catalog_factories/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/catalog_factories/__pycache__/catalog.cpython-39.pyc b/hub/catalog_factories/__pycache__/catalog.cpython-39.pyc new file mode 100644 index 00000000..292f03b0 Binary files /dev/null and b/hub/catalog_factories/__pycache__/catalog.cpython-39.pyc differ diff --git a/hub/catalog_factories/__pycache__/construction_catalog_factory.cpython-39.pyc b/hub/catalog_factories/__pycache__/construction_catalog_factory.cpython-39.pyc new file mode 100644 index 00000000..47001055 Binary files /dev/null and b/hub/catalog_factories/__pycache__/construction_catalog_factory.cpython-39.pyc differ diff --git a/hub/catalog_factories/__pycache__/energy_systems_catalog_factory.cpython-39.pyc b/hub/catalog_factories/__pycache__/energy_systems_catalog_factory.cpython-39.pyc new file mode 100644 index 00000000..fbf450b7 Binary files /dev/null and b/hub/catalog_factories/__pycache__/energy_systems_catalog_factory.cpython-39.pyc differ diff --git a/hub/catalog_factories/__pycache__/usage_catalog_factory.cpython-39.pyc b/hub/catalog_factories/__pycache__/usage_catalog_factory.cpython-39.pyc new file mode 100644 index 00000000..81c1376f Binary files /dev/null and b/hub/catalog_factories/__pycache__/usage_catalog_factory.cpython-39.pyc differ diff --git a/hub/catalog_factories/construction/__pycache__/__init__.cpython-39.pyc b/hub/catalog_factories/construction/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..f0315105 Binary files /dev/null and b/hub/catalog_factories/construction/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/catalog_factories/construction/__pycache__/construction_helper.cpython-39.pyc b/hub/catalog_factories/construction/__pycache__/construction_helper.cpython-39.pyc new file mode 100644 index 00000000..e15c98a7 Binary files /dev/null and b/hub/catalog_factories/construction/__pycache__/construction_helper.cpython-39.pyc differ diff --git a/hub/catalog_factories/construction/__pycache__/eilat_catalog.cpython-39.pyc b/hub/catalog_factories/construction/__pycache__/eilat_catalog.cpython-39.pyc new file mode 100644 index 00000000..cf1bd251 Binary files /dev/null and b/hub/catalog_factories/construction/__pycache__/eilat_catalog.cpython-39.pyc differ diff --git a/hub/catalog_factories/construction/__pycache__/nrcan_catalog.cpython-39.pyc b/hub/catalog_factories/construction/__pycache__/nrcan_catalog.cpython-39.pyc new file mode 100644 index 00000000..ec96c428 Binary files /dev/null and b/hub/catalog_factories/construction/__pycache__/nrcan_catalog.cpython-39.pyc differ diff --git a/hub/catalog_factories/construction/__pycache__/nrel_catalog.cpython-39.pyc b/hub/catalog_factories/construction/__pycache__/nrel_catalog.cpython-39.pyc new file mode 100644 index 00000000..ebcb3532 Binary files /dev/null and b/hub/catalog_factories/construction/__pycache__/nrel_catalog.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/__pycache__/__init__.cpython-39.pyc b/hub/catalog_factories/data_models/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..c3aa860b Binary files /dev/null and b/hub/catalog_factories/data_models/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/construction/__pycache__/__init__.cpython-39.pyc b/hub/catalog_factories/data_models/construction/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..0a6d4160 Binary files /dev/null and b/hub/catalog_factories/data_models/construction/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/construction/__pycache__/archetype.cpython-39.pyc b/hub/catalog_factories/data_models/construction/__pycache__/archetype.cpython-39.pyc new file mode 100644 index 00000000..bd4f8d5e Binary files /dev/null and b/hub/catalog_factories/data_models/construction/__pycache__/archetype.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/construction/__pycache__/construction.cpython-39.pyc b/hub/catalog_factories/data_models/construction/__pycache__/construction.cpython-39.pyc new file mode 100644 index 00000000..dc51abf3 Binary files /dev/null and b/hub/catalog_factories/data_models/construction/__pycache__/construction.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/construction/__pycache__/content.cpython-39.pyc b/hub/catalog_factories/data_models/construction/__pycache__/content.cpython-39.pyc new file mode 100644 index 00000000..606b5b67 Binary files /dev/null and b/hub/catalog_factories/data_models/construction/__pycache__/content.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/construction/__pycache__/layer.cpython-39.pyc b/hub/catalog_factories/data_models/construction/__pycache__/layer.cpython-39.pyc new file mode 100644 index 00000000..18e0d1f5 Binary files /dev/null and b/hub/catalog_factories/data_models/construction/__pycache__/layer.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/construction/__pycache__/material.cpython-39.pyc b/hub/catalog_factories/data_models/construction/__pycache__/material.cpython-39.pyc new file mode 100644 index 00000000..93e51250 Binary files /dev/null and b/hub/catalog_factories/data_models/construction/__pycache__/material.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/construction/__pycache__/window.cpython-39.pyc b/hub/catalog_factories/data_models/construction/__pycache__/window.cpython-39.pyc new file mode 100644 index 00000000..76ba2e8b Binary files /dev/null and b/hub/catalog_factories/data_models/construction/__pycache__/window.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/__init__.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..6a34132f Binary files /dev/null and b/hub/catalog_factories/data_models/energy_systems/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/archetype.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/archetype.cpython-39.pyc new file mode 100644 index 00000000..1736d647 Binary files /dev/null and b/hub/catalog_factories/data_models/energy_systems/__pycache__/archetype.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/content.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/content.cpython-39.pyc new file mode 100644 index 00000000..b1756708 Binary files /dev/null and b/hub/catalog_factories/data_models/energy_systems/__pycache__/content.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/distribution_system.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/distribution_system.cpython-39.pyc new file mode 100644 index 00000000..c88c8cf7 Binary files /dev/null and b/hub/catalog_factories/data_models/energy_systems/__pycache__/distribution_system.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/electrical_storage_system.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/electrical_storage_system.cpython-39.pyc new file mode 100644 index 00000000..595b03c1 Binary files /dev/null and b/hub/catalog_factories/data_models/energy_systems/__pycache__/electrical_storage_system.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/emission_system.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/emission_system.cpython-39.pyc new file mode 100644 index 00000000..f86ffdd9 Binary files /dev/null and b/hub/catalog_factories/data_models/energy_systems/__pycache__/emission_system.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/energy_storage_system.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/energy_storage_system.cpython-39.pyc new file mode 100644 index 00000000..aa6aba54 Binary files /dev/null and b/hub/catalog_factories/data_models/energy_systems/__pycache__/energy_storage_system.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/generation_system.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/generation_system.cpython-39.pyc new file mode 100644 index 00000000..868a79fa Binary files /dev/null and b/hub/catalog_factories/data_models/energy_systems/__pycache__/generation_system.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/non_pv_generation_system.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/non_pv_generation_system.cpython-39.pyc new file mode 100644 index 00000000..711df024 Binary files /dev/null and b/hub/catalog_factories/data_models/energy_systems/__pycache__/non_pv_generation_system.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/performance_curves.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/performance_curves.cpython-39.pyc new file mode 100644 index 00000000..8262bcad Binary files /dev/null and b/hub/catalog_factories/data_models/energy_systems/__pycache__/performance_curves.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/pv_generation_system.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/pv_generation_system.cpython-39.pyc new file mode 100644 index 00000000..fdc491e2 Binary files /dev/null and b/hub/catalog_factories/data_models/energy_systems/__pycache__/pv_generation_system.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/system.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/system.cpython-39.pyc new file mode 100644 index 00000000..b1ace3ba Binary files /dev/null and b/hub/catalog_factories/data_models/energy_systems/__pycache__/system.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/energy_systems/__pycache__/thermal_storage_system.cpython-39.pyc b/hub/catalog_factories/data_models/energy_systems/__pycache__/thermal_storage_system.cpython-39.pyc new file mode 100644 index 00000000..33d8811a Binary files /dev/null and b/hub/catalog_factories/data_models/energy_systems/__pycache__/thermal_storage_system.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/energy_systems/electrical_storage_system.py b/hub/catalog_factories/data_models/energy_systems/electrical_storage_system.py index 72e22c0e..3d17fba5 100644 --- a/hub/catalog_factories/data_models/energy_systems/electrical_storage_system.py +++ b/hub/catalog_factories/data_models/energy_systems/electrical_storage_system.py @@ -14,12 +14,12 @@ class ElectricalStorageSystem(EnergyStorageSystem): Energy Storage System Class """ - def __init__(self, storage_id, model_name=None, manufacturer=None, storage_type=None, + def __init__(self, storage_id, type_energy_stored=None, model_name=None, manufacturer=None, storage_type=None, nominal_capacity=None, losses_ratio=None, rated_output_power=None, nominal_efficiency=None, battery_voltage=None, depth_of_discharge=None, self_discharge_rate=None): super().__init__(storage_id, model_name, manufacturer, nominal_capacity, losses_ratio) - self._type_energy_stored = 'electrical' + self._type_energy_stored = type_energy_stored self._storage_type = storage_type self._rated_output_power = rated_output_power self._nominal_efficiency = nominal_efficiency diff --git a/hub/catalog_factories/data_models/energy_systems/non_pv_generation_system.py b/hub/catalog_factories/data_models/energy_systems/non_pv_generation_system.py index a33490d4..5b203d01 100644 --- a/hub/catalog_factories/data_models/energy_systems/non_pv_generation_system.py +++ b/hub/catalog_factories/data_models/energy_systems/non_pv_generation_system.py @@ -25,7 +25,7 @@ class NonPvGenerationSystem(GenerationSystem): maximum_cooling_supply_temperature=None, minimum_cooling_supply_temperature=None, heat_output_curve=None, heat_fuel_consumption_curve=None, heat_efficiency_curve=None, cooling_output_curve=None, cooling_fuel_consumption_curve=None, cooling_efficiency_curve=None, - distribution_systems=None, energy_storage_systems=None): + distribution_systems=None, energy_storage_systems=None, dual_supply_capability=False): super().__init__(system_id=system_id, name=name, model_name=model_name, manufacturer=manufacturer, fuel_type=fuel_type, distribution_systems=distribution_systems, energy_storage_systems=energy_storage_systems) self._system_type = system_type @@ -53,6 +53,7 @@ class NonPvGenerationSystem(GenerationSystem): self._cooling_output_curve = cooling_output_curve self._cooling_fuel_consumption_curve = cooling_fuel_consumption_curve self._cooling_efficiency_curve = cooling_efficiency_curve + self._dual_supply_capability = dual_supply_capability @property def system_type(self): @@ -254,6 +255,14 @@ class NonPvGenerationSystem(GenerationSystem): """ return self._cooling_efficiency_curve + @property + def dual_supply_capability(self): + """ + Get dual supply capability + :return: bool + """ + return self._dual_supply_capability + def to_dictionary(self): """Class content to dictionary""" _distribution_systems = [_distribution_system.to_dictionary() for _distribution_system in @@ -294,7 +303,8 @@ class NonPvGenerationSystem(GenerationSystem): 'cooling fuel consumption curve': self.cooling_fuel_consumption_curve, 'cooling efficiency curve': self.cooling_efficiency_curve, 'distribution systems connected': _distribution_systems, - 'storage systems connected': _energy_storage_systems + 'storage systems connected': _energy_storage_systems, + 'dual supply capability': self.dual_supply_capability } } return content diff --git a/hub/catalog_factories/data_models/energy_systems/pv_generation_system.py b/hub/catalog_factories/data_models/energy_systems/pv_generation_system.py index 232d5402..87228afa 100644 --- a/hub/catalog_factories/data_models/energy_systems/pv_generation_system.py +++ b/hub/catalog_factories/data_models/energy_systems/pv_generation_system.py @@ -14,7 +14,7 @@ class PvGenerationSystem(GenerationSystem): Electricity Generation system class """ - def __init__(self, system_id, name, model_name=None, manufacturer=None, electricity_efficiency=None, + def __init__(self, system_id, name, system_type, model_name=None, manufacturer=None, electricity_efficiency=None, nominal_electricity_output=None, nominal_ambient_temperature=None, nominal_cell_temperature=None, nominal_radiation=None, standard_test_condition_cell_temperature=None, standard_test_condition_maximum_power=None, cell_temperature_coefficient=None, width=None, height=None, @@ -22,7 +22,7 @@ class PvGenerationSystem(GenerationSystem): super().__init__(system_id=system_id, name=name, model_name=model_name, manufacturer=manufacturer, fuel_type='renewable', distribution_systems=distribution_systems, energy_storage_systems=energy_storage_systems) - self._system_type = 'PV system' + self._system_type = system_type self._electricity_efficiency = electricity_efficiency self._nominal_electricity_output = nominal_electricity_output self._nominal_ambient_temperature = nominal_ambient_temperature diff --git a/hub/catalog_factories/data_models/energy_systems/thermal_storage_system.py b/hub/catalog_factories/data_models/energy_systems/thermal_storage_system.py index 6c5382d7..d3cdf255 100644 --- a/hub/catalog_factories/data_models/energy_systems/thermal_storage_system.py +++ b/hub/catalog_factories/data_models/energy_systems/thermal_storage_system.py @@ -15,12 +15,12 @@ class ThermalStorageSystem(EnergyStorageSystem): Energy Storage System Class """ - def __init__(self, storage_id, model_name=None, manufacturer=None, storage_type=None, + def __init__(self, storage_id, type_energy_stored=None, model_name=None, manufacturer=None, storage_type=None, nominal_capacity=None, losses_ratio=None, volume=None, height=None, layers=None, maximum_operating_temperature=None, storage_medium=None): super().__init__(storage_id, model_name, manufacturer, nominal_capacity, losses_ratio) - self._type_energy_stored = 'thermal' + self._type_energy_stored = type_energy_stored self._storage_type = storage_type self._volume = volume self._height = height diff --git a/hub/catalog_factories/data_models/usages/__pycache__/__init__.cpython-39.pyc b/hub/catalog_factories/data_models/usages/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..27f39124 Binary files /dev/null and b/hub/catalog_factories/data_models/usages/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/usages/__pycache__/appliances.cpython-39.pyc b/hub/catalog_factories/data_models/usages/__pycache__/appliances.cpython-39.pyc new file mode 100644 index 00000000..3533a4e2 Binary files /dev/null and b/hub/catalog_factories/data_models/usages/__pycache__/appliances.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/usages/__pycache__/content.cpython-39.pyc b/hub/catalog_factories/data_models/usages/__pycache__/content.cpython-39.pyc new file mode 100644 index 00000000..ba4240e9 Binary files /dev/null and b/hub/catalog_factories/data_models/usages/__pycache__/content.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/usages/__pycache__/domestic_hot_water.cpython-39.pyc b/hub/catalog_factories/data_models/usages/__pycache__/domestic_hot_water.cpython-39.pyc new file mode 100644 index 00000000..23ad2e0b Binary files /dev/null and b/hub/catalog_factories/data_models/usages/__pycache__/domestic_hot_water.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/usages/__pycache__/lighting.cpython-39.pyc b/hub/catalog_factories/data_models/usages/__pycache__/lighting.cpython-39.pyc new file mode 100644 index 00000000..ca7753f5 Binary files /dev/null and b/hub/catalog_factories/data_models/usages/__pycache__/lighting.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/usages/__pycache__/occupancy.cpython-39.pyc b/hub/catalog_factories/data_models/usages/__pycache__/occupancy.cpython-39.pyc new file mode 100644 index 00000000..a76d5561 Binary files /dev/null and b/hub/catalog_factories/data_models/usages/__pycache__/occupancy.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/usages/__pycache__/schedule.cpython-39.pyc b/hub/catalog_factories/data_models/usages/__pycache__/schedule.cpython-39.pyc new file mode 100644 index 00000000..1792d014 Binary files /dev/null and b/hub/catalog_factories/data_models/usages/__pycache__/schedule.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/usages/__pycache__/thermal_control.cpython-39.pyc b/hub/catalog_factories/data_models/usages/__pycache__/thermal_control.cpython-39.pyc new file mode 100644 index 00000000..8298ec64 Binary files /dev/null and b/hub/catalog_factories/data_models/usages/__pycache__/thermal_control.cpython-39.pyc differ diff --git a/hub/catalog_factories/data_models/usages/__pycache__/usage.cpython-39.pyc b/hub/catalog_factories/data_models/usages/__pycache__/usage.cpython-39.pyc new file mode 100644 index 00000000..f87b079c Binary files /dev/null and b/hub/catalog_factories/data_models/usages/__pycache__/usage.cpython-39.pyc differ diff --git a/hub/catalog_factories/energy_systems/__pycache__/__init__.cpython-39.pyc b/hub/catalog_factories/energy_systems/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..097dc9b8 Binary files /dev/null and b/hub/catalog_factories/energy_systems/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/catalog_factories/energy_systems/__pycache__/montreal_custom_catalog.cpython-39.pyc b/hub/catalog_factories/energy_systems/__pycache__/montreal_custom_catalog.cpython-39.pyc new file mode 100644 index 00000000..29d54354 Binary files /dev/null and b/hub/catalog_factories/energy_systems/__pycache__/montreal_custom_catalog.cpython-39.pyc differ diff --git a/hub/catalog_factories/energy_systems/__pycache__/montreal_future_system_catalogue.cpython-39.pyc b/hub/catalog_factories/energy_systems/__pycache__/montreal_future_system_catalogue.cpython-39.pyc new file mode 100644 index 00000000..e4231be7 Binary files /dev/null and b/hub/catalog_factories/energy_systems/__pycache__/montreal_future_system_catalogue.cpython-39.pyc differ diff --git a/hub/catalog_factories/energy_systems/__pycache__/north_america_energy_system_catalog.cpython-39.pyc b/hub/catalog_factories/energy_systems/__pycache__/north_america_energy_system_catalog.cpython-39.pyc new file mode 100644 index 00000000..34804384 Binary files /dev/null and b/hub/catalog_factories/energy_systems/__pycache__/north_america_energy_system_catalog.cpython-39.pyc differ diff --git a/hub/catalog_factories/energy_systems/montreal_custom_catalog.py b/hub/catalog_factories/energy_systems/montreal_custom_catalog.py index 0c0abb88..1c6bdba5 100644 --- a/hub/catalog_factories/energy_systems/montreal_custom_catalog.py +++ b/hub/catalog_factories/energy_systems/montreal_custom_catalog.py @@ -84,8 +84,9 @@ class MontrealCustomCatalog(Catalog): heat_efficiency=heating_efficiency, cooling_efficiency=cooling_efficiency, electricity_efficiency=electricity_efficiency, - energy_storage_systems=storage_systems - ) + energy_storage_systems=storage_systems, + dual_supply_capability=False + ) _equipments.append(generation_system) return _equipments diff --git a/hub/catalog_factories/energy_systems/montreal_future_system_catalogue.py b/hub/catalog_factories/energy_systems/montreal_future_system_catalogue.py new file mode 100644 index 00000000..d2eb35c3 --- /dev/null +++ b/hub/catalog_factories/energy_systems/montreal_future_system_catalogue.py @@ -0,0 +1,539 @@ +""" +Montreal future energy system catalog +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2022 Concordia CERC group +Project Coder Saeed Ranjbar saeed.ranjbar@concordia.ca +""" + +import xmltodict +from pathlib import Path +from hub.catalog_factories.catalog import Catalog +from hub.catalog_factories.data_models.energy_systems.distribution_system import DistributionSystem +from hub.catalog_factories.data_models.energy_systems.emission_system import EmissionSystem +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.non_pv_generation_system import NonPvGenerationSystem +from hub.catalog_factories.data_models.energy_systems.pv_generation_system import PvGenerationSystem +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 +from hub.catalog_factories.data_models.construction.layer import Layer + + +class MontrealFutureSystemCatalogue(Catalog): + """ + North america energy system catalog class + """ + + def __init__(self, path): + path = str(path / 'montreal_future_systems.xml') + with open(path, 'r', encoding='utf-8') as xml: + self._archetypes = xmltodict.parse(xml.read(), + force_list=['pv_generation_component', 'templateStorages', 'demand']) + + self._storage_components = self._load_storage_components() + self._generation_components = self._load_generation_components() + self._energy_emission_components = self._load_emission_equipments() + self._distribution_components = self._load_distribution_equipments() + self._systems = self._load_systems() + self._system_archetypes = self._load_archetypes() + self._content = Content(self._system_archetypes, + self._systems, + generations=self._generation_components, + distributions=self._distribution_components) + + def _load_generation_components(self): + generation_components = [] + non_pv_generation_components = self._archetypes['EnergySystemCatalog']['energy_generation_components'][ + 'non_pv_generation_component'] + if non_pv_generation_components is not None: + for non_pv in non_pv_generation_components: + system_id = non_pv['system_id'] + name = non_pv['name'] + system_type = non_pv['system_type'] + model_name = non_pv['model_name'] + manufacturer = non_pv['manufacturer'] + fuel_type = non_pv['fuel_type'] + distribution_systems = non_pv['distribution_systems'] + energy_storage_systems = None + if non_pv['energy_storage_systems'] is not None: + storage_component = non_pv['energy_storage_systems']['storage_id'] + storage_systems = self._search_storage_equipment(self._load_storage_components(), storage_component) + energy_storage_systems = storage_systems + nominal_heat_output = non_pv['nominal_heat_output'] + maximum_heat_output = non_pv['maximum_heat_output'] + minimum_heat_output = non_pv['minimum_heat_output'] + source_medium = non_pv['source_medium'] + supply_medium = non_pv['supply_medium'] + heat_efficiency = non_pv['heat_efficiency'] + nominal_cooling_output = non_pv['nominal_cooling_output'] + maximum_cooling_output = non_pv['maximum_cooling_output'] + minimum_cooling_output = non_pv['minimum_cooling_output'] + cooling_efficiency = non_pv['cooling_efficiency'] + electricity_efficiency = non_pv['electricity_efficiency'] + source_temperature = non_pv['source_temperature'] + source_mass_flow = non_pv['source_mass_flow'] + nominal_electricity_output = non_pv['nominal_electricity_output'] + maximum_heat_supply_temperature = non_pv['maximum_heat_supply_temperature'] + minimum_heat_supply_temperature = non_pv['minimum_heat_supply_temperature'] + maximum_cooling_supply_temperature = non_pv['maximum_cooling_supply_temperature'] + minimum_cooling_supply_temperature = non_pv['minimum_cooling_supply_temperature'] + heat_output_curve = None + heat_fuel_consumption_curve = None + heat_efficiency_curve = None + cooling_output_curve = None + cooling_fuel_consumption_curve = None + cooling_efficiency_curve = None + if non_pv['heat_output_curve'] is not None: + curve_type = non_pv['heat_output_curve']['curve_type'] + dependant_variable = non_pv['heat_output_curve']['dependant_variable'] + parameters = non_pv['heat_output_curve']['parameters'] + coefficients = list(non_pv['heat_output_curve']['coefficients'].values()) + heat_output_curve = PerformanceCurves(curve_type, dependant_variable, parameters, coefficients) + if non_pv['heat_fuel_consumption_curve'] is not None: + curve_type = non_pv['heat_fuel_consumption_curve']['curve_type'] + dependant_variable = non_pv['heat_fuel_consumption_curve']['dependant_variable'] + parameters = non_pv['heat_fuel_consumption_curve']['parameters'] + coefficients = list(non_pv['heat_fuel_consumption_curve']['coefficients'].values()) + heat_fuel_consumption_curve = PerformanceCurves(curve_type, dependant_variable, parameters, coefficients) + if non_pv['heat_efficiency_curve'] is not None: + curve_type = non_pv['heat_efficiency_curve']['curve_type'] + dependant_variable = non_pv['heat_efficiency_curve']['dependant_variable'] + parameters = non_pv['heat_efficiency_curve']['parameters'] + coefficients = list(non_pv['heat_efficiency_curve']['coefficients'].values()) + heat_efficiency_curve = PerformanceCurves(curve_type, dependant_variable, parameters, coefficients) + if non_pv['cooling_output_curve'] is not None: + curve_type = non_pv['cooling_output_curve']['curve_type'] + dependant_variable = non_pv['cooling_output_curve']['dependant_variable'] + parameters = non_pv['cooling_output_curve']['parameters'] + coefficients = list(non_pv['cooling_output_curve']['coefficients'].values()) + cooling_output_curve = PerformanceCurves(curve_type, dependant_variable, parameters, coefficients) + if non_pv['cooling_fuel_consumption_curve'] is not None: + curve_type = non_pv['cooling_fuel_consumption_curve']['curve_type'] + dependant_variable = non_pv['cooling_fuel_consumption_curve']['dependant_variable'] + parameters = non_pv['cooling_fuel_consumption_curve']['parameters'] + coefficients = list(non_pv['cooling_fuel_consumption_curve']['coefficients'].values()) + cooling_fuel_consumption_curve = PerformanceCurves(curve_type, dependant_variable, parameters, coefficients) + if non_pv['cooling_efficiency_curve'] is not None: + curve_type = non_pv['cooling_efficiency_curve']['curve_type'] + dependant_variable = non_pv['cooling_efficiency_curve']['dependant_variable'] + parameters = non_pv['cooling_efficiency_curve']['parameters'] + coefficients = list(non_pv['cooling_efficiency_curve']['coefficients'].values()) + cooling_efficiency_curve = PerformanceCurves(curve_type, dependant_variable, parameters, coefficients) + dual_supply_capability = None + if non_pv['dual_supply_capability'] is not None: + if non_pv['dual_supply_capability'] == 'True': + dual_supply_capability = True + else: + dual_supply_capability = False + + non_pv_component = NonPvGenerationSystem(system_id=system_id, + name=name, + system_type=system_type, + model_name=model_name, + manufacturer=manufacturer, + fuel_type=fuel_type, + nominal_heat_output=nominal_heat_output, + maximum_heat_output=maximum_heat_output, + minimum_heat_output=minimum_heat_output, + source_medium=source_medium, + supply_medium=supply_medium, + heat_efficiency=heat_efficiency, + nominal_cooling_output=nominal_cooling_output, + maximum_cooling_output=maximum_cooling_output, + minimum_cooling_output=minimum_cooling_output, + cooling_efficiency=cooling_efficiency, + electricity_efficiency=electricity_efficiency, + source_temperature=source_temperature, + source_mass_flow=source_mass_flow, + nominal_electricity_output=nominal_electricity_output, + maximum_heat_supply_temperature=maximum_heat_supply_temperature, + minimum_heat_supply_temperature=minimum_heat_supply_temperature, + maximum_cooling_supply_temperature=maximum_cooling_supply_temperature, + minimum_cooling_supply_temperature=minimum_cooling_supply_temperature, + heat_output_curve=heat_output_curve, + heat_fuel_consumption_curve=heat_fuel_consumption_curve, + heat_efficiency_curve=heat_efficiency_curve, + cooling_output_curve=cooling_output_curve, + cooling_fuel_consumption_curve=cooling_fuel_consumption_curve, + cooling_efficiency_curve=cooling_efficiency_curve, + distribution_systems=distribution_systems, + energy_storage_systems=energy_storage_systems, + dual_supply_capability=dual_supply_capability) + generation_components.append(non_pv_component) + pv_generation_components = self._archetypes['EnergySystemCatalog']['energy_generation_components'][ + 'pv_generation_component'] + if pv_generation_components is not None: + for pv in pv_generation_components: + system_id = pv['system_id'] + name = pv['name'] + system_type = pv['system_type'] + model_name = pv['model_name'] + manufacturer = pv['manufacturer'] + electricity_efficiency = pv['electricity_efficiency'] + nominal_electricity_output = pv['nominal_electricity_output'] + nominal_ambient_temperature = pv['nominal_ambient_temperature'] + nominal_cell_temperature = pv['nominal_cell_temperature'] + nominal_radiation = pv['nominal_radiation'] + standard_test_condition_cell_temperature = pv['standard_test_condition_cell_temperature'] + standard_test_condition_maximum_power = pv['standard_test_condition_maximum_power'] + cell_temperature_coefficient = pv['cell_temperature_coefficient'] + width = pv['width'] + height = pv['height'] + distribution_systems = pv['distribution_systems'] + energy_storage_systems = None + if pv['energy_storage_systems'] is not None: + storage_component = pv['energy_storage_systems']['storage_id'] + storage_systems = self._search_storage_equipment(self._load_storage_components(), storage_component) + energy_storage_systems = storage_systems + + pv_component = PvGenerationSystem(system_id=system_id, + name=name, + system_type=system_type, + model_name=model_name, + manufacturer=manufacturer, + electricity_efficiency=electricity_efficiency, + nominal_electricity_output=nominal_electricity_output, + nominal_ambient_temperature=nominal_ambient_temperature, + nominal_cell_temperature=nominal_cell_temperature, + nominal_radiation=nominal_radiation, + standard_test_condition_cell_temperature= + standard_test_condition_cell_temperature, + standard_test_condition_maximum_power=standard_test_condition_maximum_power, + cell_temperature_coefficient=cell_temperature_coefficient, + width=width, + height=height, + distribution_systems=distribution_systems, + energy_storage_systems=energy_storage_systems) + generation_components.append(pv_component) + + return generation_components + + def _load_distribution_equipments(self): + _equipments = [] + distribution_systems = self._archetypes['EnergySystemCatalog']['distribution_systems']['distribution_system'] + if distribution_systems is not None: + for distribution_system in distribution_systems: + system_id = None + model_name = None + system_type = None + supply_temperature = None + distribution_consumption_fix_flow = None + distribution_consumption_variable_flow = None + heat_losses = None + generation_systems = None + energy_storage_systems = None + emission_systems = None + distribution_equipment = DistributionSystem(system_id=system_id, + model_name=model_name, + system_type=system_type, + supply_temperature=supply_temperature, + distribution_consumption_fix_flow=distribution_consumption_fix_flow, + distribution_consumption_variable_flow= + distribution_consumption_variable_flow, + heat_losses=heat_losses, + generation_systems=generation_systems, + energy_storage_systems=energy_storage_systems, + emission_systems=emission_systems + ) + _equipments.append(distribution_equipment) + return _equipments + + def _load_emission_equipments(self): + _equipments = [] + dissipation_systems = self._archetypes['EnergySystemCatalog']['dissipation_systems']['dissipation_system'] + if dissipation_systems is not None: + for dissipation_system in dissipation_systems: + system_id = None + model_name = None + system_type = None + parasitic_energy_consumption = None + emission_system = EmissionSystem(system_id=system_id, + model_name=model_name, + system_type=system_type, + parasitic_energy_consumption=parasitic_energy_consumption) + _equipments.append(emission_system) + return _equipments + + def _load_storage_components(self): + storage_components = [] + thermal_storages = self._archetypes['EnergySystemCatalog']['energy_storage_components']['thermalStorages'] + template_storages = self._archetypes['EnergySystemCatalog']['energy_storage_components']['templateStorages'] + for tes in thermal_storages: + storage_id = tes['storage_id'] + type_energy_stored = tes['type_energy_stored'] + model_name = tes['model_name'] + manufacturer = tes['manufacturer'] + storage_type = tes['storage_type'] + volume = tes['physical_characteristics']['volume'] + height = tes['physical_characteristics']['height'] + maximum_operating_temperature = tes['maximum_operating_temperature'] + materials = self._load_materials() + 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['physical_characteristics']['tankThickness']) / 100 # from cm to m + tank_layer = Layer(None, 'tank', tank_material, thickness) + media = self._load_media() + media_id = tes['storage_medium']['medium_id'] + medium = self._search_media(media, media_id) + layers = [insulation_layer, tank_layer] + nominal_capacity = tes['nominal_capacity'] + losses_ratio = tes['losses_ratio'] + storage_component = ThermalStorageSystem(storage_id=storage_id, + model_name=model_name, + type_energy_stored=type_energy_stored, + manufacturer=manufacturer, + storage_type=storage_type, + nominal_capacity=nominal_capacity, + losses_ratio=losses_ratio, + volume=volume, + height=height, + layers=layers, + maximum_operating_temperature=maximum_operating_temperature, + storage_medium=medium) + storage_components.append(storage_component) + + for template in template_storages: + storage_id = template['storage_id'] + storage_type = template['storage_type'] + type_energy_stored = template['type_energy_stored'] + maximum_operating_temperature = template['maximum_operating_temperature'] + height = template['physical_characteristics']['height'] + materials = self._load_materials() + 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['physical_characteristics']['tankThickness']) / 100 # from cm to m + tank_layer = Layer(None, 'tank', tank_material, thickness) + layers = [insulation_layer, tank_layer] + media = self._load_media() + media_id = template['storage_medium']['medium_id'] + medium = self._search_media(media, media_id) + model_name = template['model_name'] + manufacturer = template['manufacturer'] + nominal_capacity = template['nominal_capacity'] + losses_ratio = template['losses_ratio'] + volume = template['physical_characteristics']['volume'] + storage_component = ThermalStorageSystem(storage_id=storage_id, + model_name=model_name, + type_energy_stored=type_energy_stored, + manufacturer=manufacturer, + storage_type=storage_type, + nominal_capacity=nominal_capacity, + losses_ratio=losses_ratio, + volume=volume, + height=height, + layers=layers, + maximum_operating_temperature=maximum_operating_temperature, + storage_medium=medium) + storage_components.append(storage_component) + return storage_components + + def _load_systems(self): + base_path = Path(Path(__file__).parent.parent.parent / 'data/energy_systems') + _catalog_systems = [] + systems = self._archetypes['EnergySystemCatalog']['systems']['system'] + for system in systems: + system_id = system['id'] + name = system['name'] + demands = system['demands']['demand'] + generation_components = system['components']['generation_id'] + generation_systems = self._search_generation_equipment(self._load_generation_components(), generation_components) + configuration_schema = Path(base_path / system['schema']) + energy_system = System(system_id=system_id, + name=name, + demand_types=demands, + generation_systems=generation_systems, + distribution_systems=None, + configuration_schema=configuration_schema) + _catalog_systems.append(energy_system) + return _catalog_systems + + def _load_archetypes(self): + _system_archetypes = [] + system_clusters = self._archetypes['EnergySystemCatalog']['system_archetypes']['system_archetype'] + for system_cluster in system_clusters: + name = system_cluster['name'] + systems = system_cluster['systems']['system_id'] + integer_system_ids = [int(item) for item in systems] + _systems = [] + for system_archetype in self._systems: + if int(system_archetype.id) in integer_system_ids: + _systems.append(system_archetype) + _system_archetypes.append(Archetype(name=name, systems=_systems)) + return _system_archetypes + + def _load_materials(self): + materials = [] + _materials = self._archetypes['EnergySystemCatalog']['materials']['material'] + for _material in _materials: + material_id = _material['material_id'] + name = _material['name'] + conductivity = _material['conductivity'] + solar_absorptance = _material['solar_absorptance'] + thermal_absorptance = _material['thermal_absorptance'] + density = _material['density'] + specific_heat = _material['specific_heat'] + no_mass = _material['no_mass'] + visible_absorptance = _material['visible_absorptance'] + thermal_resistance = _material['thermal_resistance'] + + material = Material(material_id, + name, + solar_absorptance=solar_absorptance, + thermal_absorptance=thermal_absorptance, + density=density, + conductivity=conductivity, + thermal_resistance=thermal_resistance, + visible_absorptance=visible_absorptance, + no_mass=no_mass, + specific_heat=specific_heat) + materials.append(material) + return materials + + @staticmethod + def _search_material(materials, material_id): + _material = None + for material in materials: + if int(material.id) == int(material_id): + _material = material + break + if _material is None: + raise ValueError(f'Material with the id = [{material_id}] not found in catalog ') + return _material + + def _load_media(self): + media = [] + _media = [self._archetypes['EnergySystemCatalog']['media']['medium']] + for _medium in _media: + medium_id = _medium['medium_id'] + density = _medium['density'] + name = _medium['name'] + conductivity = _medium['conductivity'] + solar_absorptance = _medium['solar_absorptance'] + thermal_absorptance = _medium['thermal_absorptance'] + specific_heat = _medium['specific_heat'] + no_mass = _medium['no_mass'] + visible_absorptance = _medium['visible_absorptance'] + thermal_resistance = _medium['thermal_resistance'] + medium = Material(material_id=medium_id, + name=name, + solar_absorptance=solar_absorptance, + thermal_absorptance=thermal_absorptance, + visible_absorptance=visible_absorptance, + no_mass=no_mass, + thermal_resistance=thermal_resistance, + conductivity=conductivity, + density=density, + specific_heat=specific_heat) + media.append(medium) + return media + + @staticmethod + def _search_media(media, medium_id): + _medium = None + for medium in media: + if int(medium.id) == int(medium_id): + _medium = medium + break + if _medium is None: + raise ValueError(f'media with the id = [{medium_id}] not found in catalog ') + return _medium + + @staticmethod + def _search_generation_equipment(generation_systems, generation_id): + _generation_systems = [] + + if isinstance(generation_id, list): + integer_ids = [int(item) for item in generation_id] + for generation in generation_systems: + if int(generation.id) in integer_ids: + _generation_systems.append(generation) + else: + integer_id = int(generation_id) + for generation in generation_systems: + if int(generation.id) == integer_id: + _generation_systems.append(generation) + + if len(_generation_systems) == 0: + _generation_systems = None + raise ValueError(f'The system with the following id is not found in catalog [{generation_id}]') + return _generation_systems + + @staticmethod + def _search_storage_equipment(storage_systems, storage_id): + _storage_systems = [] + for storage in storage_systems: + if storage.id in storage_id: + _storage_systems.append(storage) + if len(_storage_systems) == 0: + _storage_systems = None + raise ValueError(f'The system with the following id is not found in catalog [{storage_id}]') + return _storage_systems + + def names(self, category=None): + """ + Get the catalog elements names + :parm: optional category filter + """ + if category is None: + _names = {'archetypes': [], 'systems': [], 'generation_equipments': [], 'storage_equipments': []} + for archetype in self._content.archetypes: + _names['archetypes'].append(archetype.name) + for system in self._content.systems: + _names['systems'].append(system.name) + for equipment in self._content.generation_equipments: + _names['generation_equipments'].append(equipment.name) + else: + _names = {category: []} + if category.lower() == 'archetypes': + for archetype in self._content.archetypes: + _names[category].append(archetype.name) + elif category.lower() == 'systems': + for system in self._content.systems: + _names[category].append(system.name) + elif category.lower() == 'generation_equipments': + for system in self._content.generation_equipments: + _names[category].append(system.name) + else: + raise ValueError(f'Unknown category [{category}]') + return _names + + def entries(self, category=None): + """ + Get the catalog elements + :parm: optional category filter + """ + if category is None: + return self._content + if category.lower() == 'archetypes': + return self._content.archetypes + if category.lower() == 'systems': + return self._content.systems + if category.lower() == 'generation_equipments': + return self._content.generation_equipments + raise ValueError(f'Unknown category [{category}]') + + def get_entry(self, name): + """ + Get one catalog element by names + :parm: entry name + """ + for entry in self._content.archetypes: + if entry.name.lower() == name.lower(): + return entry + for entry in self._content.systems: + if entry.name.lower() == name.lower(): + return entry + for entry in self._content.generation_equipments: + if entry.name.lower() == name.lower(): + return entry + raise IndexError(f"{name} doesn't exists in the catalog") 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 6ba78dfb..fed83211 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 @@ -56,6 +56,9 @@ class NorthAmericaEnergySystemCatalog(Catalog): boiler_maximum_heat_output = float(boiler['@maximumHeatOutput']) boiler_minimum_heat_output = float(boiler['@minimumHeatOutput']) boiler_heat_efficiency = float(boiler['@nominalEfficiency']) + dual_supply = False + if '@dual_supply' in boiler.keys() and boiler['@dual_supply'] == 'True': + dual_supply = True boiler_component = NonPvGenerationSystem(boiler_id, name=name, system_type=system_type, @@ -65,7 +68,8 @@ class NorthAmericaEnergySystemCatalog(Catalog): nominal_heat_output=boiler_nominal_thermal_output, maximum_heat_output=boiler_maximum_heat_output, minimum_heat_output=boiler_minimum_heat_output, - heat_efficiency=boiler_heat_efficiency) + heat_efficiency=boiler_heat_efficiency, + dual_supply_capability=dual_supply) generation_components.append(boiler_component) for heat_pump in heat_pumps: heat_pump_id = heat_pump['@generation_id'] @@ -89,6 +93,9 @@ class NorthAmericaEnergySystemCatalog(Catalog): parameters = heat_pump['performance_curve']['parameters'] coefficients = list(heat_pump['performance_curve']['coefficients'].values()) cop_curve = PerformanceCurves(cop_curve_type, dependant_variable, parameters, coefficients) + dual_supply = False + if '@dual_supply' in heat_pump.keys() and heat_pump['@dual_supply'] == 'True': + dual_supply = True heat_pump_component = NonPvGenerationSystem(heat_pump_id, name=name, @@ -106,7 +113,8 @@ class NorthAmericaEnergySystemCatalog(Catalog): minimum_heat_supply_temperature=heat_pump_minimum_heat_supply_temperature, maximum_cooling_supply_temperature=heat_pump_maximum_cooling_supply_temperature, minimum_cooling_supply_temperature=heat_pump_minimum_cooling_supply_temperature, - heat_efficiency_curve=cop_curve) + heat_efficiency_curve=cop_curve, + dual_supply_capability=dual_supply) generation_components.append(heat_pump_component) for pv in photovoltaics: pv_id = pv['@generation_id'] @@ -143,6 +151,8 @@ class NorthAmericaEnergySystemCatalog(Catalog): for template in templates: system_id = template['@generation_id'] system_name = template['@name'] + if '@dual_supply' in template.keys() and template['@dual_supply'] == 'True': + dual_supply = True if 'storage_id' in template.keys(): storage_component = template['storage_id'] storage_systems = self._search_storage_equipment(self._load_storage_components(), storage_component) @@ -158,7 +168,8 @@ class NorthAmericaEnergySystemCatalog(Catalog): system_type=system_type, fuel_type=fuel_type, heat_efficiency=heat_efficiency, - energy_storage_systems=energy_storage_system) + energy_storage_systems=energy_storage_system, + dual_supply_capability=dual_supply) generation_components.append(boiler_template) elif "Heat Pump" in system_name: system_type = 'heat pump' @@ -173,7 +184,8 @@ class NorthAmericaEnergySystemCatalog(Catalog): supply_medium=supply_medium, fuel_type=fuel_type, heat_efficiency=heat_efficiency, - energy_storage_systems=energy_storage_system) + energy_storage_systems=energy_storage_system, + dual_supply_capability=dual_supply) generation_components.append(heat_pump_template) else: electricity_efficiency = float(template['@nominalEfficiency']) diff --git a/hub/catalog_factories/energy_systems_catalog_factory.py b/hub/catalog_factories/energy_systems_catalog_factory.py index 6e102bc3..3e368f91 100644 --- a/hub/catalog_factories/energy_systems_catalog_factory.py +++ b/hub/catalog_factories/energy_systems_catalog_factory.py @@ -10,6 +10,7 @@ from typing import TypeVar from hub.catalog_factories.energy_systems.montreal_custom_catalog import MontrealCustomCatalog from hub.catalog_factories.energy_systems.north_america_energy_system_catalog import NorthAmericaEnergySystemCatalog +from hub.catalog_factories.energy_systems.montreal_future_system_catalogue import MontrealFutureSystemCatalogue from hub.helpers.utils import validate_import_export_type Catalog = TypeVar('Catalog') @@ -40,6 +41,13 @@ class EnergySystemsCatalogFactory: """ return NorthAmericaEnergySystemCatalog(self._path) + @property + def _montreal_future(self): + """ + Retrieve North American catalog + """ + return MontrealFutureSystemCatalogue(self._path) + @property def catalog(self) -> Catalog: """ diff --git a/hub/catalog_factories/usage/__pycache__/__init__.cpython-39.pyc b/hub/catalog_factories/usage/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..d126df0a Binary files /dev/null and b/hub/catalog_factories/usage/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/catalog_factories/usage/__pycache__/comnet_catalog.cpython-39.pyc b/hub/catalog_factories/usage/__pycache__/comnet_catalog.cpython-39.pyc new file mode 100644 index 00000000..0be06d77 Binary files /dev/null and b/hub/catalog_factories/usage/__pycache__/comnet_catalog.cpython-39.pyc differ diff --git a/hub/catalog_factories/usage/__pycache__/eilat_catalog.cpython-39.pyc b/hub/catalog_factories/usage/__pycache__/eilat_catalog.cpython-39.pyc new file mode 100644 index 00000000..6f94f311 Binary files /dev/null and b/hub/catalog_factories/usage/__pycache__/eilat_catalog.cpython-39.pyc differ diff --git a/hub/catalog_factories/usage/__pycache__/nrcan_catalog.cpython-39.pyc b/hub/catalog_factories/usage/__pycache__/nrcan_catalog.cpython-39.pyc new file mode 100644 index 00000000..f31ba86c Binary files /dev/null and b/hub/catalog_factories/usage/__pycache__/nrcan_catalog.cpython-39.pyc differ diff --git a/hub/catalog_factories/usage/__pycache__/usage_helper.cpython-39.pyc b/hub/catalog_factories/usage/__pycache__/usage_helper.cpython-39.pyc new file mode 100644 index 00000000..bd22447d Binary files /dev/null and b/hub/catalog_factories/usage/__pycache__/usage_helper.cpython-39.pyc differ diff --git a/hub/city_model_structure/__pycache__/__init__.cpython-39.pyc b/hub/city_model_structure/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..856016a4 Binary files /dev/null and b/hub/city_model_structure/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/city_model_structure/__pycache__/building.cpython-39.pyc b/hub/city_model_structure/__pycache__/building.cpython-39.pyc new file mode 100644 index 00000000..31b53a55 Binary files /dev/null and b/hub/city_model_structure/__pycache__/building.cpython-39.pyc differ diff --git a/hub/city_model_structure/__pycache__/buildings_cluster.cpython-39.pyc b/hub/city_model_structure/__pycache__/buildings_cluster.cpython-39.pyc new file mode 100644 index 00000000..9b668d1f Binary files /dev/null and b/hub/city_model_structure/__pycache__/buildings_cluster.cpython-39.pyc differ diff --git a/hub/city_model_structure/__pycache__/city.cpython-39.pyc b/hub/city_model_structure/__pycache__/city.cpython-39.pyc new file mode 100644 index 00000000..8cbed17f Binary files /dev/null and b/hub/city_model_structure/__pycache__/city.cpython-39.pyc differ diff --git a/hub/city_model_structure/__pycache__/city_object.cpython-39.pyc b/hub/city_model_structure/__pycache__/city_object.cpython-39.pyc new file mode 100644 index 00000000..450328cb Binary files /dev/null and b/hub/city_model_structure/__pycache__/city_object.cpython-39.pyc differ diff --git a/hub/city_model_structure/__pycache__/city_objects_cluster.cpython-39.pyc b/hub/city_model_structure/__pycache__/city_objects_cluster.cpython-39.pyc new file mode 100644 index 00000000..354819eb Binary files /dev/null and b/hub/city_model_structure/__pycache__/city_objects_cluster.cpython-39.pyc differ diff --git a/hub/city_model_structure/__pycache__/level_of_detail.cpython-39.pyc b/hub/city_model_structure/__pycache__/level_of_detail.cpython-39.pyc new file mode 100644 index 00000000..23d48333 Binary files /dev/null and b/hub/city_model_structure/__pycache__/level_of_detail.cpython-39.pyc differ diff --git a/hub/city_model_structure/__pycache__/parts_consisting_building.cpython-39.pyc b/hub/city_model_structure/__pycache__/parts_consisting_building.cpython-39.pyc new file mode 100644 index 00000000..b45092d4 Binary files /dev/null and b/hub/city_model_structure/__pycache__/parts_consisting_building.cpython-39.pyc differ diff --git a/hub/city_model_structure/attributes/__pycache__/__init__.cpython-39.pyc b/hub/city_model_structure/attributes/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..62ba0e20 Binary files /dev/null and b/hub/city_model_structure/attributes/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/city_model_structure/attributes/__pycache__/plane.cpython-39.pyc b/hub/city_model_structure/attributes/__pycache__/plane.cpython-39.pyc new file mode 100644 index 00000000..411aab13 Binary files /dev/null and b/hub/city_model_structure/attributes/__pycache__/plane.cpython-39.pyc differ diff --git a/hub/city_model_structure/attributes/__pycache__/point.cpython-39.pyc b/hub/city_model_structure/attributes/__pycache__/point.cpython-39.pyc new file mode 100644 index 00000000..03999762 Binary files /dev/null and b/hub/city_model_structure/attributes/__pycache__/point.cpython-39.pyc differ diff --git a/hub/city_model_structure/attributes/__pycache__/polygon.cpython-39.pyc b/hub/city_model_structure/attributes/__pycache__/polygon.cpython-39.pyc new file mode 100644 index 00000000..0a6154fd Binary files /dev/null and b/hub/city_model_structure/attributes/__pycache__/polygon.cpython-39.pyc differ diff --git a/hub/city_model_structure/attributes/__pycache__/polyhedron.cpython-39.pyc b/hub/city_model_structure/attributes/__pycache__/polyhedron.cpython-39.pyc new file mode 100644 index 00000000..66217ead Binary files /dev/null and b/hub/city_model_structure/attributes/__pycache__/polyhedron.cpython-39.pyc differ diff --git a/hub/city_model_structure/attributes/__pycache__/schedule.cpython-39.pyc b/hub/city_model_structure/attributes/__pycache__/schedule.cpython-39.pyc new file mode 100644 index 00000000..0e438712 Binary files /dev/null and b/hub/city_model_structure/attributes/__pycache__/schedule.cpython-39.pyc differ diff --git a/hub/city_model_structure/building.py b/hub/city_model_structure/building.py index c3da0573..5474e5dc 100644 --- a/hub/city_model_structure/building.py +++ b/hub/city_model_structure/building.py @@ -762,13 +762,16 @@ class Building(CityObject): if demand_type.lower() == consumption_type.lower(): if consumption_type in (cte.HEATING, cte.DOMESTIC_HOT_WATER): for generation_system in generation_systems: - coefficient_of_performance = generation_system.heat_efficiency + if generation_system.heat_efficiency is not None: + coefficient_of_performance = float(generation_system.heat_efficiency) elif consumption_type == cte.COOLING: for generation_system in generation_systems: - coefficient_of_performance = generation_system.cooling_efficiency + if generation_system.cooling_efficiency is not None: + coefficient_of_performance = float(generation_system.cooling_efficiency) elif consumption_type == cte.ELECTRICITY: for generation_system in generation_systems: - coefficient_of_performance = generation_system.electricity_efficiency + if generation_system.electricity_efficiency is not None: + coefficient_of_performance = float(generation_system.electricity_efficiency) if coefficient_of_performance == 0: values = [0]*len(demand) final_energy_consumed = values @@ -799,18 +802,22 @@ class Building(CityObject): if self.energy_systems is None: return self._onsite_electrical_production for energy_system in self.energy_systems: - if energy_system.generation_systems[0].system_type == cte.PHOTOVOLTAIC: - _efficiency = energy_system.generation_systems[0].electricity_efficiency - self._onsite_electrical_production = {} - for _key in self.roofs[0].global_irradiance.keys(): - _results = [0 for _ in range(0, len(self.roofs[0].global_irradiance[_key]))] - for surface in self.roofs: - if _key in orientation_losses_factor: - _results = [x + y * _efficiency * surface.perimeter_area - * surface.solar_collectors_area_reduction_factor * z - for x, y, z in zip(_results, surface.global_irradiance[_key], - orientation_losses_factor[_key]['south'])] - self._onsite_electrical_production[_key] = _results + for generation_system in energy_system.generation_systems: + if generation_system.system_type == cte.PHOTOVOLTAIC: + if generation_system.electricity_efficiency is not None: + _efficiency = float(generation_system.electricity_efficiency) + else: + _efficiency = 0 + self._onsite_electrical_production = {} + for _key in self.roofs[0].global_irradiance.keys(): + _results = [0 for _ in range(0, len(self.roofs[0].global_irradiance[_key]))] + for surface in self.roofs: + if _key in orientation_losses_factor: + _results = [x + y * _efficiency * surface.perimeter_area + * surface.solar_collectors_area_reduction_factor * z + for x, y, z in zip(_results, surface.global_irradiance[_key], + orientation_losses_factor[_key]['south'])] + self._onsite_electrical_production[_key] = _results return self._onsite_electrical_production @property diff --git a/hub/city_model_structure/building_demand/__pycache__/__init__.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..a86a713d Binary files /dev/null and b/hub/city_model_structure/building_demand/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/city_model_structure/building_demand/__pycache__/appliances.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/appliances.cpython-39.pyc new file mode 100644 index 00000000..021d6c35 Binary files /dev/null and b/hub/city_model_structure/building_demand/__pycache__/appliances.cpython-39.pyc differ diff --git a/hub/city_model_structure/building_demand/__pycache__/construction.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/construction.cpython-39.pyc new file mode 100644 index 00000000..e0aac978 Binary files /dev/null and b/hub/city_model_structure/building_demand/__pycache__/construction.cpython-39.pyc differ diff --git a/hub/city_model_structure/building_demand/__pycache__/domestic_hot_water.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/domestic_hot_water.cpython-39.pyc new file mode 100644 index 00000000..705591d9 Binary files /dev/null and b/hub/city_model_structure/building_demand/__pycache__/domestic_hot_water.cpython-39.pyc differ diff --git a/hub/city_model_structure/building_demand/__pycache__/household.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/household.cpython-39.pyc new file mode 100644 index 00000000..37e5502a Binary files /dev/null and b/hub/city_model_structure/building_demand/__pycache__/household.cpython-39.pyc differ diff --git a/hub/city_model_structure/building_demand/__pycache__/internal_gain.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/internal_gain.cpython-39.pyc new file mode 100644 index 00000000..3554d5b1 Binary files /dev/null and b/hub/city_model_structure/building_demand/__pycache__/internal_gain.cpython-39.pyc differ diff --git a/hub/city_model_structure/building_demand/__pycache__/internal_zone.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/internal_zone.cpython-39.pyc new file mode 100644 index 00000000..fb878f5e Binary files /dev/null and b/hub/city_model_structure/building_demand/__pycache__/internal_zone.cpython-39.pyc differ diff --git a/hub/city_model_structure/building_demand/__pycache__/layer.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/layer.cpython-39.pyc new file mode 100644 index 00000000..fcb9d3af Binary files /dev/null and b/hub/city_model_structure/building_demand/__pycache__/layer.cpython-39.pyc differ diff --git a/hub/city_model_structure/building_demand/__pycache__/lighting.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/lighting.cpython-39.pyc new file mode 100644 index 00000000..12d9e8da Binary files /dev/null and b/hub/city_model_structure/building_demand/__pycache__/lighting.cpython-39.pyc differ diff --git a/hub/city_model_structure/building_demand/__pycache__/occupancy.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/occupancy.cpython-39.pyc new file mode 100644 index 00000000..cc66673c Binary files /dev/null and b/hub/city_model_structure/building_demand/__pycache__/occupancy.cpython-39.pyc differ diff --git a/hub/city_model_structure/building_demand/__pycache__/surface.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/surface.cpython-39.pyc new file mode 100644 index 00000000..3b6aaf92 Binary files /dev/null and b/hub/city_model_structure/building_demand/__pycache__/surface.cpython-39.pyc differ diff --git a/hub/city_model_structure/building_demand/__pycache__/thermal_archetype.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/thermal_archetype.cpython-39.pyc new file mode 100644 index 00000000..732d6d01 Binary files /dev/null and b/hub/city_model_structure/building_demand/__pycache__/thermal_archetype.cpython-39.pyc differ diff --git a/hub/city_model_structure/building_demand/__pycache__/thermal_boundary.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/thermal_boundary.cpython-39.pyc new file mode 100644 index 00000000..3781423a Binary files /dev/null and b/hub/city_model_structure/building_demand/__pycache__/thermal_boundary.cpython-39.pyc differ diff --git a/hub/city_model_structure/building_demand/__pycache__/thermal_control.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/thermal_control.cpython-39.pyc new file mode 100644 index 00000000..652a2e8e Binary files /dev/null and b/hub/city_model_structure/building_demand/__pycache__/thermal_control.cpython-39.pyc differ diff --git a/hub/city_model_structure/building_demand/__pycache__/thermal_opening.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/thermal_opening.cpython-39.pyc new file mode 100644 index 00000000..d4b13886 Binary files /dev/null and b/hub/city_model_structure/building_demand/__pycache__/thermal_opening.cpython-39.pyc differ diff --git a/hub/city_model_structure/building_demand/__pycache__/thermal_zone.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/thermal_zone.cpython-39.pyc new file mode 100644 index 00000000..817e3a1e Binary files /dev/null and b/hub/city_model_structure/building_demand/__pycache__/thermal_zone.cpython-39.pyc differ diff --git a/hub/city_model_structure/building_demand/__pycache__/usage.cpython-39.pyc b/hub/city_model_structure/building_demand/__pycache__/usage.cpython-39.pyc new file mode 100644 index 00000000..ce6984eb Binary files /dev/null and b/hub/city_model_structure/building_demand/__pycache__/usage.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/__pycache__/__init__.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..cfe9fd54 Binary files /dev/null and b/hub/city_model_structure/energy_systems/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/__pycache__/control_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/control_system.cpython-39.pyc new file mode 100644 index 00000000..9d08df8d Binary files /dev/null and b/hub/city_model_structure/energy_systems/__pycache__/control_system.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/__pycache__/distribution_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/distribution_system.cpython-39.pyc new file mode 100644 index 00000000..54356ab7 Binary files /dev/null and b/hub/city_model_structure/energy_systems/__pycache__/distribution_system.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/__pycache__/electrical_storage_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/electrical_storage_system.cpython-39.pyc new file mode 100644 index 00000000..3792492e Binary files /dev/null and b/hub/city_model_structure/energy_systems/__pycache__/electrical_storage_system.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/__pycache__/emission_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/emission_system.cpython-39.pyc new file mode 100644 index 00000000..77b78e11 Binary files /dev/null and b/hub/city_model_structure/energy_systems/__pycache__/emission_system.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/__pycache__/energy_storage_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/energy_storage_system.cpython-39.pyc new file mode 100644 index 00000000..2abd5948 Binary files /dev/null and b/hub/city_model_structure/energy_systems/__pycache__/energy_storage_system.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/__pycache__/energy_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/energy_system.cpython-39.pyc new file mode 100644 index 00000000..259e97f4 Binary files /dev/null and b/hub/city_model_structure/energy_systems/__pycache__/energy_system.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/__pycache__/generation_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/generation_system.cpython-39.pyc new file mode 100644 index 00000000..a96f6789 Binary files /dev/null and b/hub/city_model_structure/energy_systems/__pycache__/generation_system.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/__pycache__/generic_distribution_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/generic_distribution_system.cpython-39.pyc new file mode 100644 index 00000000..4dd5b6b2 Binary files /dev/null and b/hub/city_model_structure/energy_systems/__pycache__/generic_distribution_system.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/__pycache__/generic_emission_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/generic_emission_system.cpython-39.pyc new file mode 100644 index 00000000..985830ab Binary files /dev/null and b/hub/city_model_structure/energy_systems/__pycache__/generic_emission_system.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/__pycache__/generic_energy_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/generic_energy_system.cpython-39.pyc new file mode 100644 index 00000000..279d7c78 Binary files /dev/null and b/hub/city_model_structure/energy_systems/__pycache__/generic_energy_system.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/__pycache__/generic_generation_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/generic_generation_system.cpython-39.pyc new file mode 100644 index 00000000..e2321150 Binary files /dev/null and b/hub/city_model_structure/energy_systems/__pycache__/generic_generation_system.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/__pycache__/generic_storage_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/generic_storage_system.cpython-39.pyc new file mode 100644 index 00000000..57fc0ebc Binary files /dev/null and b/hub/city_model_structure/energy_systems/__pycache__/generic_storage_system.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/__pycache__/non_pv_generation_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/non_pv_generation_system.cpython-39.pyc new file mode 100644 index 00000000..32f7c26b Binary files /dev/null and b/hub/city_model_structure/energy_systems/__pycache__/non_pv_generation_system.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/__pycache__/performance_curve.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/performance_curve.cpython-39.pyc new file mode 100644 index 00000000..e33db28d Binary files /dev/null and b/hub/city_model_structure/energy_systems/__pycache__/performance_curve.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/__pycache__/pv_generation_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/pv_generation_system.cpython-39.pyc new file mode 100644 index 00000000..47de2346 Binary files /dev/null and b/hub/city_model_structure/energy_systems/__pycache__/pv_generation_system.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/__pycache__/thermal_storage_system.cpython-39.pyc b/hub/city_model_structure/energy_systems/__pycache__/thermal_storage_system.cpython-39.pyc new file mode 100644 index 00000000..ae8aa5c0 Binary files /dev/null and b/hub/city_model_structure/energy_systems/__pycache__/thermal_storage_system.cpython-39.pyc differ diff --git a/hub/city_model_structure/energy_systems/non_pv_generation_system.py b/hub/city_model_structure/energy_systems/non_pv_generation_system.py index 3dc044e5..fea1d7b2 100644 --- a/hub/city_model_structure/energy_systems/non_pv_generation_system.py +++ b/hub/city_model_structure/energy_systems/non_pv_generation_system.py @@ -42,6 +42,7 @@ class NonPvGenerationSystem(GenerationSystem): self._cooling_output_curve = None self._cooling_fuel_consumption_curve = None self._cooling_efficiency_curve = None + self._dual_supply_capability = None @property def nominal_heat_output(self): @@ -427,4 +428,22 @@ class NonPvGenerationSystem(GenerationSystem): """ self._cooling_efficiency_curve = value + @property + def dual_supply_capability(self): + """ + Get the capability of the generation component for simultaneous heat and cold production + + :return: bool + """ + return self._dual_supply_capability + + @dual_supply_capability.setter + def dual_supply_capability(self, value): + """ + Set the capability of the generation component for simultaneous heat and cold production + + :return: bool + """ + self._dual_supply_capability = value + diff --git a/hub/city_model_structure/greenery/__pycache__/__init__.cpython-39.pyc b/hub/city_model_structure/greenery/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..fa613ace Binary files /dev/null and b/hub/city_model_structure/greenery/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/city_model_structure/greenery/__pycache__/plant.cpython-39.pyc b/hub/city_model_structure/greenery/__pycache__/plant.cpython-39.pyc new file mode 100644 index 00000000..b17dfa1c Binary files /dev/null and b/hub/city_model_structure/greenery/__pycache__/plant.cpython-39.pyc differ diff --git a/hub/city_model_structure/greenery/__pycache__/soil.cpython-39.pyc b/hub/city_model_structure/greenery/__pycache__/soil.cpython-39.pyc new file mode 100644 index 00000000..d5ed8ada Binary files /dev/null and b/hub/city_model_structure/greenery/__pycache__/soil.cpython-39.pyc differ diff --git a/hub/city_model_structure/greenery/__pycache__/vegetation.cpython-39.pyc b/hub/city_model_structure/greenery/__pycache__/vegetation.cpython-39.pyc new file mode 100644 index 00000000..82f4a9e8 Binary files /dev/null and b/hub/city_model_structure/greenery/__pycache__/vegetation.cpython-39.pyc differ diff --git a/hub/city_model_structure/iot/__pycache__/__init__.cpython-39.pyc b/hub/city_model_structure/iot/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..148740e4 Binary files /dev/null and b/hub/city_model_structure/iot/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/city_model_structure/iot/__pycache__/sensor.cpython-39.pyc b/hub/city_model_structure/iot/__pycache__/sensor.cpython-39.pyc new file mode 100644 index 00000000..97f0a1ff Binary files /dev/null and b/hub/city_model_structure/iot/__pycache__/sensor.cpython-39.pyc differ diff --git a/hub/city_model_structure/iot/__pycache__/sensor_measure.cpython-39.pyc b/hub/city_model_structure/iot/__pycache__/sensor_measure.cpython-39.pyc new file mode 100644 index 00000000..2f3a44b2 Binary files /dev/null and b/hub/city_model_structure/iot/__pycache__/sensor_measure.cpython-39.pyc differ diff --git a/hub/city_model_structure/iot/__pycache__/sensor_type.cpython-39.pyc b/hub/city_model_structure/iot/__pycache__/sensor_type.cpython-39.pyc new file mode 100644 index 00000000..c37da53a Binary files /dev/null and b/hub/city_model_structure/iot/__pycache__/sensor_type.cpython-39.pyc differ diff --git a/hub/city_model_structure/iot/__pycache__/station.cpython-39.pyc b/hub/city_model_structure/iot/__pycache__/station.cpython-39.pyc new file mode 100644 index 00000000..7458aa74 Binary files /dev/null and b/hub/city_model_structure/iot/__pycache__/station.cpython-39.pyc differ diff --git a/hub/data/energy_systems/montreal_future_systems.xml b/hub/data/energy_systems/montreal_future_systems.xml new file mode 100644 index 00000000..769f87bd --- /dev/null +++ b/hub/data/energy_systems/montreal_future_systems.xml @@ -0,0 +1,1311 @@ + + + ./schemas/ + + + 1 + Water + + + + + + 981.0 + 4180.0 + 0.6 + + + + + 1 + Natural-Gas Boiler + boiler + ALP080B + Alpine + 21.0 + 4.7 + 23.5 + 0.95 + True + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + Natural-Gas boiler + boiler + ALP105B + Alpine + 28.0 + 6.15 + 30.8 + 0.95 + True + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 3 + Natural-Gas boiler + boiler + ALP150B + Alpine + 40.0 + 8.8 + 44 + 0.95 + True + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 4 + Natural-Gas boiler + boiler + ALP210B + Alpine + 57.0 + 12.3 + 61.5 + 0.95 + True + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + Natural-Gas boiler + boiler + ALTAC-136 + Alta + 33.0 + 4.0 + 35.2 + 0.95 + True + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 6 + Natural-Gas boiler + boiler + ALTA-120 + Alta + 33.0 + 4.0 + 35.2 + 0.95 + False + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 7 + Natural-Gas boiler + boiler + ASPN-085 + Aspen + 23.15 + 2.5 + 25.0 + 0.96 + + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 8 + Natural-Gas boiler + boiler + ASPN-110 + Aspen + 30.19 + 3.2 + 32.0 + 0.96 + + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 9 + Natural-Gas boiler + boiler + ASPNC-155 + Aspen + 42.5 + 4.5 + 45.0 + 0.95 + True + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 10 + Natural-Gas boiler + boiler + K2WTC-135B + K2 + 32.8 + 3.5 + 35.0 + 0.95 + True + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 11 + Natural-Gas boiler + boiler + K2WTC-180B + K2 + 49.5 + 5.3 + 53.0 + 0.95 + True + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 12 + Photovoltaic Module + Photovoltaic + 445MS + Canadian Solar + + + + + + + + + 2.01 + 1.048 + + + + + 13 + Air-to-Water heat pump + heat pump + CMAA 012 + TRANE + 51.7 + 0 + 51.7 + 3.32 + + Electricity + Air + water + + + + + + + + + 55.0 + 6.0 + 30.0 + 11.0 + + + + second degree multivariable function + COP + source_temperature + supply_temperature + + + + + + + + False + + + 14 + Air-to-Water heat pump + heat pump + CMAA 70 + TRANE + 279.3 + 0 + 279.3 + 3.07 + + Electricity + Air + water + + + + + + + + + 55.0 + 6.0 + 30.0 + 11.0 + + + + second degree multivariable function + COP + source_temperature + supply_temperature + + + + + + + + False + + + 15 + Air-to-Water heat pump + heat pump + CMAA 140 + TRANE + 557 + 0 + 557 + 3.46 + + Electricity + Air + water + + + + + + + + + 55.0 + 6.0 + 30.0 + 11.0 + + + + second degree multivariable function + COP + source_temperature + supply_temperature + + + + + + + + False + + + 16 + template Natural-Gas boiler + boiler + + + + + + 0.90 + + natural gas + + + + + + + + + + + + + + + + + + + + + + + 6 + + + + + 17 + template Electric boiler + boiler + + + + + + 0.95 + + electricity + + + + + + + + + + + + + + + + + + + + + + + 6 + + + + + 18 + template Air-to-Water heat pump + heat pump + + + + + + 3 + + electricity + Air + water + + + + 4.5 + + + + + + + + + + + + + + + + + 6 + + True + + + 19 + template Groundwater-to-Water heat pump + heat pump + + + + + + 3.5 + + electricity + Ground + water + + + + + + + + + + + + + + + + + + + + + 6 + + True + + + 20 + template Water-to-Water heat pump + heat pump + + + + + + 3.5 + + electricity + Water + water + + + + + + + + + + + + + + + + + + + + + 6 + + True + + + 21 + template Natural-Gas boiler + boiler + + + + + + 0.90 + + natural gas + + + + + + + + + + + + + + + + + + + + + + + + + + 22 + template Electric boiler + boiler + + + + + + 0.95 + + electricity + + + + + + + + + + + + + + + + + + + + + + + + + + 23 + template Air-to-Water heat pump + heat pump + + + + + + 3 + + electricity + Air + water + + + + + + + + + + + + + + + + + + + + + True + + + 24 + template Groundwater-to-Water heat pump + heat pump + + + + + + 3.5 + + electricity + Ground + water + + + + + + + + + + + + + + + + + + + + + True + + + 25 + template Water-to-Water heat pump + heat pump + + + + + + 3.5 + + electricity + Water + water + + + + + + + + + + + + + + + + + + + + + True + + + 26 + template Photovoltaic Module + Photovoltaic + + + + 0.2 + + + + + + + 1.0 + 1.0 + + + + + + + 1 + Hot Water Storage Tank + thermal + HF 200 + reflex + 95.0 + + 1 + 90.0 + + + 2 + 0 + 1.5 + Steel + 0.5 + + + 1 + + sensible + + + + + 2 + Hot Water Storage Tank + thermal + HF 300 + reflex + 95.0 + + 1 + 90.0 + + + 2 + 0 + 1.5 + Steel + 0.6 + + + 1 + + sensible + + + + + 3 + Hot Water Storage Tank + thermal + HF 500 + reflex + 95.0 + + 1 + 90.0 + + + 2 + 0 + 1.5 + Steel + 0.5 + + + 1 + + sensible + + + + + 4 + Hot Water Storage Tank + thermal + HF 200 + reflex + 95.0 + + 1 + 90.0 + + 2 + 0 + 1.5 + Steel + 0.5 + + + 1 + + sensible + + + + + 5 + Hot Water Storage Tank + thermal + HF 200 + reflex + 95.0 + + 1 + 90.0 + + + 2 + 0 + 1.5 + Steel + 0.5 + + + 1 + + sensible + + + + + 6 + template Hot Water Storage Tank + thermal + HF 200 + + 95.0 + + 1 + 90.0 + + + 2 + 0 + 1.5 + Steel + + + + 1 + + sensible + + + + + + + 1 + Polyurethane + + + + + + + + 0.028 + + + 2 + Steel + + + + + + + + 18 + + + + + + + + + + + 1 + 4 pipe storage equipped air source heat pump and gas boiler + schemas/ASHP+TES+GasBoiler.jpg + + heating + cooling + domestic_hot_water + + + 21 + 18 + + + + 2 + 4 pipe storage equipped air source heat pump and electrical boiler + schemas/ASHP+TES+GasBoiler.jpg + + heating + cooling + domestic_hot_water + + + 22 + 18 + + + + 3 + 4 pipe storage equipped ground source heat pump and gas boiler + schemas/GSHP+TES+GasBoiler.jpg + + heating + cooling + domestic_hot_water + + + 21 + 19 + + + + 4 + 4 pipe storage equipped ground source heat pump and electrical boiler + schemas/GSHP+TES+ElectricBoiler.jpg + + heating + cooling + domestic_hot_water + + + 22 + 19 + + + + 5 + 4 pipe storage equipped ground source heat pump and gas boiler + schemas/WSHP+TES+GasBoiler.jpg + + heating + cooling + domestic_hot_water + + + 21 + 20 + + + + 6 + 4 pipe storage equipped ground source heat pump and electrical boiler + schemas/WSHP+TES+ElectricBoiler.jpg + + heating + cooling + domestic_hot_water + + + 22 + 20 + + + + 7 + Photovoltaic System + schemas/PV.jpg + + electricity + + + 26 + + + + + + PV+ASHP+GasBoiler+TES + + 7 + 1 + + + + PV+ASHP+ElectricBoiler+TES + + 7 + 2 + + + + PV+GSHP+GasBoiler+TES + + 7 + 3 + + + + PV+GSHP+ElectricBoiler+TES + + 7 + 4 + + + + PV+WSHP+GasBoiler+TES + + 7 + 5 + + + + PV+WSHP+ElectricBoiler+TES + + 7 + 6 + + + + ASHP+GasBoiler+TES + + 1 + + + + ASHP+ElectricBoiler+TES + + 2 + + + + GSHP+GasBoiler+TES + + 3 + + + + GSHP+ElectricBoiler+TES + + 4 + + + + WSHP+GasBoiler+TES + + 5 + + + + WSHP+ElectricBoiler+TES + + 6 + + + + + diff --git a/hub/data/energy_systems/north_america_systems.xml b/hub/data/energy_systems/north_america_systems.xml index f7c9eb3a..ca090cda 100644 --- a/hub/data/energy_systems/north_america_systems.xml +++ b/hub/data/energy_systems/north_america_systems.xml @@ -6,7 +6,7 @@ - + @@ -17,7 +17,7 @@ - + COP source_temperature @@ -25,7 +25,7 @@ - + COP source_temperature @@ -33,7 +33,7 @@ - + COP source_temperature @@ -47,20 +47,20 @@ 6 - + 6 - + 6 - + 6 - - - + + + diff --git a/hub/exports/__pycache__/__init__.cpython-39.pyc b/hub/exports/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..9dc178b1 Binary files /dev/null and b/hub/exports/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/exports/__pycache__/energy_building_exports_factory.cpython-39.pyc b/hub/exports/__pycache__/energy_building_exports_factory.cpython-39.pyc new file mode 100644 index 00000000..2c14b747 Binary files /dev/null and b/hub/exports/__pycache__/energy_building_exports_factory.cpython-39.pyc differ diff --git a/hub/exports/__pycache__/exports_factory.cpython-39.pyc b/hub/exports/__pycache__/exports_factory.cpython-39.pyc new file mode 100644 index 00000000..863f4f38 Binary files /dev/null and b/hub/exports/__pycache__/exports_factory.cpython-39.pyc differ diff --git a/hub/exports/building_energy/__pycache__/__init__.cpython-39.pyc b/hub/exports/building_energy/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..d3110686 Binary files /dev/null and b/hub/exports/building_energy/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/exports/building_energy/__pycache__/energy_ade.cpython-39.pyc b/hub/exports/building_energy/__pycache__/energy_ade.cpython-39.pyc new file mode 100644 index 00000000..a2191884 Binary files /dev/null and b/hub/exports/building_energy/__pycache__/energy_ade.cpython-39.pyc differ diff --git a/hub/exports/building_energy/__pycache__/idf.cpython-39.pyc b/hub/exports/building_energy/__pycache__/idf.cpython-39.pyc new file mode 100644 index 00000000..6286a2fd Binary files /dev/null and b/hub/exports/building_energy/__pycache__/idf.cpython-39.pyc differ diff --git a/hub/exports/building_energy/insel/__pycache__/__init__.cpython-39.pyc b/hub/exports/building_energy/insel/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..e57d6fa2 Binary files /dev/null and b/hub/exports/building_energy/insel/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/exports/building_energy/insel/__pycache__/insel_monthly_energy_balance.cpython-39.pyc b/hub/exports/building_energy/insel/__pycache__/insel_monthly_energy_balance.cpython-39.pyc new file mode 100644 index 00000000..bbaf23f0 Binary files /dev/null and b/hub/exports/building_energy/insel/__pycache__/insel_monthly_energy_balance.cpython-39.pyc differ diff --git a/hub/exports/formats/__pycache__/__init__.cpython-39.pyc b/hub/exports/formats/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..df68a86e Binary files /dev/null and b/hub/exports/formats/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/exports/formats/__pycache__/obj.cpython-39.pyc b/hub/exports/formats/__pycache__/obj.cpython-39.pyc new file mode 100644 index 00000000..4967b77d Binary files /dev/null and b/hub/exports/formats/__pycache__/obj.cpython-39.pyc differ diff --git a/hub/exports/formats/__pycache__/simplified_radiosity_algorithm.cpython-39.pyc b/hub/exports/formats/__pycache__/simplified_radiosity_algorithm.cpython-39.pyc new file mode 100644 index 00000000..a64ed721 Binary files /dev/null and b/hub/exports/formats/__pycache__/simplified_radiosity_algorithm.cpython-39.pyc differ diff --git a/hub/exports/formats/__pycache__/stl.cpython-39.pyc b/hub/exports/formats/__pycache__/stl.cpython-39.pyc new file mode 100644 index 00000000..a6f0e629 Binary files /dev/null and b/hub/exports/formats/__pycache__/stl.cpython-39.pyc differ diff --git a/hub/exports/formats/__pycache__/triangular.cpython-39.pyc b/hub/exports/formats/__pycache__/triangular.cpython-39.pyc new file mode 100644 index 00000000..8d058814 Binary files /dev/null and b/hub/exports/formats/__pycache__/triangular.cpython-39.pyc differ diff --git a/hub/helpers/__pycache__/__init__.cpython-39.pyc b/hub/helpers/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..be58587f Binary files /dev/null and b/hub/helpers/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/helpers/__pycache__/configuration_helper.cpython-39.pyc b/hub/helpers/__pycache__/configuration_helper.cpython-39.pyc new file mode 100644 index 00000000..7ac8cd8d Binary files /dev/null and b/hub/helpers/__pycache__/configuration_helper.cpython-39.pyc differ diff --git a/hub/helpers/__pycache__/constants.cpython-39.pyc b/hub/helpers/__pycache__/constants.cpython-39.pyc new file mode 100644 index 00000000..bdf6694a Binary files /dev/null and b/hub/helpers/__pycache__/constants.cpython-39.pyc differ diff --git a/hub/helpers/__pycache__/dictionaries.cpython-39.pyc b/hub/helpers/__pycache__/dictionaries.cpython-39.pyc new file mode 100644 index 00000000..dffe6758 Binary files /dev/null and b/hub/helpers/__pycache__/dictionaries.cpython-39.pyc differ diff --git a/hub/helpers/__pycache__/geometry_helper.cpython-39.pyc b/hub/helpers/__pycache__/geometry_helper.cpython-39.pyc new file mode 100644 index 00000000..8d1f1201 Binary files /dev/null and b/hub/helpers/__pycache__/geometry_helper.cpython-39.pyc differ diff --git a/hub/helpers/__pycache__/location.cpython-39.pyc b/hub/helpers/__pycache__/location.cpython-39.pyc new file mode 100644 index 00000000..ac83e948 Binary files /dev/null and b/hub/helpers/__pycache__/location.cpython-39.pyc differ diff --git a/hub/helpers/__pycache__/monthly_values.cpython-39.pyc b/hub/helpers/__pycache__/monthly_values.cpython-39.pyc new file mode 100644 index 00000000..68fa09dc Binary files /dev/null and b/hub/helpers/__pycache__/monthly_values.cpython-39.pyc differ diff --git a/hub/helpers/__pycache__/peak_loads.cpython-39.pyc b/hub/helpers/__pycache__/peak_loads.cpython-39.pyc new file mode 100644 index 00000000..a0dd94fa Binary files /dev/null and b/hub/helpers/__pycache__/peak_loads.cpython-39.pyc differ diff --git a/hub/helpers/__pycache__/utils.cpython-39.pyc b/hub/helpers/__pycache__/utils.cpython-39.pyc new file mode 100644 index 00000000..e79f6b0e Binary files /dev/null and b/hub/helpers/__pycache__/utils.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/__init__.cpython-39.pyc b/hub/helpers/data/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..6431e0ad Binary files /dev/null and b/hub/helpers/data/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/alkis_function_to_hub_function.cpython-39.pyc b/hub/helpers/data/__pycache__/alkis_function_to_hub_function.cpython-39.pyc new file mode 100644 index 00000000..b13e5e55 Binary files /dev/null and b/hub/helpers/data/__pycache__/alkis_function_to_hub_function.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/eilat_function_to_hub_function.cpython-39.pyc b/hub/helpers/data/__pycache__/eilat_function_to_hub_function.cpython-39.pyc new file mode 100644 index 00000000..c4cd43f1 Binary files /dev/null and b/hub/helpers/data/__pycache__/eilat_function_to_hub_function.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/hft_function_to_hub_function.cpython-39.pyc b/hub/helpers/data/__pycache__/hft_function_to_hub_function.cpython-39.pyc new file mode 100644 index 00000000..6d72189e Binary files /dev/null and b/hub/helpers/data/__pycache__/hft_function_to_hub_function.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/hub_function_to_eilat_construction_function.cpython-39.pyc b/hub/helpers/data/__pycache__/hub_function_to_eilat_construction_function.cpython-39.pyc new file mode 100644 index 00000000..5d567ef7 Binary files /dev/null and b/hub/helpers/data/__pycache__/hub_function_to_eilat_construction_function.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/hub_function_to_montreal_custom_costs_function.cpython-39.pyc b/hub/helpers/data/__pycache__/hub_function_to_montreal_custom_costs_function.cpython-39.pyc new file mode 100644 index 00000000..67a97836 Binary files /dev/null and b/hub/helpers/data/__pycache__/hub_function_to_montreal_custom_costs_function.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/hub_function_to_nrcan_construction_function.cpython-39.pyc b/hub/helpers/data/__pycache__/hub_function_to_nrcan_construction_function.cpython-39.pyc new file mode 100644 index 00000000..b7a2fbfa Binary files /dev/null and b/hub/helpers/data/__pycache__/hub_function_to_nrcan_construction_function.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/hub_function_to_nrel_construction_function.cpython-39.pyc b/hub/helpers/data/__pycache__/hub_function_to_nrel_construction_function.cpython-39.pyc new file mode 100644 index 00000000..2f78d517 Binary files /dev/null and b/hub/helpers/data/__pycache__/hub_function_to_nrel_construction_function.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/hub_usage_to_comnet_usage.cpython-39.pyc b/hub/helpers/data/__pycache__/hub_usage_to_comnet_usage.cpython-39.pyc new file mode 100644 index 00000000..4a67fa4e Binary files /dev/null and b/hub/helpers/data/__pycache__/hub_usage_to_comnet_usage.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/hub_usage_to_eilat_usage.cpython-39.pyc b/hub/helpers/data/__pycache__/hub_usage_to_eilat_usage.cpython-39.pyc new file mode 100644 index 00000000..750e7d87 Binary files /dev/null and b/hub/helpers/data/__pycache__/hub_usage_to_eilat_usage.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/hub_usage_to_hft_usage.cpython-39.pyc b/hub/helpers/data/__pycache__/hub_usage_to_hft_usage.cpython-39.pyc new file mode 100644 index 00000000..eaf1214c Binary files /dev/null and b/hub/helpers/data/__pycache__/hub_usage_to_hft_usage.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/hub_usage_to_nrcan_usage.cpython-39.pyc b/hub/helpers/data/__pycache__/hub_usage_to_nrcan_usage.cpython-39.pyc new file mode 100644 index 00000000..2c88afaf Binary files /dev/null and b/hub/helpers/data/__pycache__/hub_usage_to_nrcan_usage.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/montreal_custom_fuel_to_hub_fuel.cpython-39.pyc b/hub/helpers/data/__pycache__/montreal_custom_fuel_to_hub_fuel.cpython-39.pyc new file mode 100644 index 00000000..6887ebdb Binary files /dev/null and b/hub/helpers/data/__pycache__/montreal_custom_fuel_to_hub_fuel.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/montreal_demand_type_to_hub_energy_demand_type.cpython-39.pyc b/hub/helpers/data/__pycache__/montreal_demand_type_to_hub_energy_demand_type.cpython-39.pyc new file mode 100644 index 00000000..4b36172a Binary files /dev/null and b/hub/helpers/data/__pycache__/montreal_demand_type_to_hub_energy_demand_type.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/montreal_function_to_hub_function.cpython-39.pyc b/hub/helpers/data/__pycache__/montreal_function_to_hub_function.cpython-39.pyc new file mode 100644 index 00000000..1b306466 Binary files /dev/null and b/hub/helpers/data/__pycache__/montreal_function_to_hub_function.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/montreal_generation_system_to_hub_energy_generation_system.cpython-39.pyc b/hub/helpers/data/__pycache__/montreal_generation_system_to_hub_energy_generation_system.cpython-39.pyc new file mode 100644 index 00000000..de2ff300 Binary files /dev/null and b/hub/helpers/data/__pycache__/montreal_generation_system_to_hub_energy_generation_system.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/montreal_system_to_hub_energy_generation_system.cpython-39.pyc b/hub/helpers/data/__pycache__/montreal_system_to_hub_energy_generation_system.cpython-39.pyc new file mode 100644 index 00000000..b3f4e009 Binary files /dev/null and b/hub/helpers/data/__pycache__/montreal_system_to_hub_energy_generation_system.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/north_america_custom_fuel_to_hub_fuel.cpython-39.pyc b/hub/helpers/data/__pycache__/north_america_custom_fuel_to_hub_fuel.cpython-39.pyc new file mode 100644 index 00000000..bc03122b Binary files /dev/null and b/hub/helpers/data/__pycache__/north_america_custom_fuel_to_hub_fuel.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/north_america_demand_type_to_hub_energy_demand_type.cpython-39.pyc b/hub/helpers/data/__pycache__/north_america_demand_type_to_hub_energy_demand_type.cpython-39.pyc new file mode 100644 index 00000000..0a15aabb Binary files /dev/null and b/hub/helpers/data/__pycache__/north_america_demand_type_to_hub_energy_demand_type.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/north_america_storage_system_to_hub_storage.cpython-39.pyc b/hub/helpers/data/__pycache__/north_america_storage_system_to_hub_storage.cpython-39.pyc new file mode 100644 index 00000000..b50b0108 Binary files /dev/null and b/hub/helpers/data/__pycache__/north_america_storage_system_to_hub_storage.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/north_america_system_to_hub_energy_generation_system.cpython-39.pyc b/hub/helpers/data/__pycache__/north_america_system_to_hub_energy_generation_system.cpython-39.pyc new file mode 100644 index 00000000..3079abd1 Binary files /dev/null and b/hub/helpers/data/__pycache__/north_america_system_to_hub_energy_generation_system.cpython-39.pyc differ diff --git a/hub/helpers/data/__pycache__/pluto_function_to_hub_function.cpython-39.pyc b/hub/helpers/data/__pycache__/pluto_function_to_hub_function.cpython-39.pyc new file mode 100644 index 00000000..77acccdb Binary files /dev/null and b/hub/helpers/data/__pycache__/pluto_function_to_hub_function.cpython-39.pyc differ diff --git a/hub/helpers/peak_calculation/__pycache__/__init__.cpython-39.pyc b/hub/helpers/peak_calculation/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..ffa7a13c Binary files /dev/null and b/hub/helpers/peak_calculation/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/helpers/peak_calculation/__pycache__/loads_calculation.cpython-39.pyc b/hub/helpers/peak_calculation/__pycache__/loads_calculation.cpython-39.pyc new file mode 100644 index 00000000..30f0c075 Binary files /dev/null and b/hub/helpers/peak_calculation/__pycache__/loads_calculation.cpython-39.pyc differ diff --git a/hub/imports/__pycache__/__init__.cpython-39.pyc b/hub/imports/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..e85b3ff7 Binary files /dev/null and b/hub/imports/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/imports/__pycache__/construction_factory.cpython-39.pyc b/hub/imports/__pycache__/construction_factory.cpython-39.pyc new file mode 100644 index 00000000..a45a82db Binary files /dev/null and b/hub/imports/__pycache__/construction_factory.cpython-39.pyc differ diff --git a/hub/imports/__pycache__/energy_systems_factory.cpython-39.pyc b/hub/imports/__pycache__/energy_systems_factory.cpython-39.pyc new file mode 100644 index 00000000..b050cce2 Binary files /dev/null and b/hub/imports/__pycache__/energy_systems_factory.cpython-39.pyc differ diff --git a/hub/imports/__pycache__/geometry_factory.cpython-39.pyc b/hub/imports/__pycache__/geometry_factory.cpython-39.pyc new file mode 100644 index 00000000..df4111b6 Binary files /dev/null and b/hub/imports/__pycache__/geometry_factory.cpython-39.pyc differ diff --git a/hub/imports/__pycache__/results_factory.cpython-39.pyc b/hub/imports/__pycache__/results_factory.cpython-39.pyc new file mode 100644 index 00000000..ca7a3735 Binary files /dev/null and b/hub/imports/__pycache__/results_factory.cpython-39.pyc differ diff --git a/hub/imports/__pycache__/usage_factory.cpython-39.pyc b/hub/imports/__pycache__/usage_factory.cpython-39.pyc new file mode 100644 index 00000000..8bc421bb Binary files /dev/null and b/hub/imports/__pycache__/usage_factory.cpython-39.pyc differ diff --git a/hub/imports/__pycache__/weather_factory.cpython-39.pyc b/hub/imports/__pycache__/weather_factory.cpython-39.pyc new file mode 100644 index 00000000..c0ac64d9 Binary files /dev/null and b/hub/imports/__pycache__/weather_factory.cpython-39.pyc differ diff --git a/hub/imports/construction/__pycache__/__init__.cpython-39.pyc b/hub/imports/construction/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..ee9dec90 Binary files /dev/null and b/hub/imports/construction/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/imports/construction/__pycache__/eilat_physics_parameters.cpython-39.pyc b/hub/imports/construction/__pycache__/eilat_physics_parameters.cpython-39.pyc new file mode 100644 index 00000000..bb658e26 Binary files /dev/null and b/hub/imports/construction/__pycache__/eilat_physics_parameters.cpython-39.pyc differ diff --git a/hub/imports/construction/__pycache__/nrcan_physics_parameters.cpython-39.pyc b/hub/imports/construction/__pycache__/nrcan_physics_parameters.cpython-39.pyc new file mode 100644 index 00000000..4f79b767 Binary files /dev/null and b/hub/imports/construction/__pycache__/nrcan_physics_parameters.cpython-39.pyc differ diff --git a/hub/imports/construction/__pycache__/nrel_physics_parameters.cpython-39.pyc b/hub/imports/construction/__pycache__/nrel_physics_parameters.cpython-39.pyc new file mode 100644 index 00000000..69de5f7e Binary files /dev/null and b/hub/imports/construction/__pycache__/nrel_physics_parameters.cpython-39.pyc differ diff --git a/hub/imports/construction/helpers/__pycache__/__init__.cpython-39.pyc b/hub/imports/construction/helpers/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..f7620b48 Binary files /dev/null and b/hub/imports/construction/helpers/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/imports/construction/helpers/__pycache__/construction_helper.cpython-39.pyc b/hub/imports/construction/helpers/__pycache__/construction_helper.cpython-39.pyc new file mode 100644 index 00000000..5f409f6c Binary files /dev/null and b/hub/imports/construction/helpers/__pycache__/construction_helper.cpython-39.pyc differ diff --git a/hub/imports/energy_systems/__pycache__/__init__.cpython-39.pyc b/hub/imports/energy_systems/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..3f5dca61 Binary files /dev/null and b/hub/imports/energy_systems/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/imports/energy_systems/__pycache__/montreal_custom_energy_system_parameters.cpython-39.pyc b/hub/imports/energy_systems/__pycache__/montreal_custom_energy_system_parameters.cpython-39.pyc new file mode 100644 index 00000000..b0a194d0 Binary files /dev/null and b/hub/imports/energy_systems/__pycache__/montreal_custom_energy_system_parameters.cpython-39.pyc differ diff --git a/hub/imports/energy_systems/__pycache__/montreal_future_energy_systems_parameters.cpython-39.pyc b/hub/imports/energy_systems/__pycache__/montreal_future_energy_systems_parameters.cpython-39.pyc new file mode 100644 index 00000000..d3cc174c Binary files /dev/null and b/hub/imports/energy_systems/__pycache__/montreal_future_energy_systems_parameters.cpython-39.pyc differ diff --git a/hub/imports/energy_systems/__pycache__/north_america_custom_energy_system_parameters.cpython-39.pyc b/hub/imports/energy_systems/__pycache__/north_america_custom_energy_system_parameters.cpython-39.pyc new file mode 100644 index 00000000..2467f58f Binary files /dev/null and b/hub/imports/energy_systems/__pycache__/north_america_custom_energy_system_parameters.cpython-39.pyc differ diff --git a/hub/imports/energy_systems/montreal_future_energy_systems_parameters.py b/hub/imports/energy_systems/montreal_future_energy_systems_parameters.py new file mode 100644 index 00000000..8b585108 --- /dev/null +++ b/hub/imports/energy_systems/montreal_future_energy_systems_parameters.py @@ -0,0 +1,161 @@ +""" +Montreal future system importer +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2023 Concordia CERC group +Project Coder Saeed Ranjbar saeed.ranjbar@concordia.ca + +""" + +import logging +import copy + +from hub.catalog_factories.energy_systems_catalog_factory import EnergySystemsCatalogFactory +from hub.city_model_structure.energy_systems.energy_system import EnergySystem +from hub.city_model_structure.energy_systems.distribution_system import DistributionSystem +from hub.city_model_structure.energy_systems.non_pv_generation_system import NonPvGenerationSystem +from hub.city_model_structure.energy_systems.pv_generation_system import PvGenerationSystem +from hub.city_model_structure.energy_systems.electrical_storage_system import ElectricalStorageSystem +from hub.city_model_structure.energy_systems.thermal_storage_system import ThermalStorageSystem +from hub.city_model_structure.energy_systems.emission_system import EmissionSystem +from hub.helpers.dictionaries import Dictionaries + + +class MontrealFutureEnergySystemParameters: + """ + MontrealCustomEnergySystemParameters class + """ + + def __init__(self, city): + self._city = city + + def enrich_buildings(self): + """ + Returns the city with the system parameters assigned to the buildings + :return: + """ + city = self._city + montreal_custom_catalog = EnergySystemsCatalogFactory('montreal_future').catalog + if city.generic_energy_systems is None: + _generic_energy_systems = {} + else: + _generic_energy_systems = city.generic_energy_systems + for building in city.buildings: + archetype_name = building.energy_systems_archetype_name + try: + archetype = self._search_archetypes(montreal_custom_catalog, archetype_name) + except KeyError: + logging.error('Building %s has unknown energy system archetype for system name %s', building.name, + archetype_name) + continue + + if archetype.name not in _generic_energy_systems: + _generic_energy_systems = self._create_generic_systems_list(archetype, _generic_energy_systems) + + city.generic_energy_systems = _generic_energy_systems + + self._assign_energy_systems_to_buildings(city) + + @staticmethod + def _search_archetypes(catalog, name): + archetypes = catalog.entries('archetypes') + for building_archetype in archetypes: + if str(name) == str(building_archetype.name): + return building_archetype + raise KeyError('archetype not found') + + def _create_generic_systems_list(self, archetype, _generic_energy_systems): + building_systems = [] + for archetype_system in archetype.systems: + energy_system = EnergySystem() + _hub_demand_types = [] + for demand_type in archetype_system.demand_types: + _hub_demand_types.append(Dictionaries().montreal_demand_type_to_hub_energy_demand_type[demand_type]) + energy_system.name = archetype_system.name + energy_system.demand_types = _hub_demand_types + energy_system.configuration_schema = archetype_system.configuration_schema + energy_system.generation_systems = self._create_generation_systems(archetype_system) + if energy_system.distribution_systems is not None: + energy_system.distribution_systems = self._create_distribution_systems(archetype_system) + building_systems.append(energy_system) + + _generic_energy_systems[archetype.name] = building_systems + + return _generic_energy_systems + + @staticmethod + def _create_generation_systems(archetype_system): + _generation_systems = [] + archetype_generation_systems = archetype_system.generation_systems + if archetype_generation_systems is not None: + for archetype_generation_system in archetype_system.generation_systems: + if archetype_generation_system.system_type == 'Photovoltaic': + _generation_system = PvGenerationSystem() + _type = 'PV system' + _generation_system.system_type = Dictionaries().montreal_generation_system_to_hub_energy_generation_system[_type] + _fuel_type = Dictionaries().montreal_custom_fuel_to_hub_fuel[archetype_generation_system.fuel_type] + _generation_system.fuel_type = _fuel_type + _generation_system.electricity_efficiency = archetype_generation_system.electricity_efficiency + _generic_storage_system = None + if archetype_generation_system.energy_storage_systems is not None: + _generic_storage_system = ElectricalStorageSystem() + _generic_storage_system.type_energy_stored = 'electrical' + _generation_system.energy_storage_systems = [_generic_storage_system] + else: + _generation_system = NonPvGenerationSystem() + _type = archetype_generation_system.system_type + _generation_system.system_type = Dictionaries().montreal_generation_system_to_hub_energy_generation_system[_type] + _fuel_type = Dictionaries().north_america_custom_fuel_to_hub_fuel[archetype_generation_system.fuel_type] + _generation_system.fuel_type = _fuel_type + _generation_system.source_types = archetype_generation_system.source_medium + _generation_system.heat_efficiency = archetype_generation_system.heat_efficiency + _generation_system.cooling_efficiency = archetype_generation_system.cooling_efficiency + _generation_system.electricity_efficiency = archetype_generation_system.electricity_efficiency + _generic_storage_system = None + if archetype_generation_system.energy_storage_systems is not None: + _storage_systems = [] + for storage_system in archetype_generation_system.energy_storage_systems: + if storage_system.type_energy_stored == 'electrical': + _generic_storage_system = ElectricalStorageSystem() + _generic_storage_system.type_energy_stored = 'electrical' + else: + _generic_storage_system = ThermalStorageSystem() + _generic_storage_system.type_energy_stored = 'thermal' + _storage_systems.append(_generic_storage_system) + _generation_system.energy_storage_systems = [_storage_systems] + if archetype_generation_system.dual_supply_capability: + _generation_system.dual_supply_capability = True + _generation_systems.append(_generation_system) + return _generation_systems + + @staticmethod + def _create_distribution_systems(archetype_system): + _distribution_systems = [] + archetype_distribution_systems = archetype_system.distribution_systems + if archetype_distribution_systems is not None: + for archetype_distribution_system in archetype_system.distribution_systems: + _distribution_system = DistributionSystem() + _distribution_system.type = archetype_distribution_system.type + _distribution_system.distribution_consumption_fix_flow = \ + archetype_distribution_system.distribution_consumption_fix_flow + _distribution_system.distribution_consumption_variable_flow = \ + archetype_distribution_system.distribution_consumption_variable_flow + _distribution_system.heat_losses = archetype_distribution_system.heat_losses + _emission_system = None + if archetype_distribution_system.emission_systems is not None: + _emission_system = EmissionSystem() + _distribution_system.emission_systems = [_emission_system] + _distribution_systems.append(_distribution_system) + return _distribution_systems + + @staticmethod + def _assign_energy_systems_to_buildings(city): + for building in city.buildings: + _building_energy_systems = [] + energy_systems_cluster_name = building.energy_systems_archetype_name + if str(energy_systems_cluster_name) == 'nan': + break + _generic_building_energy_systems = city.generic_energy_systems[energy_systems_cluster_name] + for _generic_building_energy_system in _generic_building_energy_systems: + _building_energy_systems.append(copy.deepcopy(_generic_building_energy_system)) + + building.energy_systems = _building_energy_systems diff --git a/hub/imports/energy_systems/north_america_custom_energy_system_parameters.py b/hub/imports/energy_systems/north_america_custom_energy_system_parameters.py index dd3160ad..52297d26 100644 --- a/hub/imports/energy_systems/north_america_custom_energy_system_parameters.py +++ b/hub/imports/energy_systems/north_america_custom_energy_system_parameters.py @@ -123,7 +123,9 @@ class NorthAmericaCustomEnergySystemParameters: _generic_storage_system.layers = storage_system.layers _generic_storage_system.maximum_operating_temperature = storage_system.maximum_operating_temperature _storage_systems.append(_generic_storage_system) - _generation_system.energy_storage_systems = _storage_systems + _generation_system.energy_storage_systems = [_storage_systems] + if archetype_generation_system.dual_supply_capability: + _generation_system.dual_supply_capability = True _generation_systems.append(_generation_system) return _generation_systems diff --git a/hub/imports/energy_systems_factory.py b/hub/imports/energy_systems_factory.py index 3c4bccef..5a9344b8 100644 --- a/hub/imports/energy_systems_factory.py +++ b/hub/imports/energy_systems_factory.py @@ -10,7 +10,7 @@ from pathlib import Path from hub.helpers.utils import validate_import_export_type from hub.imports.energy_systems.montreal_custom_energy_system_parameters import MontrealCustomEnergySystemParameters from hub.imports.energy_systems.north_america_custom_energy_system_parameters import NorthAmericaCustomEnergySystemParameters - +from hub.imports.energy_systems.montreal_future_energy_systems_parameters import MontrealFutureEnergySystemParameters class EnergySystemsFactory: """ @@ -43,6 +43,15 @@ class EnergySystemsFactory: for building in self._city.buildings: building.level_of_detail.energy_systems = 2 + def _montreal_future(self): + """ + Enrich the city by using north america custom energy systems catalog information + """ + MontrealFutureEnergySystemParameters(self._city).enrich_buildings() + self._city.level_of_detail.energy_systems = 2 + for building in self._city.buildings: + building.level_of_detail.energy_systems = 2 + def enrich(self): """ Enrich the city given to the class using the class given handler diff --git a/hub/imports/geometry/__pycache__/__init__.cpython-39.pyc b/hub/imports/geometry/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..d0a2111d Binary files /dev/null and b/hub/imports/geometry/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/imports/geometry/__pycache__/citygml.cpython-39.pyc b/hub/imports/geometry/__pycache__/citygml.cpython-39.pyc new file mode 100644 index 00000000..027b10be Binary files /dev/null and b/hub/imports/geometry/__pycache__/citygml.cpython-39.pyc differ diff --git a/hub/imports/geometry/__pycache__/geojson.cpython-39.pyc b/hub/imports/geometry/__pycache__/geojson.cpython-39.pyc new file mode 100644 index 00000000..8010f6fa Binary files /dev/null and b/hub/imports/geometry/__pycache__/geojson.cpython-39.pyc differ diff --git a/hub/imports/geometry/__pycache__/obj.cpython-39.pyc b/hub/imports/geometry/__pycache__/obj.cpython-39.pyc new file mode 100644 index 00000000..39ef871a Binary files /dev/null and b/hub/imports/geometry/__pycache__/obj.cpython-39.pyc differ diff --git a/hub/imports/geometry/citygml_classes/__pycache__/__init__.cpython-39.pyc b/hub/imports/geometry/citygml_classes/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..e0369454 Binary files /dev/null and b/hub/imports/geometry/citygml_classes/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/imports/geometry/citygml_classes/__pycache__/citygml_base.cpython-39.pyc b/hub/imports/geometry/citygml_classes/__pycache__/citygml_base.cpython-39.pyc new file mode 100644 index 00000000..2d0cf012 Binary files /dev/null and b/hub/imports/geometry/citygml_classes/__pycache__/citygml_base.cpython-39.pyc differ diff --git a/hub/imports/geometry/citygml_classes/__pycache__/citygml_lod1.cpython-39.pyc b/hub/imports/geometry/citygml_classes/__pycache__/citygml_lod1.cpython-39.pyc new file mode 100644 index 00000000..3236c7a9 Binary files /dev/null and b/hub/imports/geometry/citygml_classes/__pycache__/citygml_lod1.cpython-39.pyc differ diff --git a/hub/imports/geometry/citygml_classes/__pycache__/citygml_lod2.cpython-39.pyc b/hub/imports/geometry/citygml_classes/__pycache__/citygml_lod2.cpython-39.pyc new file mode 100644 index 00000000..1d503b9c Binary files /dev/null and b/hub/imports/geometry/citygml_classes/__pycache__/citygml_lod2.cpython-39.pyc differ diff --git a/hub/imports/geometry/helpers/__pycache__/__init__.cpython-39.pyc b/hub/imports/geometry/helpers/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..8db72b36 Binary files /dev/null and b/hub/imports/geometry/helpers/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/imports/geometry/helpers/__pycache__/geometry_helper.cpython-39.pyc b/hub/imports/geometry/helpers/__pycache__/geometry_helper.cpython-39.pyc new file mode 100644 index 00000000..f377d717 Binary files /dev/null and b/hub/imports/geometry/helpers/__pycache__/geometry_helper.cpython-39.pyc differ diff --git a/hub/imports/results/__pycache__/__init__.cpython-39.pyc b/hub/imports/results/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..b836a723 Binary files /dev/null and b/hub/imports/results/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/imports/results/__pycache__/energy_plus.cpython-39.pyc b/hub/imports/results/__pycache__/energy_plus.cpython-39.pyc new file mode 100644 index 00000000..a6322ff3 Binary files /dev/null and b/hub/imports/results/__pycache__/energy_plus.cpython-39.pyc differ diff --git a/hub/imports/results/__pycache__/energy_plus_single_building.cpython-39.pyc b/hub/imports/results/__pycache__/energy_plus_single_building.cpython-39.pyc new file mode 100644 index 00000000..afb0019d Binary files /dev/null and b/hub/imports/results/__pycache__/energy_plus_single_building.cpython-39.pyc differ diff --git a/hub/imports/results/__pycache__/energy_plus_workflow.cpython-39.pyc b/hub/imports/results/__pycache__/energy_plus_workflow.cpython-39.pyc new file mode 100644 index 00000000..ded3637a Binary files /dev/null and b/hub/imports/results/__pycache__/energy_plus_workflow.cpython-39.pyc differ diff --git a/hub/imports/results/__pycache__/ep_multiple_buildings.cpython-39.pyc b/hub/imports/results/__pycache__/ep_multiple_buildings.cpython-39.pyc new file mode 100644 index 00000000..f39e2667 Binary files /dev/null and b/hub/imports/results/__pycache__/ep_multiple_buildings.cpython-39.pyc differ diff --git a/hub/imports/results/__pycache__/insel_monthly_energry_balance.cpython-39.pyc b/hub/imports/results/__pycache__/insel_monthly_energry_balance.cpython-39.pyc new file mode 100644 index 00000000..790ad3be Binary files /dev/null and b/hub/imports/results/__pycache__/insel_monthly_energry_balance.cpython-39.pyc differ diff --git a/hub/imports/results/__pycache__/simplified_radiosity_algorithm.cpython-39.pyc b/hub/imports/results/__pycache__/simplified_radiosity_algorithm.cpython-39.pyc new file mode 100644 index 00000000..85680212 Binary files /dev/null and b/hub/imports/results/__pycache__/simplified_radiosity_algorithm.cpython-39.pyc differ diff --git a/hub/imports/usage/__pycache__/__init__.cpython-39.pyc b/hub/imports/usage/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..14616582 Binary files /dev/null and b/hub/imports/usage/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/imports/usage/__pycache__/comnet_usage_parameters.cpython-39.pyc b/hub/imports/usage/__pycache__/comnet_usage_parameters.cpython-39.pyc new file mode 100644 index 00000000..ca7436f3 Binary files /dev/null and b/hub/imports/usage/__pycache__/comnet_usage_parameters.cpython-39.pyc differ diff --git a/hub/imports/usage/__pycache__/eilat_usage_parameters.cpython-39.pyc b/hub/imports/usage/__pycache__/eilat_usage_parameters.cpython-39.pyc new file mode 100644 index 00000000..94b8ee6c Binary files /dev/null and b/hub/imports/usage/__pycache__/eilat_usage_parameters.cpython-39.pyc differ diff --git a/hub/imports/usage/__pycache__/nrcan_usage_parameters.cpython-39.pyc b/hub/imports/usage/__pycache__/nrcan_usage_parameters.cpython-39.pyc new file mode 100644 index 00000000..efa05c03 Binary files /dev/null and b/hub/imports/usage/__pycache__/nrcan_usage_parameters.cpython-39.pyc differ diff --git a/hub/imports/weather/__pycache__/__init__.cpython-39.pyc b/hub/imports/weather/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..21a79cd8 Binary files /dev/null and b/hub/imports/weather/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/imports/weather/__pycache__/epw_weather_parameters.cpython-39.pyc b/hub/imports/weather/__pycache__/epw_weather_parameters.cpython-39.pyc new file mode 100644 index 00000000..dbbb01ba Binary files /dev/null and b/hub/imports/weather/__pycache__/epw_weather_parameters.cpython-39.pyc differ diff --git a/hub/imports/weather/helpers/__pycache__/__init__.cpython-39.pyc b/hub/imports/weather/helpers/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 00000000..2aea3372 Binary files /dev/null and b/hub/imports/weather/helpers/__pycache__/__init__.cpython-39.pyc differ diff --git a/hub/imports/weather/helpers/__pycache__/weather.cpython-39.pyc b/hub/imports/weather/helpers/__pycache__/weather.cpython-39.pyc new file mode 100644 index 00000000..989715d0 Binary files /dev/null and b/hub/imports/weather/helpers/__pycache__/weather.cpython-39.pyc differ diff --git a/tests/__pycache__/test_results_import.cpython-39.pyc b/tests/__pycache__/test_results_import.cpython-39.pyc new file mode 100644 index 00000000..72ee752b Binary files /dev/null and b/tests/__pycache__/test_results_import.cpython-39.pyc differ diff --git a/tests/__pycache__/test_systems_catalog.cpython-39.pyc b/tests/__pycache__/test_systems_catalog.cpython-39.pyc new file mode 100644 index 00000000..26324a1a Binary files /dev/null and b/tests/__pycache__/test_systems_catalog.cpython-39.pyc differ diff --git a/tests/__pycache__/test_systems_factory.cpython-39.pyc b/tests/__pycache__/test_systems_factory.cpython-39.pyc new file mode 100644 index 00000000..455598d5 Binary files /dev/null and b/tests/__pycache__/test_systems_factory.cpython-39.pyc differ diff --git a/tests/test_systems_catalog.py b/tests/test_systems_catalog.py index ae8adb97..9d44500a 100644 --- a/tests/test_systems_catalog.py +++ b/tests/test_systems_catalog.py @@ -56,3 +56,25 @@ class TestSystemsCatalog(TestCase): with self.assertRaises(IndexError): catalog.get_entry('unknown') print(catalog.entries()) + + def test_montreal_future_catalog(self): + catalog = EnergySystemsCatalogFactory('montreal_future').catalog + + catalog_categories = catalog.names() + archetypes = catalog.names('archetypes') + self.assertEqual(12, len(archetypes['archetypes'])) + systems = catalog.names('systems') + self.assertEqual(7, len(systems['systems'])) + generation_equipments = catalog.names('generation_equipments') + self.assertEqual(26, len(generation_equipments['generation_equipments'])) + with self.assertRaises(ValueError): + catalog.names('unknown') + + # retrieving all the entries should not raise any exceptions + for category in catalog_categories: + for value in catalog_categories[category]: + catalog.get_entry(value) + + with self.assertRaises(IndexError): + catalog.get_entry('unknown') + print(catalog.entries()) diff --git a/tests/test_systems_factory.py b/tests/test_systems_factory.py index 2f471945..867a80fc 100644 --- a/tests/test_systems_factory.py +++ b/tests/test_systems_factory.py @@ -141,4 +141,43 @@ class TestSystemsFactory(TestCase): self.assertLess(0, building.heating_consumption[cte.YEAR][0]) self.assertEqual(0, building.cooling_consumption[cte.YEAR][0]) self.assertLess(0, building.domestic_hot_water_consumption[cte.YEAR][0]) - self.assertLess(0, building.onsite_electrical_production[cte.YEAR][0]) \ No newline at end of file + self.assertLess(0, building.onsite_electrical_production[cte.YEAR][0]) + print('test') + + def test_montreal_future_system_results(self): + """ + Enrich the city with the construction information and verify it + """ + ConstructionFactory('nrcan', self._city).enrich() + UsageFactory('nrcan', self._city).enrich() + WeatherFactory('epw', self._city).enrich() + ExportsFactory('sra', self._city, self._output_path).export() + sra_path = (self._output_path / f'{self._city.name}_sra.xml').resolve() + subprocess.run(['sra', str(sra_path)]) + ResultFactory('sra', self._city, self._output_path).enrich() + EnergyBuildingsExportsFactory('insel_monthly_energy_balance', self._city, self._output_path).export() + for building in self._city.buildings: + insel_path = (self._output_path / f'{building.name}.insel') + subprocess.run(['insel', str(insel_path)]) + ResultFactory('insel_monthly_energy_balance', self._city, self._output_path).enrich() + + for building in self._city.buildings: + building.energy_systems_archetype_name = 'PV+ASHP+GasBoiler+TES' + EnergySystemsFactory('montreal_future', self._city).enrich() + # Need to assign energy systems to buildings: + for building in self._city.buildings: + _building_energy_systems = [] + for energy_system in building.energy_systems: + if cte.HEATING in energy_system.demand_types: + _generation_system = cast(NonPvGenerationSystem, energy_system.generation_systems[0]) + _generation_system.heat_power = building.heating_peak_load[cte.YEAR][0] + if cte.COOLING in energy_system.demand_types: + _generation_system = cast(NonPvGenerationSystem, energy_system.generation_systems[0]) + _generation_system.cooling_power = building.cooling_peak_load[cte.YEAR][0] + + for building in self._city.buildings: + self.assertLess(0, building.heating_consumption[cte.YEAR][0]) + self.assertLess(0, building.cooling_consumption[cte.YEAR][0]) + self.assertLess(0, building.domestic_hot_water_consumption[cte.YEAR][0]) + self.assertLess(0, building.onsite_electrical_production[cte.YEAR][0]) + print('test') \ No newline at end of file