forked from s_ranjbar/city_retrofit
added generic energy system classes to cdm
This commit is contained in:
parent
42c39e771c
commit
0a96b83c22
|
@ -5,6 +5,8 @@ Copyright © 2023 Concordia CERC group
|
||||||
Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
from hub.catalog_factories.data_models.energy_systems.generation_system import GenerationSystem
|
from hub.catalog_factories.data_models.energy_systems.generation_system import GenerationSystem
|
||||||
from hub.catalog_factories.data_models.energy_systems.distribution_system import DistributionSystem
|
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.emission_system import EmissionSystem
|
||||||
|
@ -59,7 +61,7 @@ class Archetype:
|
||||||
return self._generation_system
|
return self._generation_system
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def distribution_system(self) -> DistributionSystem:
|
def distribution_system(self) -> Union[None, DistributionSystem]:
|
||||||
"""
|
"""
|
||||||
Get distribution system
|
Get distribution system
|
||||||
:return: DistributionSystem
|
:return: DistributionSystem
|
||||||
|
@ -67,7 +69,7 @@ class Archetype:
|
||||||
return self._distribution_system
|
return self._distribution_system
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def emission_system(self) -> EmissionSystem:
|
def emission_system(self) -> Union[None, EmissionSystem]:
|
||||||
"""
|
"""
|
||||||
Get emission system
|
Get emission system
|
||||||
:return: EmissionSystem
|
:return: EmissionSystem
|
||||||
|
|
|
@ -34,7 +34,7 @@ class DistributionSystem:
|
||||||
@property
|
@property
|
||||||
def distribution_consumption(self):
|
def distribution_consumption(self):
|
||||||
"""
|
"""
|
||||||
Get distribution_consumption (pump of fan) in % over energy produced
|
Get distribution_consumption (pump of fan) in ratio over energy produced
|
||||||
:return: float
|
:return: float
|
||||||
"""
|
"""
|
||||||
return self._distribution_consumption
|
return self._distribution_consumption
|
||||||
|
@ -42,7 +42,7 @@ class DistributionSystem:
|
||||||
@property
|
@property
|
||||||
def heat_losses(self):
|
def heat_losses(self):
|
||||||
"""
|
"""
|
||||||
Get heat_losses in % over energy produced
|
Get heat_losses in ratio over energy produced
|
||||||
:return: float
|
:return: float
|
||||||
"""
|
"""
|
||||||
return self._heat_losses
|
return self._heat_losses
|
||||||
|
|
|
@ -8,7 +8,6 @@ Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
||||||
|
|
||||||
class EmissionSystem:
|
class EmissionSystem:
|
||||||
def __init__(self, system_type, parasitic_energy_consumption):
|
def __init__(self, system_type, parasitic_energy_consumption):
|
||||||
|
|
||||||
self._type = system_type
|
self._type = system_type
|
||||||
self._parasitic_energy_consumption = parasitic_energy_consumption
|
self._parasitic_energy_consumption = parasitic_energy_consumption
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
|
|
||||||
class GenerationSystem:
|
class GenerationSystem:
|
||||||
|
@ -96,7 +97,7 @@ class GenerationSystem:
|
||||||
return self._storage_capacity
|
return self._storage_capacity
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def auxiliary_equipment(self) -> GenerationSystem:
|
def auxiliary_equipment(self) -> Union[None, GenerationSystem]:
|
||||||
"""
|
"""
|
||||||
Get auxiliary_equipment
|
Get auxiliary_equipment
|
||||||
:return: GenerationSystem
|
:return: GenerationSystem
|
||||||
|
|
|
@ -16,6 +16,7 @@ from hub.city_model_structure.city_object import CityObject
|
||||||
from hub.city_model_structure.building_demand.household import Household
|
from hub.city_model_structure.building_demand.household import Household
|
||||||
from hub.city_model_structure.building_demand.internal_zone import InternalZone
|
from hub.city_model_structure.building_demand.internal_zone import InternalZone
|
||||||
from hub.city_model_structure.attributes.polyhedron import Polyhedron
|
from hub.city_model_structure.attributes.polyhedron import Polyhedron
|
||||||
|
from hub.city_model_structure.energy_systems.generic_energy_system import GenericEnergySystem
|
||||||
|
|
||||||
|
|
||||||
class Building(CityObject):
|
class Building(CityObject):
|
||||||
|
@ -45,6 +46,7 @@ class Building(CityObject):
|
||||||
self._appliances_electrical_demand = dict()
|
self._appliances_electrical_demand = dict()
|
||||||
self._domestic_hot_water_heat_demand = dict()
|
self._domestic_hot_water_heat_demand = dict()
|
||||||
self._eave_height = None
|
self._eave_height = None
|
||||||
|
self._energy_systems = None
|
||||||
self._grounds = []
|
self._grounds = []
|
||||||
self._roofs = []
|
self._roofs = []
|
||||||
self._walls = []
|
self._walls = []
|
||||||
|
@ -190,14 +192,6 @@ class Building(CityObject):
|
||||||
if value is not None:
|
if value is not None:
|
||||||
self._basement_heated = int(value)
|
self._basement_heated = int(value)
|
||||||
|
|
||||||
@property
|
|
||||||
def heated_volume(self):
|
|
||||||
"""
|
|
||||||
Raises not implemented error
|
|
||||||
"""
|
|
||||||
# todo: this need to be calculated based on the basement and attic heated values
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def year_of_construction(self):
|
def year_of_construction(self):
|
||||||
"""
|
"""
|
||||||
|
@ -458,3 +452,19 @@ class Building(CityObject):
|
||||||
for usage in internal_zone.usages:
|
for usage in internal_zone.usages:
|
||||||
_usage = f'{_usage}{usage.name}_{usage.percentage} '
|
_usage = f'{_usage}{usage.name}_{usage.percentage} '
|
||||||
return _usage.rstrip()
|
return _usage.rstrip()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def energy_systems(self) -> Union[None, List[GenericEnergySystem]]:
|
||||||
|
"""
|
||||||
|
Get list of energy systems installed to cover the building demands
|
||||||
|
:return: [GenericEnergySystem]
|
||||||
|
"""
|
||||||
|
return self._energy_systems
|
||||||
|
|
||||||
|
@energy_systems.setter
|
||||||
|
def energy_systems(self, value):
|
||||||
|
"""
|
||||||
|
Set list of energy systems installed to cover the building demands
|
||||||
|
:param value: [GenericEnergySystem]
|
||||||
|
"""
|
||||||
|
self._energy_systems = value
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
"""
|
||||||
|
Generic energy distribution system definition
|
||||||
|
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||||
|
Copyright © 2023 Concordia CERC group
|
||||||
|
Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class GenericDistributionSystem:
|
||||||
|
"""
|
||||||
|
GenericDistributionSystem class
|
||||||
|
"""
|
||||||
|
def __init__(self):
|
||||||
|
self._type = None
|
||||||
|
self._supply_temperature = None
|
||||||
|
self._distribution_consumption = None
|
||||||
|
self._heat_losses = None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def type(self):
|
||||||
|
"""
|
||||||
|
Get type from [air, water, refrigerant]
|
||||||
|
:return: string
|
||||||
|
"""
|
||||||
|
return self._type
|
||||||
|
|
||||||
|
@type.setter
|
||||||
|
def type(self, value):
|
||||||
|
"""
|
||||||
|
Set type from [air, water, refrigerant]
|
||||||
|
:param value: string
|
||||||
|
"""
|
||||||
|
self._type = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def supply_temperature(self):
|
||||||
|
"""
|
||||||
|
Get supply_temperature in degree Celsius
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._supply_temperature
|
||||||
|
|
||||||
|
@supply_temperature.setter
|
||||||
|
def supply_temperature(self, value):
|
||||||
|
"""
|
||||||
|
Set supply_temperature in degree Celsius
|
||||||
|
:param value: float
|
||||||
|
"""
|
||||||
|
self._supply_temperature = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def distribution_consumption(self):
|
||||||
|
"""
|
||||||
|
Get distribution_consumption (pump of fan) in ratio over energy produced
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._distribution_consumption
|
||||||
|
|
||||||
|
@distribution_consumption.setter
|
||||||
|
def distribution_consumption(self, value):
|
||||||
|
"""
|
||||||
|
Set distribution_consumption (pump of fan) in ratio over energy produced
|
||||||
|
:param value: float
|
||||||
|
"""
|
||||||
|
self._distribution_consumption = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def heat_losses(self):
|
||||||
|
"""
|
||||||
|
Get heat_losses in ratio over energy produced
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._heat_losses
|
||||||
|
|
||||||
|
@heat_losses.setter
|
||||||
|
def heat_losses(self, value):
|
||||||
|
"""
|
||||||
|
Set heat_losses in ratio over energy produced
|
||||||
|
:param value: float
|
||||||
|
"""
|
||||||
|
self._heat_losses = value
|
|
@ -0,0 +1,30 @@
|
||||||
|
"""
|
||||||
|
Generic energy emission system definition
|
||||||
|
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||||
|
Copyright © 2023 Concordia CERC group
|
||||||
|
Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class GenericEmissionSystem:
|
||||||
|
"""
|
||||||
|
GenericEmissionSystem class
|
||||||
|
"""
|
||||||
|
def __init__(self):
|
||||||
|
self._parasitic_energy_consumption = None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def parasitic_energy_consumption(self):
|
||||||
|
"""
|
||||||
|
Get parasitic_energy_consumption in ratio (W/W)
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._parasitic_energy_consumption
|
||||||
|
|
||||||
|
@parasitic_energy_consumption.setter
|
||||||
|
def parasitic_energy_consumption(self, value):
|
||||||
|
"""
|
||||||
|
Set parasitic_energy_consumption in ratio (W/W)
|
||||||
|
:param value: float
|
||||||
|
"""
|
||||||
|
self._parasitic_energy_consumption = value
|
|
@ -0,0 +1,87 @@
|
||||||
|
"""
|
||||||
|
Generic energy system definition
|
||||||
|
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||||
|
Copyright © 2023 Concordia CERC group
|
||||||
|
Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
||||||
|
"""
|
||||||
|
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
|
from hub.city_model_structure.energy_systems.generic_generation_system import GenericGenerationSystem
|
||||||
|
from hub.city_model_structure.energy_systems.generic_distribution_system import GenericDistributionSystem
|
||||||
|
from hub.city_model_structure.energy_systems.generic_emission_system import GenericEmissionSystem
|
||||||
|
|
||||||
|
|
||||||
|
class GenericEnergySystem:
|
||||||
|
"""
|
||||||
|
GenericEnergySystem class
|
||||||
|
"""
|
||||||
|
def __init__(self):
|
||||||
|
self._demand_types = None
|
||||||
|
self._generation_system = None
|
||||||
|
self._distribution_system = None
|
||||||
|
self._emission_system = None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def demand_types(self):
|
||||||
|
"""
|
||||||
|
Get demand able to cover from [heating, cooling, domestic_hot_water, electricity]
|
||||||
|
:return: [string]
|
||||||
|
"""
|
||||||
|
return self._demand_types
|
||||||
|
|
||||||
|
@demand_types.setter
|
||||||
|
def demand_types(self, value):
|
||||||
|
"""
|
||||||
|
Set demand able to cover from [heating, cooling, domestic_hot_water, electricity]
|
||||||
|
:param value: [string]
|
||||||
|
"""
|
||||||
|
self._demand_types = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def generation_system(self) -> GenericGenerationSystem:
|
||||||
|
"""
|
||||||
|
Get generation system
|
||||||
|
:return: GenerationSystem
|
||||||
|
"""
|
||||||
|
return self._generation_system
|
||||||
|
|
||||||
|
@generation_system.setter
|
||||||
|
def generation_system(self, value):
|
||||||
|
"""
|
||||||
|
Set generation system
|
||||||
|
:param value: GenerationSystem
|
||||||
|
"""
|
||||||
|
self._generation_system = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def distribution_system(self) -> Union[None, GenericDistributionSystem]:
|
||||||
|
"""
|
||||||
|
Get distribution system
|
||||||
|
:return: DistributionSystem
|
||||||
|
"""
|
||||||
|
return self._distribution_system
|
||||||
|
|
||||||
|
@distribution_system.setter
|
||||||
|
def distribution_system(self, value):
|
||||||
|
"""
|
||||||
|
Set distribution system
|
||||||
|
:param value: DistributionSystem
|
||||||
|
"""
|
||||||
|
self._distribution_system = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def emission_system(self) -> Union[None, GenericEmissionSystem]:
|
||||||
|
"""
|
||||||
|
Get emission system
|
||||||
|
:return: EmissionSystem
|
||||||
|
"""
|
||||||
|
return self._emission_system
|
||||||
|
|
||||||
|
@emission_system.setter
|
||||||
|
def emission_system(self, value):
|
||||||
|
"""
|
||||||
|
Set emission system
|
||||||
|
:param value: EmissionSystem
|
||||||
|
"""
|
||||||
|
self._emission_system = value
|
|
@ -0,0 +1,220 @@
|
||||||
|
"""
|
||||||
|
Generic energy generation system definition
|
||||||
|
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||||
|
Copyright © 2023 Concordia CERC group
|
||||||
|
Project Coder Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
from typing import Union
|
||||||
|
|
||||||
|
|
||||||
|
class GenericGenerationSystem:
|
||||||
|
"""
|
||||||
|
GenericGenerationSystem class
|
||||||
|
"""
|
||||||
|
def __init__(self):
|
||||||
|
self._fuel_type = None
|
||||||
|
self._heat_power = None
|
||||||
|
self._cooling_power = None
|
||||||
|
self._electricity_power = None
|
||||||
|
self._source_types = None
|
||||||
|
self._heat_efficiency = None
|
||||||
|
self._cooling_efficiency = None
|
||||||
|
self._electricity_efficiency = None
|
||||||
|
self._source_temperature = None
|
||||||
|
self._source_mass_flow = None
|
||||||
|
self._storage_capacity = None
|
||||||
|
self._auxiliary_equipment = None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def fuel_type(self):
|
||||||
|
"""
|
||||||
|
Get fuel_type from [renewable, gas, diesel, electricity, wood, coal]
|
||||||
|
:return: string
|
||||||
|
"""
|
||||||
|
return self._fuel_type
|
||||||
|
|
||||||
|
@fuel_type.setter
|
||||||
|
def fuel_type(self, value):
|
||||||
|
"""
|
||||||
|
Set fuel_type from [renewable, gas, diesel, electricity, wood, coal]
|
||||||
|
:param value: string
|
||||||
|
"""
|
||||||
|
self._fuel_type = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def source_types(self):
|
||||||
|
"""
|
||||||
|
Get source_type from [air, water, geothermal, district_heating, grid, on_site_electricity]
|
||||||
|
:return: [string]
|
||||||
|
"""
|
||||||
|
return self._source_types
|
||||||
|
|
||||||
|
@source_types.setter
|
||||||
|
def source_types(self, value):
|
||||||
|
"""
|
||||||
|
Set source_type from [air, water, geothermal, district_heating, grid, on_site_electricity]
|
||||||
|
:param value: [string]
|
||||||
|
"""
|
||||||
|
self._source_types = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def heat_power(self):
|
||||||
|
"""
|
||||||
|
Get heat_power in W
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._heat_power
|
||||||
|
|
||||||
|
@heat_power.setter
|
||||||
|
def heat_power(self, value):
|
||||||
|
"""
|
||||||
|
Set heat_power in W
|
||||||
|
:param value: float
|
||||||
|
"""
|
||||||
|
self._heat_power = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def cooling_power(self):
|
||||||
|
"""
|
||||||
|
Get cooling_power in W
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._cooling_power
|
||||||
|
|
||||||
|
@cooling_power.setter
|
||||||
|
def cooling_power(self, value):
|
||||||
|
"""
|
||||||
|
Set cooling_power in W
|
||||||
|
:param value: float
|
||||||
|
"""
|
||||||
|
self._cooling_power = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def electricity_power(self):
|
||||||
|
"""
|
||||||
|
Get electricity_power in W
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._electricity_power
|
||||||
|
|
||||||
|
@electricity_power.setter
|
||||||
|
def electricity_power(self, value):
|
||||||
|
"""
|
||||||
|
Set electricity_power in W
|
||||||
|
:param value: float
|
||||||
|
"""
|
||||||
|
self._electricity_power = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def heat_efficiency(self):
|
||||||
|
"""
|
||||||
|
Get heat_efficiency
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._heat_efficiency
|
||||||
|
|
||||||
|
@heat_efficiency.setter
|
||||||
|
def heat_efficiency(self, value):
|
||||||
|
"""
|
||||||
|
Set heat_efficiency
|
||||||
|
:param value: float
|
||||||
|
"""
|
||||||
|
self._heat_efficiency = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def cooling_efficiency(self):
|
||||||
|
"""
|
||||||
|
Get cooling_efficiency
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._cooling_efficiency
|
||||||
|
|
||||||
|
@cooling_efficiency.setter
|
||||||
|
def cooling_efficiency(self, value):
|
||||||
|
"""
|
||||||
|
Set cooling_efficiency
|
||||||
|
:param value: float
|
||||||
|
"""
|
||||||
|
self._cooling_efficiency = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def electricity_efficiency(self):
|
||||||
|
"""
|
||||||
|
Get electricity_efficiency
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._electricity_efficiency
|
||||||
|
|
||||||
|
@electricity_efficiency.setter
|
||||||
|
def electricity_efficiency(self, value):
|
||||||
|
"""
|
||||||
|
Set electricity_efficiency
|
||||||
|
:param value: float
|
||||||
|
"""
|
||||||
|
self._electricity_efficiency = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def source_temperature(self):
|
||||||
|
"""
|
||||||
|
Get source_temperature in degree Celsius
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._source_temperature
|
||||||
|
|
||||||
|
@source_temperature.setter
|
||||||
|
def source_temperature(self, value):
|
||||||
|
"""
|
||||||
|
Set source_temperature in degree Celsius
|
||||||
|
:param value: float
|
||||||
|
"""
|
||||||
|
self._source_temperature = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def source_mass_flow(self):
|
||||||
|
"""
|
||||||
|
Get source_mass_flow in kg/s
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._source_mass_flow
|
||||||
|
|
||||||
|
@source_mass_flow.setter
|
||||||
|
def source_mass_flow(self, value):
|
||||||
|
"""
|
||||||
|
Set source_mass_flow in kg/s
|
||||||
|
:param value: float
|
||||||
|
"""
|
||||||
|
self._source_mass_flow = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def storage_capacity(self):
|
||||||
|
"""
|
||||||
|
Get storage_capacity in J
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._storage_capacity
|
||||||
|
|
||||||
|
@storage_capacity.setter
|
||||||
|
def storage_capacity(self, value):
|
||||||
|
"""
|
||||||
|
Set storage_capacity in J
|
||||||
|
:param value: float
|
||||||
|
"""
|
||||||
|
self._storage_capacity = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def auxiliary_equipment(self) -> Union[None, GenericGenerationSystem]:
|
||||||
|
"""
|
||||||
|
Get auxiliary_equipment
|
||||||
|
:return: GenerationSystem
|
||||||
|
"""
|
||||||
|
return self._auxiliary_equipment
|
||||||
|
|
||||||
|
@auxiliary_equipment.setter
|
||||||
|
def auxiliary_equipment(self, value):
|
||||||
|
"""
|
||||||
|
Set auxiliary_equipment
|
||||||
|
:param value: GenerationSystem
|
||||||
|
"""
|
||||||
|
self._auxiliary_equipment = value
|
Loading…
Reference in New Issue
Block a user