Compare commits
47 Commits
main
...
feature/li
Author | SHA1 | Date | |
---|---|---|---|
a9262b42e7 | |||
|
8e2e46e866 | ||
|
625fa62930 | ||
|
59776e5a6e | ||
|
9cbc2bc634 | ||
|
317a20917f | ||
|
38c468b29b | ||
|
b50724690f | ||
|
f142332cb9 | ||
|
3a1f418577 | ||
|
79c27244e6 | ||
|
7c1028897a | ||
|
30bdd7bdd2 | ||
|
1934461364 | ||
|
017a8ce6a7 | ||
|
0b3518f5a3 | ||
|
dc4a82ce8a | ||
|
8b4f89bbd6 | ||
|
b07b1c4bb7 | ||
|
ed4ee36dbf | ||
|
b888e4a1f2 | ||
|
8a92731359 | ||
|
5d9aaa63ad | ||
|
da8abcce33 | ||
|
0c17fa48b5 | ||
|
4f9e5157a1 | ||
|
a8a493f436 | ||
|
72a6ee9d87 | ||
|
9bc9ff25fc | ||
|
7d19d8ab14 | ||
|
d6677c7fdb | ||
|
98723af190 | ||
|
0c0736bd9f | ||
|
346bbf4bdf | ||
|
455db4c522 | ||
|
7943cd7fda | ||
|
9dd816ceb0 | ||
|
79388dcc91 | ||
|
8f9ea87f49 | ||
|
61e8458a1b | ||
|
6854b35647 | ||
|
d41ce5371e | ||
|
d52c8bf73a | ||
|
4b5e330632 | ||
|
0329c3a9a2 | ||
|
b5d8053deb | ||
|
e474541201 |
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -10,3 +10,8 @@
|
||||||
**/__pycache__/
|
**/__pycache__/
|
||||||
**/.idea/
|
**/.idea/
|
||||||
cerc_hub.egg-info
|
cerc_hub.egg-info
|
||||||
|
|
||||||
|
ali_*.py
|
||||||
|
mreza_*.json
|
||||||
|
*_cap_3.json
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,8 @@ Construction catalog material
|
||||||
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||||
Copyright © 2022 Concordia CERC group
|
Copyright © 2022 Concordia CERC group
|
||||||
Project Coder Guille Gutierrez guillermo.gutierrezmorote@concordia.ca
|
Project Coder Guille Gutierrez guillermo.gutierrezmorote@concordia.ca
|
||||||
|
Code contributors: Alireza Adli alireza.adli@concordia.ca
|
||||||
|
Mohammad Reza Seyedabadi mohammad.seyedabadi@mail.concordia.ca
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,6 +17,13 @@ class Material:
|
||||||
solar_absorptance,
|
solar_absorptance,
|
||||||
thermal_absorptance,
|
thermal_absorptance,
|
||||||
visible_absorptance,
|
visible_absorptance,
|
||||||
|
density_unit,
|
||||||
|
embodied_carbon,
|
||||||
|
embodied_carbon_unit,
|
||||||
|
recycling_ratio,
|
||||||
|
company_recycling_ratio,
|
||||||
|
onsite_recycling_ratio,
|
||||||
|
landfilling_ratio,
|
||||||
no_mass=False,
|
no_mass=False,
|
||||||
thermal_resistance=None,
|
thermal_resistance=None,
|
||||||
conductivity=None,
|
conductivity=None,
|
||||||
|
@ -29,7 +38,14 @@ class Material:
|
||||||
self._thermal_resistance = thermal_resistance
|
self._thermal_resistance = thermal_resistance
|
||||||
self._conductivity = conductivity
|
self._conductivity = conductivity
|
||||||
self._density = density
|
self._density = density
|
||||||
|
self._density_unit = density_unit
|
||||||
self._specific_heat = specific_heat
|
self._specific_heat = specific_heat
|
||||||
|
self._recycling_ratio = recycling_ratio
|
||||||
|
self._onsite_recycling_ratio = onsite_recycling_ratio
|
||||||
|
self._company_recycling_ratio = company_recycling_ratio
|
||||||
|
self._landfilling_ratio = landfilling_ratio
|
||||||
|
self._embodied_carbon = embodied_carbon
|
||||||
|
self._embodied_carbon_unit = embodied_carbon_unit
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def id(self):
|
def id(self):
|
||||||
|
@ -71,6 +87,14 @@ class Material:
|
||||||
"""
|
"""
|
||||||
return self._density
|
return self._density
|
||||||
|
|
||||||
|
@property
|
||||||
|
def density_unit(self):
|
||||||
|
"""
|
||||||
|
Get material density unit in kg/m3
|
||||||
|
:return: str
|
||||||
|
"""
|
||||||
|
return self._density_unit
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def solar_absorptance(self):
|
def solar_absorptance(self):
|
||||||
"""
|
"""
|
||||||
|
@ -111,18 +135,73 @@ class Material:
|
||||||
"""
|
"""
|
||||||
return self._thermal_resistance
|
return self._thermal_resistance
|
||||||
|
|
||||||
|
@property
|
||||||
|
def recycling_ratio(self):
|
||||||
|
"""
|
||||||
|
Get recycling ratio in %
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._recycling_ratio
|
||||||
|
|
||||||
|
@property
|
||||||
|
def onsite_recycling_ratio(self):
|
||||||
|
"""
|
||||||
|
Get onsite recycling ratio in %
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._onsite_recycling_ratio
|
||||||
|
|
||||||
|
@property
|
||||||
|
def company_recycling_ratio(self):
|
||||||
|
"""
|
||||||
|
Get company recycling ratio in %
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._company_recycling_ratio
|
||||||
|
|
||||||
|
@property
|
||||||
|
def landfilling_ratio(self):
|
||||||
|
"""
|
||||||
|
Get landfilling ratio in %
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._landfilling_ratio
|
||||||
|
|
||||||
|
@property
|
||||||
|
def embodied_carbon(self):
|
||||||
|
"""
|
||||||
|
Get embodied carbon in kg
|
||||||
|
:return: float
|
||||||
|
"""
|
||||||
|
return self._embodied_carbon
|
||||||
|
|
||||||
|
@property
|
||||||
|
def embodied_carbon_unit(self):
|
||||||
|
"""
|
||||||
|
Get embodied carbon unit in kg_co2_eq/kg_material
|
||||||
|
:return: str
|
||||||
|
"""
|
||||||
|
return self._embodied_carbon_unit
|
||||||
|
|
||||||
def to_dictionary(self):
|
def to_dictionary(self):
|
||||||
"""Class content to dictionary"""
|
"""Class content to dictionary"""
|
||||||
content = {'Material': {'id': self.id,
|
content = {'Material': {'id': self.id,
|
||||||
'name': self.name,
|
'name': self.name,
|
||||||
'is no-mass': self.no_mass,
|
'is no-mass': self.no_mass,
|
||||||
'density [kg/m3]': self.density,
|
'density [kg/m3]': self.density,
|
||||||
|
'density unit [kg/m3]': self.density_unit,
|
||||||
'specific heat [J/kgK]': self.specific_heat,
|
'specific heat [J/kgK]': self.specific_heat,
|
||||||
'conductivity [W/mK]': self.conductivity,
|
'conductivity [W/mK]': self.conductivity,
|
||||||
'thermal resistance [m2K/W]': self.thermal_resistance,
|
'thermal resistance [m2K/W]': self.thermal_resistance,
|
||||||
'solar absorptance': self.solar_absorptance,
|
'solar absorptance': self.solar_absorptance,
|
||||||
'thermal absorptance': self.thermal_absorptance,
|
'thermal absorptance': self.thermal_absorptance,
|
||||||
'visible absorptance': self.visible_absorptance
|
'visible absorptance': self.visible_absorptance,
|
||||||
|
'recycling ratio': self.recycling_ratio,
|
||||||
|
'onsite recycling ratio': self.onsite_recycling_ratio,
|
||||||
|
'company recycling ratio': self.company_recycling_ratio,
|
||||||
|
'landfilling ratio': self.landfilling_ratio,
|
||||||
|
'embodied carbon': self.embodied_carbon,
|
||||||
|
'embodied carbon unit': self.embodied_carbon_unit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return content
|
return content
|
||||||
|
|
|
@ -0,0 +1,179 @@
|
||||||
|
"""
|
||||||
|
access_nrcan_catalog module
|
||||||
|
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||||
|
Copyright © 2024 Concordia CERC group
|
||||||
|
Project developer: Alireza Adli alireza.adli@mail.concordia.ca
|
||||||
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from hub.helpers.data.hub_function_to_nrcan_construction_function \
|
||||||
|
import HubFunctionToNrcanConstructionFunction
|
||||||
|
|
||||||
|
|
||||||
|
class AccessNrcanCatalog:
|
||||||
|
def __init__(
|
||||||
|
self, path,
|
||||||
|
archetypes='nrcan_archetypes.json',
|
||||||
|
constructions='nrcan_constructions_cap_3.json',
|
||||||
|
materials='nrcan_materials_dictionaries.json',
|
||||||
|
transparent_surfaces='nrcan_transparent_surfaces_dictionaries.json'):
|
||||||
|
"""
|
||||||
|
AccessNrcanCatalog eases accessing the below json files.
|
||||||
|
- It converts year of construction to the period of construction.
|
||||||
|
- It searches a specific material or transparent surface.
|
||||||
|
- The class finds the opaque surface code based on three parameters.
|
||||||
|
:param path: path to the below files
|
||||||
|
:param archetypes: a json file (a list of dictionaries) with building
|
||||||
|
archetypes' data
|
||||||
|
:param constructions: a json file (a list of dictionaries) with
|
||||||
|
building data based on NRCan
|
||||||
|
:param materials: a json file (a dictornaty of
|
||||||
|
dictionares to speed up the search) with construction material info.
|
||||||
|
:param transparent_surfaces: a json file (a dictionary of
|
||||||
|
dictionaries) with windows and skylights data.
|
||||||
|
"""
|
||||||
|
self._path = Path(path)
|
||||||
|
self.archetypes = archetypes
|
||||||
|
self.constructions = constructions
|
||||||
|
self.materials = materials
|
||||||
|
self.transparent_surfaces = transparent_surfaces
|
||||||
|
self.hub_to_nrcan_dictionary = \
|
||||||
|
HubFunctionToNrcanConstructionFunction().dictionary
|
||||||
|
|
||||||
|
@property
|
||||||
|
def archetypes(self):
|
||||||
|
return self._archetypes
|
||||||
|
|
||||||
|
@archetypes.setter
|
||||||
|
def archetypes(self, archetypes):
|
||||||
|
archetypes_path = (self._path / archetypes).resolve()
|
||||||
|
self._archetypes = json.loads(archetypes_path.read_text())
|
||||||
|
|
||||||
|
@property
|
||||||
|
def constructions(self):
|
||||||
|
return self._constructions
|
||||||
|
|
||||||
|
@constructions.setter
|
||||||
|
def constructions(self, constructions):
|
||||||
|
constructions_path = (self._path / constructions).resolve()
|
||||||
|
self._constructions = json.loads(constructions_path.read_text())
|
||||||
|
|
||||||
|
@property
|
||||||
|
def materials(self):
|
||||||
|
return self._materials
|
||||||
|
|
||||||
|
@materials.setter
|
||||||
|
def materials(self, materials):
|
||||||
|
materials_path = (self._path / materials).resolve()
|
||||||
|
self._materials = json.loads(materials_path.read_text())
|
||||||
|
|
||||||
|
@property
|
||||||
|
def transparent_surfaces(self):
|
||||||
|
return self._transparent_surfaces
|
||||||
|
|
||||||
|
@transparent_surfaces.setter
|
||||||
|
def transparent_surfaces(self, transparent_surfaces):
|
||||||
|
transparent_surfaces_path = (self._path / transparent_surfaces).resolve()
|
||||||
|
self._transparent_surfaces = json.loads(
|
||||||
|
transparent_surfaces_path.read_text())
|
||||||
|
|
||||||
|
def hub_to_nrcan_function(self, hub_function):
|
||||||
|
return self.hub_to_nrcan_dictionary[hub_function]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def year_to_period_of_construction(year_of_construction):
|
||||||
|
"""
|
||||||
|
Converts year of construction to the period of construction.
|
||||||
|
:param year_of_construction: <class 'int'>
|
||||||
|
:return: <class 'str'>
|
||||||
|
"""
|
||||||
|
period_of_construction = None
|
||||||
|
if 1000 <= year_of_construction <= 1900:
|
||||||
|
period_of_construction = '1000_1900'
|
||||||
|
elif 1901 <= year_of_construction <= 1910:
|
||||||
|
period_of_construction = '1901_1910'
|
||||||
|
elif 1911 <= year_of_construction <= 1920:
|
||||||
|
period_of_construction = '1911_1920'
|
||||||
|
elif 1921 <= year_of_construction <= 1930:
|
||||||
|
period_of_construction = '1921_1930'
|
||||||
|
elif 1931 <= year_of_construction <= 1940:
|
||||||
|
period_of_construction = '1931_1940'
|
||||||
|
elif 1941 <= year_of_construction <= 1950:
|
||||||
|
period_of_construction = '1941_1950'
|
||||||
|
elif 1951 <= year_of_construction <= 1960:
|
||||||
|
period_of_construction = '1951_1960'
|
||||||
|
elif 1961 <= year_of_construction <= 1970:
|
||||||
|
period_of_construction = '1961_1970'
|
||||||
|
elif 1971 <= year_of_construction <= 1980:
|
||||||
|
period_of_construction = '1971_1980'
|
||||||
|
elif 1981 <= year_of_construction <= 1990:
|
||||||
|
period_of_construction = '1981_1990'
|
||||||
|
elif 1991 <= year_of_construction <= 2000:
|
||||||
|
period_of_construction = '1991_2000'
|
||||||
|
elif 2001 <= year_of_construction <= 2010:
|
||||||
|
period_of_construction = '2001_2010'
|
||||||
|
elif 2011 <= year_of_construction <= 2016:
|
||||||
|
period_of_construction = '2011_2016'
|
||||||
|
elif 2017 <= year_of_construction <= 2019:
|
||||||
|
period_of_construction = '2017_2019'
|
||||||
|
elif 2020 <= year_of_construction <= 3000:
|
||||||
|
period_of_construction = '2020_3000'
|
||||||
|
return period_of_construction
|
||||||
|
|
||||||
|
def layers(self, opaque_surface_code, component_type):
|
||||||
|
"""
|
||||||
|
Returns the corresponding layers of a specific opaque surface
|
||||||
|
and the component type.
|
||||||
|
:param opaque_surface_code: <class 'str'>
|
||||||
|
:param component_type: <class 'str'>
|
||||||
|
:return: <class 'dict'>
|
||||||
|
"""
|
||||||
|
for opaque_surface in self.constructions['opaque_surfaces']:
|
||||||
|
opaque_surface_key = list(opaque_surface)[0]
|
||||||
|
if opaque_surface_key != opaque_surface_code:
|
||||||
|
continue
|
||||||
|
elif opaque_surface[opaque_surface_key]['type'] == component_type:
|
||||||
|
return opaque_surface[opaque_surface_key]['layers']
|
||||||
|
|
||||||
|
def search_material(self, material_name):
|
||||||
|
"""
|
||||||
|
Search materials and bring up the specific material data
|
||||||
|
based on the material's name
|
||||||
|
:param material_name: <class 'str'>
|
||||||
|
:return: <class 'dict'>
|
||||||
|
"""
|
||||||
|
return self.materials[f'{material_name}']
|
||||||
|
|
||||||
|
def search_transparent_surfaces(
|
||||||
|
self, surface_type, opaque_surface_code):
|
||||||
|
"""
|
||||||
|
Search transparent surfaces and bring up the specific surface data
|
||||||
|
based on its type and opaque surface code
|
||||||
|
:param surface_type: <class 'str'>
|
||||||
|
:param opaque_surface_code: <class 'str'>
|
||||||
|
:return: <class 'dict'>
|
||||||
|
"""
|
||||||
|
return self.transparent_surfaces[
|
||||||
|
f'{surface_type}_{opaque_surface_code}']
|
||||||
|
|
||||||
|
def find_opaque_surface(
|
||||||
|
self, function, period_of_construction, climate_zone):
|
||||||
|
"""
|
||||||
|
Returns the opaque_surface_name based on the below parameters.
|
||||||
|
:param function: <class 'str'>
|
||||||
|
:param period_of_construction: <class 'str'>
|
||||||
|
:param climate_zone: <class 'str'>
|
||||||
|
:return: <class 'str'>
|
||||||
|
"""
|
||||||
|
for archetype in self.archetypes['archetypes']:
|
||||||
|
if archetype['function'] != function:
|
||||||
|
continue
|
||||||
|
elif archetype['period_of_construction'] != period_of_construction:
|
||||||
|
continue
|
||||||
|
elif archetype['climate_zone'] != climate_zone:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
return \
|
||||||
|
archetype['constructions']['OutdoorsWall']['opaque_surface_name']
|
|
@ -0,0 +1,13 @@
|
||||||
|
"""
|
||||||
|
energy_systems_material_emission module
|
||||||
|
Returns the summarize of emission of energy systems material.
|
||||||
|
The returned value will be used to calculate the building component emission.
|
||||||
|
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||||
|
Copyright © 2024 Concordia CERC group
|
||||||
|
Project Developer: Alireza Adli alireza.adli@mail.concordia.ca
|
||||||
|
Theoritical Support: Mohammad Reza Seyedabadi mohammad.seyedabadi@mail.concordia.ca
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class EnergySystemsMaterialEmission:
|
||||||
|
pass
|
|
@ -0,0 +1,43 @@
|
||||||
|
"""
|
||||||
|
envelope_emission module
|
||||||
|
Returns the summarize of envelope's surfaces emissions
|
||||||
|
The returned value will be used to calculate the building component emission.
|
||||||
|
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||||
|
Copyright © 2024 Concordia CERC group
|
||||||
|
Project Developer: Alireza Adli alireza.adli@mail.concordia.ca
|
||||||
|
Theoritical Support: Mohammad Reza Seyedabadi mohammad.seyedabadi@mail.concordia.ca
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class EnvelopeEmission:
|
||||||
|
def __init__(self,
|
||||||
|
envelope_material_emission,
|
||||||
|
envelope_thickness,
|
||||||
|
envelope_surface,
|
||||||
|
density):
|
||||||
|
self._envelope_material_emission = envelope_material_emission
|
||||||
|
self._envelope_thickness = envelope_thickness
|
||||||
|
self._envelope_surface = envelope_surface
|
||||||
|
self._density = density
|
||||||
|
|
||||||
|
@property
|
||||||
|
def envelope_material_emission(self):
|
||||||
|
return self._envelope_material_emission
|
||||||
|
|
||||||
|
@property
|
||||||
|
def envelope_thickness(self):
|
||||||
|
return self._envelope_thickness
|
||||||
|
|
||||||
|
@property
|
||||||
|
def envelope_surface(self):
|
||||||
|
return self._envelope_surface
|
||||||
|
|
||||||
|
@property
|
||||||
|
def density(self):
|
||||||
|
return self._density
|
||||||
|
|
||||||
|
def calculate_envelope_emission(self):
|
||||||
|
return self._envelope_material_emission * \
|
||||||
|
self._envelope_thickness * \
|
||||||
|
self._envelope_surface * \
|
||||||
|
self._density
|
|
@ -0,0 +1,11 @@
|
||||||
|
"""
|
||||||
|
lca_embodied_carbon module
|
||||||
|
SPDX - License - Identifier: LGPL - 3.0
|
||||||
|
Copyright © 2022 Concordia CERC group
|
||||||
|
Project Developer: Alireza Adli alireza.adli@mail.concordia.ca
|
||||||
|
Theoritical Support: Mohammad Reza Seyedabadi mohammad.seyedabadi@mail.concordia.ca
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Embodied:
|
||||||
|
pass
|
|
@ -0,0 +1,61 @@
|
||||||
|
"""
|
||||||
|
lca_end_of_life_carbon module
|
||||||
|
Machine emission of different methods can be a default argument, because,
|
||||||
|
at this phase we use the average emission of different machines emission
|
||||||
|
for each part (demolition, onsite, recycling and landfilling).
|
||||||
|
If we are to use data for different processes, setters will be develop for
|
||||||
|
the machines of each process to replace the default arguments. In that sense,
|
||||||
|
a conditional will decide to use which value. The conditional will be defined
|
||||||
|
in the setters.
|
||||||
|
For next phases, we can use a Machine object to find the corresponding
|
||||||
|
emission.
|
||||||
|
SPDX - License - Identifier: LGPL - 3.0
|
||||||
|
Copyright © 2024 Concordia CERC group
|
||||||
|
Project Developer: Alireza Adli alireza.adli@mail.concordia.ca
|
||||||
|
Theoritical Support: Mohammad Reza Seyedabadi mohammad.seyedabadi@mail.concordia.ca
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class EndOfLifeEmission:
|
||||||
|
def __init__(
|
||||||
|
self, recycling_ratio, onsite_recycling_ratio,
|
||||||
|
company_recycling_ratio, landfilling_ratio,
|
||||||
|
material_workload,
|
||||||
|
demolition_machine_emission=4.3577325,
|
||||||
|
onsite_machine_emission=2.0576313,
|
||||||
|
companies_recycling_machine_emission=0.6189555,
|
||||||
|
landfilling_machine_emission=15.7364044):
|
||||||
|
self.recycling_ratio = recycling_ratio
|
||||||
|
self.onsite_recycling_ratio = onsite_recycling_ratio
|
||||||
|
self.company_recycling_ratio = company_recycling_ratio
|
||||||
|
self.landfilling_ratio = landfilling_ratio
|
||||||
|
self.material_workload = material_workload
|
||||||
|
self.demolition_machine_emission = demolition_machine_emission
|
||||||
|
self.onsite_machine_emission = onsite_machine_emission
|
||||||
|
self.companies_recycling_machine_emission = \
|
||||||
|
companies_recycling_machine_emission
|
||||||
|
self.landfilling_machine_emission = landfilling_machine_emission
|
||||||
|
|
||||||
|
def demolition(self):
|
||||||
|
return self.demolition_machine_emission * self.material_workload
|
||||||
|
|
||||||
|
def onsite_recycling(self):
|
||||||
|
return self.recycling_ratio * (self.onsite_recycling_ratio *
|
||||||
|
self.onsite_machine_emission *
|
||||||
|
self.material_workload)
|
||||||
|
|
||||||
|
def companies_recycling(self):
|
||||||
|
return self.recycling_ratio * (self.company_recycling_ratio *
|
||||||
|
self.companies_recycling_machine_emission *
|
||||||
|
self.material_workload)
|
||||||
|
|
||||||
|
def landfilling(self):
|
||||||
|
return self.landfilling_ratio * \
|
||||||
|
self.landfilling_machine_emission * \
|
||||||
|
self.material_workload
|
||||||
|
|
||||||
|
def calculate_end_of_life_emission(self):
|
||||||
|
return self.demolition() + \
|
||||||
|
self.onsite_recycling() + \
|
||||||
|
self.companies_recycling() + \
|
||||||
|
self.landfilling()
|
|
@ -0,0 +1,11 @@
|
||||||
|
"""
|
||||||
|
lca_operational_carbon module
|
||||||
|
SPDX - License - Identifier: LGPL - 3.0
|
||||||
|
Copyright © 2024 Concordia CERC group
|
||||||
|
Project Developer: Alireza Adli alireza.adli@mail.concordia.ca
|
||||||
|
Theoritical Support: Mohammad Reza Seyedabadi mohammad.seyedabadi@mail.concordia.ca
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Operational:
|
||||||
|
pass
|
59
hub/city_model_structure/life_cycle_assessment/machine.py
Normal file
59
hub/city_model_structure/life_cycle_assessment/machine.py
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
"""
|
||||||
|
machine module
|
||||||
|
SPDX - License - Identifier: LGPL - 3.0
|
||||||
|
Copyright © 2024 Concordia CERC group
|
||||||
|
Project Developer: Alireza Adli alireza.adli@mail.concordia.ca
|
||||||
|
Theoritical Support: Mohammad Reza Seyedabadi mohammad.seyedabadi@mail.concordia.ca
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Machine:
|
||||||
|
def __init__(self, machine_id, name, work_efficiency_rate,
|
||||||
|
work_efficiency_unit, energy_consumption_rate,
|
||||||
|
energy_consumption_unit, emission_factor,
|
||||||
|
emission_unit):
|
||||||
|
self._machine_id = machine_id
|
||||||
|
self._name = name
|
||||||
|
self._work_efficiency_rate = work_efficiency_rate
|
||||||
|
self._work_efficiency_unit = work_efficiency_unit
|
||||||
|
self._energy_consumption_rate = energy_consumption_rate
|
||||||
|
self._energy_consumption_unit = energy_consumption_unit
|
||||||
|
self._emission_factor = emission_factor
|
||||||
|
self._emission_unit = emission_unit
|
||||||
|
|
||||||
|
@property
|
||||||
|
def id(self) -> int:
|
||||||
|
return self._machine_id
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
return self._name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def work_efficiency(self):
|
||||||
|
return self._work_efficiency_rate
|
||||||
|
|
||||||
|
@property
|
||||||
|
def work_efficiency_unit(self):
|
||||||
|
return self._work_efficiency_unit
|
||||||
|
|
||||||
|
@property
|
||||||
|
def energy_consumption_rate(self):
|
||||||
|
return self._energy_consumption_rate
|
||||||
|
|
||||||
|
@property
|
||||||
|
def energy_consumption_unit(self):
|
||||||
|
return self._energy_consumption_unit
|
||||||
|
|
||||||
|
@property
|
||||||
|
def emission_factor(self):
|
||||||
|
return self._emission_factor
|
||||||
|
|
||||||
|
@property
|
||||||
|
def emission_unit(self):
|
||||||
|
return self._emission_unit
|
||||||
|
|
||||||
|
def total_machine_emssion(self):
|
||||||
|
return self._work_efficiency_rate * \
|
||||||
|
self._energy_consumption_rate * \
|
||||||
|
self._emission_factor
|
|
@ -0,0 +1,26 @@
|
||||||
|
"""
|
||||||
|
opening_emission module
|
||||||
|
Returns the summarize of all surfaces openings' emissions
|
||||||
|
The returned value will be used to calculate the building component emission.
|
||||||
|
SPDX - License - Identifier: LGPL - 3.0 - or -later
|
||||||
|
Copyright © 2024 Concordia CERC group
|
||||||
|
Project Developer: Alireza Adli alireza.adli@mail.concordia.ca
|
||||||
|
Theoritical Support: Mohammad Reza Seyedabadi mohammad.seyedabadi@mail.concordia.ca
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class OpeningEmission:
|
||||||
|
def __init__(self, opening_material_emission, opening_surface):
|
||||||
|
self._opening_material_emission = opening_material_emission
|
||||||
|
self._opening_surface = opening_surface
|
||||||
|
|
||||||
|
@property
|
||||||
|
def opening_material_emission(self):
|
||||||
|
return self._opening_material_emission
|
||||||
|
|
||||||
|
@property
|
||||||
|
def opening_surface(self):
|
||||||
|
return self._opening_surface
|
||||||
|
|
||||||
|
def calculate_opening_emission(self):
|
||||||
|
return self._opening_material_emission * self._opening_surface
|
46
hub/city_model_structure/life_cycle_assessment/vehicle.py
Normal file
46
hub/city_model_structure/life_cycle_assessment/vehicle.py
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
"""
|
||||||
|
vehicle module
|
||||||
|
SPDX - License - Identifier: LGPL - 3.0
|
||||||
|
Copyright © 2024 Concordia CERC group
|
||||||
|
Project Developer: Alireza Adli alireza.adli@mail.concordia.ca
|
||||||
|
Theoritical Support: Mohammad Reza Seyedabadi mohammad.seyedabadi@mail.concordia.ca
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Vehicle:
|
||||||
|
def __init__(self, vehicle_id, name, fuel_consumption_rate,
|
||||||
|
fuel_consumption_unit, carbon_emission_factor,
|
||||||
|
carbon_emission_unit):
|
||||||
|
self._vehicle_id = vehicle_id
|
||||||
|
self._name = name
|
||||||
|
self._fuel_consumption_rate = fuel_consumption_rate
|
||||||
|
self._fuel_consumption_unit = fuel_consumption_unit
|
||||||
|
self._carbon_emission_factor = carbon_emission_factor
|
||||||
|
self._carbon_emission_unit = carbon_emission_unit
|
||||||
|
|
||||||
|
@property
|
||||||
|
def id(self):
|
||||||
|
return self._vehicle_id
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
return self._name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def fuel_consumption_rate(self):
|
||||||
|
return self._fuel_consumption_rate
|
||||||
|
|
||||||
|
@property
|
||||||
|
def fuel_consumption_unit(self):
|
||||||
|
return self._fuel_consumption_unit
|
||||||
|
|
||||||
|
@property
|
||||||
|
def carbon_emission_factor(self):
|
||||||
|
return self._carbon_emission_factor
|
||||||
|
|
||||||
|
@property
|
||||||
|
def carbon_emission_unit(self):
|
||||||
|
return self._carbon_emission_unit
|
||||||
|
|
||||||
|
def total_vehicle_emission(self):
|
||||||
|
return self._fuel_consumption_rate * self._carbon_emission_factor
|
1346
hub/data/construction/nrcan_transparent_surfaces_dictionaries.json
Normal file
1346
hub/data/construction/nrcan_transparent_surfaces_dictionaries.json
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user