From 765784135d430ff89953d495de6f8cb578d65792 Mon Sep 17 00:00:00 2001 From: Guille Date: Thu, 12 Dec 2024 20:09:58 +0100 Subject: [PATCH] Correct old ep export and optimize code --- hub/exports/building_energy/cerc_idf.py | 4 ---- hub/exports/building_energy/idf.py | 25 ++++++++++++++++++------- hub/imports/results/energy_plus.py | 2 +- tests/test_exports.py | 3 ++- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/hub/exports/building_energy/cerc_idf.py b/hub/exports/building_energy/cerc_idf.py index 74b44753..672a0adf 100644 --- a/hub/exports/building_energy/cerc_idf.py +++ b/hub/exports/building_energy/cerc_idf.py @@ -10,7 +10,6 @@ import copy import os import shutil import subprocess -from datetime import datetime import hub.exports.building_energy.idf_helper as idf_cte import hub.helpers.constants as cte @@ -48,7 +47,6 @@ class CercIdf(IdfBase): _thermostat_added_to_idf = {} def __init__(self, city, output_path, idf_file_path, idd_file_path, epw_file_path, target_buildings=None): - self._start = datetime.now() super().__init__(city, output_path, idf_file_path, idd_file_path, epw_file_path, target_buildings) self._add_surfaces = IdfSurfaces.add self._add_file_schedule = IdfFileSchedule.add @@ -233,7 +231,6 @@ class CercIdf(IdfBase): # Merge files self._merge_files() self._add_outputs() - print(f'{len(self._city.buildings)} buildings export completed in: {datetime.now() - self._start}') @property def _energy_plus(self): @@ -248,5 +245,4 @@ class CercIdf(IdfBase): '--readvars', '--output-prefix', f'{self._city.name}_', self._output_file_path] - print(cmd) subprocess.run(cmd, cwd=self._output_path) diff --git a/hub/exports/building_energy/idf.py b/hub/exports/building_energy/idf.py index c6a26d1b..9b37bf5d 100644 --- a/hub/exports/building_energy/idf.py +++ b/hub/exports/building_energy/idf.py @@ -8,10 +8,12 @@ Code contributors: Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concord """ import copy import datetime -import glob -import os +import shutil +import subprocess from pathlib import Path + from geomeppy import IDF + import hub.helpers.constants as cte from hub.city_model_structure.attributes.schedule import Schedule from hub.city_model_structure.building_demand.thermal_zone import ThermalZone @@ -529,6 +531,7 @@ class Idf: self._remove_sizing_periods() self._rename_building(self._city.name) self._lod = self._city.level_of_detail.geometry + is_target = False for building in self._city.buildings: is_target = building.name in self._target_buildings or building.name in self._adjacent_buildings for internal_zone in building.internal_zones: @@ -656,12 +659,20 @@ class Idf: self._add_surfaces(building, building.name) return self._idf + @property + def _energy_plus(self): + return shutil.which('energyplus') + def run(self): - """ - Start the energy plus simulation - """ - self._idf.run(expandobjects=False, readvars=True, output_directory=self._output_path, - output_prefix=f'{self._city.name}_') + cmd = [self._energy_plus, + '--weather', self._epw_file_path, + '--output-directory', self._output_path, + '--idd', self._idd_file_path, + '--expandobjects', + '--readvars', + '--output-prefix', f'{self._city.name}_', + self._idf_file_path] + subprocess.run(cmd, cwd=self._output_path) def _add_block(self, building): _points = self._matrix_to_2d_list(building.foot_print.coordinates) diff --git a/hub/imports/results/energy_plus.py b/hub/imports/results/energy_plus.py index adf1c163..d251251c 100644 --- a/hub/imports/results/energy_plus.py +++ b/hub/imports/results/energy_plus.py @@ -20,7 +20,7 @@ class EnergyPlus: header_parts = header.split(':') building_name = header_parts[0] variable = ':'.join(header_parts[1:]).strip() # concat the rest and ensure that : it's reintroduced just in case - if variable is '': + if variable == '': continue if building_name not in self._summary_variables: self._building_energy_demands[variable] = [] # initialize the list of variables diff --git a/tests/test_exports.py b/tests/test_exports.py index d285df87..24469e87 100644 --- a/tests/test_exports.py +++ b/tests/test_exports.py @@ -144,7 +144,8 @@ class TestExports(TestCase): UsageFactory('nrcan', city).enrich() WeatherFactory('epw', city).enrich() try: - idf = EnergyBuildingsExportsFactory('idf', city, self._output_path).export() + _idf = EnergyBuildingsExportsFactory('idf', city, self._output_path).export() + _idf.run() except Exception: self.fail("Idf ExportsFactory raised ExceptionType unexpectedly!")