Merge pull request 'errors_in_meb' (#33) from errors_in_meb into main

Reviewed-on: https://nextgenerations-cities.encs.concordia.ca/gitea/CERC/hub/pulls/33
This commit is contained in:
Guille Gutierrez 2023-07-17 18:53:32 -04:00
commit 06ddbd0f98
5 changed files with 71 additions and 49 deletions

View File

@ -1,21 +1,16 @@
# Functions and usages internally recognized within the hub
The hub uses a list of building functions a building usages that are the only ones recognized. All new categories should be added to the dictionaries that translate from the input formats to the libs functions. From the libs functions to the libs usages and from the libs usages and libs functions to the output formats.
Input formats accepted:
* Function:
* pluto
* hft
The hub uses a list of building functions that are the only ones recognized. All new categories should be added to the dictionaries that translate from the input formats to the hub functions and from the hub functions to the output formats.
Output formats accepted:
* Function:
* nrel
* nrcan
* eilat
* Usage:
* ca
* hft
* nrcan
* comnet
* Eilat
* eilat
Libs_functions:
* single family house

View File

@ -36,7 +36,9 @@ class ThermalBoundary:
self._thickness = None
self._internal_surface = None
self._window_ratio = None
self._window_ratio_is_calculated = False
self._window_ratio_to_be_calculated = False
if self._windows_areas is not None:
self._window_ratio_to_be_calculated = True
@property
def id(self):
@ -101,6 +103,16 @@ class ThermalBoundary:
:return: None or [ThermalOpening]
"""
if self._thermal_openings is None:
if self.windows_areas is not None:
if len(self.windows_areas) > 0:
self._thermal_openings = []
for window_area in self.windows_areas:
thermal_opening = ThermalOpening()
thermal_opening.area = window_area
self._thermal_openings.append(thermal_opening)
else:
self._thermal_openings = []
else:
if self.window_ratio is not None:
if self.window_ratio == 0:
self._thermal_openings = []
@ -113,14 +125,29 @@ class ThermalBoundary:
thermal_opening.area = _area
self._thermal_openings = [thermal_opening]
else:
if len(self.windows_areas) > 0:
self._thermal_openings = []
for window_area in self.windows_areas:
thermal_opening = ThermalOpening()
thermal_opening.area = window_area
self._thermal_openings.append(thermal_opening)
else:
if self.windows_areas is not None:
return self._thermal_openings
if self.window_ratio is not None:
if self.window_ratio == 0:
self._thermal_openings = []
else:
if len(self._thermal_openings) == 0:
thermal_opening = ThermalOpening()
if self.window_ratio == 1:
_area = self.opaque_area
else:
_area = self.opaque_area * self.window_ratio / (1-self.window_ratio)
thermal_opening.area = _area
self._thermal_openings = [thermal_opening]
else:
for _thermal_opening in self._thermal_openings:
if self.window_ratio == 1:
_area = self.opaque_area
else:
_area = self.opaque_area * self.window_ratio / (1-self.window_ratio)
_thermal_opening.area = _area
return self._thermal_openings
@property
@ -174,9 +201,7 @@ class ThermalBoundary:
If none of those sources are available, it returns None.
:return: float
"""
if self.windows_areas is not None:
if not self._window_ratio_is_calculated:
_calculated = True
if self._window_ratio_to_be_calculated:
if len(self.windows_areas) == 0:
self._window_ratio = 0
else:
@ -192,7 +217,7 @@ class ThermalBoundary:
Set thermal boundary window ratio
:param value: str
"""
if self._window_ratio_is_calculated:
if self._window_ratio_to_be_calculated:
raise ValueError('Window ratio cannot be assigned when the windows are defined in the geometry.')
self._window_ratio = float(value)

View File

@ -93,7 +93,7 @@
"shgc": 0.49,
"type": "Window",
"frame_ratio": 0,
"u_value": 10.09
"u_value": 7.00
}
},
{

View File

@ -44,21 +44,21 @@ class InselMonthlyEnergyBalance:
self._insel_files_paths.append(building.name + '.insel')
file_name_out = building.name + '.out'
output_path = Path(self._path / file_name_out).resolve()
if building.internal_zones is not None:
for internal_zone in building.internal_zones:
if internal_zone.thermal_zones is None:
if building.thermal_zones is None:
logging.warning('Building %s has missing values. Monthly Energy Balance cannot be processed', building.name)
break
self._contents.append(
self._generate_meb_template(building, output_path, self._radiation_calculation_method, self._weather_format, self._custom_insel_block)
)
self._export()
@staticmethod
def _add_block(file, block_number, block_type, inputs='', parameters=''):
def _add_block(file, block_number, block_type, inputs=None, parameters=None):
file += "S " + str(block_number) + " " + block_type + "\n"
if inputs is not None:
for block_input in inputs:
file += str(block_input) + "\n"
if parameters is not None:
if len(parameters) > 0:
file += "P " + str(block_number) + "\n"
for block_parameter in parameters:
@ -222,6 +222,7 @@ class InselMonthlyEnergyBalance:
parameters.append(0.0)
parameters.append(0.0)
else:
print(window_area, thermal_boundary.thermal_openings)
thermal_opening = thermal_boundary.thermal_openings[0]
parameters.append(thermal_opening.frame_ratio)
parameters.append(thermal_opening.overall_u_value)

View File

@ -52,6 +52,7 @@ class ConstructionHelper:
'Repentigny': '6',
"Montreal Int'l": '6',
'Levis': '7A',
'Quebec City': '7A',
'Kelowna': '5',
'Park Slope': '4'
}