From 473aac450043e8ce85213e16f4c8061a8f050459 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 24 Jan 2024 14:51:19 +0100 Subject: [PATCH 1/4] Meshing: Define meshing with MailleurTT. --- .gitlab-ci.yml | 2 +- src/Meshing/Mage.py | 57 +++++++++++++++++++++++++++++++++++++ src/View/Geometry/Window.py | 6 ++-- 3 files changed, 62 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4f4dddb2..b3cff017 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -27,7 +27,7 @@ stages: ############# variables: - MAGE_VERSION: "v8.3.4" + MAGE_VERSION: "v8.3.3" dl-mage-linux: stage: downloads diff --git a/src/Meshing/Mage.py b/src/Meshing/Mage.py index 360b8422..aeab9af1 100644 --- a/src/Meshing/Mage.py +++ b/src/Meshing/Mage.py @@ -28,7 +28,9 @@ from ctypes import ( POINTER, c_void_p, c_int, c_double, c_bool ) +from PyQt5.QtCore import QProcess +from tools import logger_color_red, logger_color_reset from Meshing.AMeshingTool import AMeshingTool logger = logging.getLogger() @@ -259,3 +261,58 @@ class MeshingWithMage(AMeshingTool): logger.debug(f"meshing: Import geometry from {m}") reach.import_geometry(m) + + +class MeshingWithMageMailleurTT(AMeshingTool): + def __init__(self): + super(MeshingWithMageMailleurTT, self).__init__() + + @classmethod + def _exe_path(cls): + ext = "" if os.name == "posix" else ".exe" + + return os.path.abspath( + os.path.join( + os.path.dirname(__file__), + "..", "..", "..", "mage", f"mailleurTT{ext}" + ) + ) + + ########### + # Meshing # + ########### + + def meshing(self, reach, step: float = 50): + if reach is None or len(reach.profiles) == 0: + return reach + + with tempfile.TemporaryDirectory() as tmp: + st_file = self.export_reach_to_st(reach, tmp) + m_file = st_file.rsplit(".ST", 1)[0] + ".M" + + proc = QProcess() + proc.setWorkingDirectory(tmp) + + proc.start( + self._exe_path(), [st_file, m_file, str(step)] + ) + proc.waitForFinished() + + errors = str(proc.readAllStandardError()) + if len(errors) != 0: + logger.error(f"{logger_color_red()}{errors}{logger_color_reset()}") + else: + self.import_m_file(reach, m_file) + return reach + + def export_reach_to_st(self, reach, tmp): + tmp_st = os.path.join(tmp, "meshing.ST") + + logger.debug(f"meshing: Export ST to {tmp_st}") + + reach.export_reach(tmp_st) + return tmp_st + + def import_m_file(self, reach, m): + logger.debug(f"meshing: Import geometry from {m}") + reach.import_geometry(m) diff --git a/src/View/Geometry/Window.py b/src/View/Geometry/Window.py index 0569b9ce..2ebd12f5 100644 --- a/src/View/Geometry/Window.py +++ b/src/View/Geometry/Window.py @@ -46,7 +46,9 @@ from View.Tools.PamhyrWindow import PamhyrWindow from View.Tools.Plot.PamhyrToolbar import PamhyrPlotToolbar from View.Tools.Plot.PamhyrCanvas import MplCanvas -from Meshing.Mage import MeshingWithMage +from Meshing.Mage import ( + MeshingWithMage, MeshingWithMageMailleurTT +) from View.Geometry.Table import GeometryReachTableModel from View.Geometry.PlotXY import PlotXY @@ -264,7 +266,7 @@ class GeometryWindow(PamhyrWindow): def _edit_meshing(self): try: - mesher = MeshingWithMage() + mesher = MeshingWithMageMailleurTT() self._table.meshing(mesher, -1) except Exception as e: logger_exception(e) From d0afd0ed7482a6c2e0c5855927ccd4c28fbd92be Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 24 Jan 2024 15:00:31 +0100 Subject: [PATCH 2/4] Geometry: Fix division by 0 for incline. --- src/Model/Geometry/Reach.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py index 691c823b..e2ed7f16 100644 --- a/src/Model/Geometry/Reach.py +++ b/src/Model/Geometry/Reach.py @@ -25,7 +25,7 @@ from copy import deepcopy from operator import itemgetter from functools import reduce -from tools import flatten, timer, trace +from tools import flatten, timer, trace, logger_exception from Model.Tools.PamhyrDB import SQLSubModel @@ -691,10 +691,14 @@ class Reach(SQLSubModel): logger.debug(f"+{incline_acc}") logger.debug(f"-{incline_set}") - return ( - reduce( - lambda acc, x: acc + x, - incline_set, - 0.0 - ) / (len(incline_set)) - ) + try: + return ( + reduce( + lambda acc, x: acc + x, + incline_set, + 0.0 + ) / (len(incline_set)) + ) + except Exception as e: + logger_exception(e) + return 0 From 14a2abaebde243b9789301698d07b94f22a1e8aa Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 24 Jan 2024 15:05:28 +0100 Subject: [PATCH 3/4] Meshing: Mage: Fix pep8. --- src/Meshing/Mage.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Meshing/Mage.py b/src/Meshing/Mage.py index aeab9af1..bf5233a2 100644 --- a/src/Meshing/Mage.py +++ b/src/Meshing/Mage.py @@ -300,7 +300,9 @@ class MeshingWithMageMailleurTT(AMeshingTool): errors = str(proc.readAllStandardError()) if len(errors) != 0: - logger.error(f"{logger_color_red()}{errors}{logger_color_reset()}") + logger.error( + f"{logger_color_red()}{errors}{logger_color_reset()}" + ) else: self.import_m_file(reach, m_file) return reach From 3dfdc308e34e8e5e145cc52d683d0ab3a4c07c66 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Wed, 24 Jan 2024 15:12:39 +0100 Subject: [PATCH 4/4] HS: Fix HS KP is missing at display update. --- src/View/HydraulicStructures/Window.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/View/HydraulicStructures/Window.py b/src/View/HydraulicStructures/Window.py index b0b80bf9..25b0222d 100644 --- a/src/View/HydraulicStructures/Window.py +++ b/src/View/HydraulicStructures/Window.py @@ -292,7 +292,7 @@ class HydraulicStructuresWindow(PamhyrWindow): float(profile_kp) ) - if profiles is not None: + if len(profiles) != 0 and profiles is not None: profile = profiles[0] self.plot_kpc.set_profile(profile)