From a7b7e6bb0d5b8f8f32476865944d323240d5c20a Mon Sep 17 00:00:00 2001 From: Pilar Date: Thu, 15 Apr 2021 17:26:00 -0400 Subject: [PATCH] added pv and hp classes and modified surface to include pv_systems --- city_model_structure/attributes/heat_pump.py | 46 ++++++++ city_model_structure/attributes/pv_system.py | 114 +++++++++++++++++++ city_model_structure/attributes/surface.py | 22 +++- 3 files changed, 180 insertions(+), 2 deletions(-) create mode 100644 city_model_structure/attributes/heat_pump.py create mode 100644 city_model_structure/attributes/pv_system.py diff --git a/city_model_structure/attributes/heat_pump.py b/city_model_structure/attributes/heat_pump.py new file mode 100644 index 00000000..c6b059bc --- /dev/null +++ b/city_model_structure/attributes/heat_pump.py @@ -0,0 +1,46 @@ +""" +heat_pump module defines a heat pump +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +""" + + +class HeatPump: + """ + HeatPump class + """ + def __init__(self): + self._seasonal_mean_cop = None + self._seasonal_mean_coverage_factor = None + + @property + def seasonal_mean_cop(self): + """ + Get seasonal mean COP (-) + :return: real + """ + return self._seasonal_mean_cop + + @seasonal_mean_cop.setter + def seasonal_mean_cop(self, value): + """ + Get seasonal mean COP (-) + :param value: real + """ + self._seasonal_mean_cop = value + + @property + def seasonal_mean_coverage_factor(self): + """ + Get percentage of demand covered by the hp (-) + :return: real + """ + return self._seasonal_mean_coverage_factor + + @seasonal_mean_coverage_factor.setter + def seasonal_mean_coverage_factor(self, value): + """ + Set percentage of demand covered by the hp (-) + :return: real + """ + self._seasonal_mean_coverage_factor = value diff --git a/city_model_structure/attributes/pv_system.py b/city_model_structure/attributes/pv_system.py new file mode 100644 index 00000000..35748c1c --- /dev/null +++ b/city_model_structure/attributes/pv_system.py @@ -0,0 +1,114 @@ +""" +pv_system defines a pv system including all components: PV panels, transformer... +SPDX - License - Identifier: LGPL - 3.0 - or -later +Copyright © 2020 Project Author Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca +""" + + +class PvSystem: + """ + PvSystem class + """ + def __init__(self): + self._modules_mean_seasonal_efficiency = None + self._total_area = None + self._module_area = None + self._number_of_modules = None + self._overall_system_performance_ratio = None + self._electricity_generation = None + + @property + def modules_mean_seasonal_efficiency(self): + """ + Get mean modules efficiency (-) + :return: real + """ + return self._modules_mean_seasonal_efficiency + + @modules_mean_seasonal_efficiency.setter + def modules_mean_seasonal_efficiency(self, value): + """ + Set mean modules efficiency (-) + :param value: real + """ + self._modules_mean_seasonal_efficiency = value + + @property + def total_area(self): + """ + Get total modules area (m2) + :return: real + """ + return self._total_area + + @total_area.setter + def total_area(self, value): + """ + Set total modules area (m2) + :param value: real + """ + self._total_area = value + + @property + def module_area(self): + """ + Get module area (m2) + :return: real + """ + return self._module_area + + @module_area.setter + def module_area(self, value): + """ + Set module area (m2) + :param value: real + """ + self._module_area = value + + @property + def number_of_modules(self): + """ + Get number of modules + :return: int + """ + return self._number_of_modules + + @number_of_modules.setter + def number_of_modules(self, value): + """ + Set number of modules + :param value: int + """ + self._number_of_modules = value + + @property + def overall_system_performance_ratio(self): + """ + Get overall system performance ratio (-) + :return: real + """ + return self._overall_system_performance_ratio + + @overall_system_performance_ratio.setter + def overall_system_performance_ratio(self, value): + """ + Set overall system performance ratio (-) + :param value: real + """ + self._overall_system_performance_ratio = value + + @property + def electricity_generation(self): + """ + Get electricity generation (J) + :return: real + """ + return self._electricity_generation + + @electricity_generation.setter + def electricity_generation(self, value): + """ + Set electricity generation (J) + :param value: real + """ + self._electricity_generation = value diff --git a/city_model_structure/attributes/surface.py b/city_model_structure/attributes/surface.py index b364553a..eacb8e76 100644 --- a/city_model_structure/attributes/surface.py +++ b/city_model_structure/attributes/surface.py @@ -9,6 +9,7 @@ from __future__ import annotations import numpy as np import uuid from city_model_structure.attributes.polygon import Polygon +from city_model_structure.attributes.pv_system import PvSystem class Surface: @@ -31,7 +32,8 @@ class Surface: self._global_irradiance = dict() self._perimeter_polygon = perimeter_polygon self._holes_polygons = holes_polygons - self._solid_polygons = solid_polygon + self._solid_polygon = solid_polygon + self._pv_system_installed = None @property def name(self): @@ -201,7 +203,7 @@ class Surface: solid surface :return: Polygon """ - return self._solid_polygons + return self._solid_polygon @property def holes_polygons(self) -> [Polygon]: @@ -213,3 +215,19 @@ class Surface: [Polygon] -> one or more holes in the surface """ return self._holes_polygons + + @property + def pv_system_installed(self) -> PvSystem: + """ + PV system installed on the surface + :return: PvSystem + """ + return self._pv_system_installed + + @pv_system_installed.setter + def pv_system_installed(self, value): + """ + PV system installed on the surface + :param value: PvSystem + """ + self._pv_system_installed = value