From e66b7f665a47ab19378b03ca34ec29fc9891b5ea Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Wed, 21 Jun 2023 12:03:29 +0200 Subject: [PATCH] Mage: Some minor fix, add INI export and minor change. --- src/Solver/ASolver.py | 3 ++- src/Solver/Mage.py | 48 +++++++++++++++++++++++++++--------- src/View/RunSolver/Window.py | 12 ++++++--- src/View/ui/SolverLog.ui | 5 ++++ 4 files changed, 52 insertions(+), 16 deletions(-) diff --git a/src/Solver/ASolver.py b/src/Solver/ASolver.py index 49f1746e..7cef9f6a 100644 --- a/src/Solver/ASolver.py +++ b/src/Solver/ASolver.py @@ -160,7 +160,8 @@ class AbstractSolver(object): def _data_ready(self): s = self._process.readAll().data().decode() if self._output is not None: - self._output.put(s) + for x in s.split('\n'): + self._output.put(x) def _finished(self, exit_code, exit_status): if self._output is not None: diff --git a/src/Solver/Mage.py b/src/Solver/Mage.py index 38c600d2..96d6e74b 100644 --- a/src/Solver/Mage.py +++ b/src/Solver/Mage.py @@ -62,7 +62,9 @@ class Mage(AbstractSolver): # Write header for edge in study.river.edges(): - name = f"Reach_{edge.id}" + name = edge.name.replace(" ", "_") + if edge._name == "": + name = f"Reach_{edge.id}" with open(os.path.join(repertory, f"{name}.ST"), "w+") as f: files.append(f"{name}.ST") @@ -88,8 +90,6 @@ class Mage(AbstractSolver): f.write(f" 999.9990 999.9990 999.9990\n") - f.write("* END OF FILE") - return files def _export_BC(self, bound, repertory, qlog): @@ -118,9 +118,8 @@ class Mage(AbstractSolver): f.write(f"*{header[0]:>9}|{header[1]:>10}\n") for d in bound.data: - f.write(f"{d[0]:10.2f}{d[1]:10.3f}\n") + f.write(f"{d[0]:10.3f}{d[1]:10.3f}\n") - f.write("* END OF FILE") return files @@ -167,7 +166,33 @@ class Mage(AbstractSolver): f.write(f"K{num} {bkp}{ekp}{coef_1}{coef_2}\n") id += 1 - f.write("* END OF FILE") + + return files + + @timer + def _export_INI(self, study, repertory, qlog): + files = [] + + if qlog is not None: + qlog.put("Export INI file") + + # Write header + with open(os.path.join(repertory, "0.INI"), "w+") as f: + files.append("0.INI") + f.write("* This file is generate by PAMHYR, please don't modify\n") + + reachs = study.river.edges() + for reach in reachs: + cond = study.river.initial_conditions.get(reach) + + id = f"{reach.id+1:>3}" + id_sec = 1 + for data in cond.data: + discharge = f"{data['flow']:>10.5f}" + cote = f"{data['elevation']:>11.6f}" + + f.write(f" {id} {id_sec:>3} {discharge}{cote}\n") + id_sec += 1 return files @@ -189,7 +214,6 @@ class Mage(AbstractSolver): f.write("* OUTPUT\n") f.write(f"TRA 0.TRA\n") f.write(f"BIN 0.BIN\n") - f.write("* END OF FILE") @timer def export(self, study, repertory, qlog = None): @@ -259,7 +283,6 @@ class Mage8(Mage): f.write(f"{name} {value}\n") - f.write("* END OF FILE") return files @@ -281,13 +304,13 @@ class Mage8(Mage): if e._name == "": name = f"Reach_{e.id}" + id = f"Bief_{e.id+1}" + n1 = f"{e.node1.id:3}".replace(" ", "x") n2 = f"{e.node2.id:3}".replace(" ", "x") file = name + ".ST" - f.write(f"{name} {n1} {n2} {file}\n") - - f.write("* END OF FILE") + f.write(f"{id} {n1} {n2} {file}\n") return files @@ -295,11 +318,12 @@ class Mage8(Mage): def export(self, study, repertory, qlog = None): files = [] + self._export_ST(study, repertory, qlog) files = files + self._export_PAR(study, repertory, qlog) files = files + self._export_NET(study, repertory, qlog) - files = files + self._export_ST(study, repertory, qlog) files = files + self._export_bound_cond(study, repertory, qlog) files = files + self._export_RUG(study, repertory, qlog) + files = files + self._export_INI(study, repertory, qlog) self._export_REP(study, repertory, files, qlog) return True diff --git a/src/View/RunSolver/Window.py b/src/View/RunSolver/Window.py index 901f0e4a..ae3aa2a1 100644 --- a/src/View/RunSolver/Window.py +++ b/src/View/RunSolver/Window.py @@ -79,7 +79,6 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow): self._study = study self._config = config self._solver = solver - self._process = QProcess(parent) super(SolverLogWindow, self).__init__( name=self._title, ui="SolverLog", parent=parent @@ -90,17 +89,24 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow): self.setup_alarm() self.setup_connections() + self._workdir = "/tmp/pamhyr/0/" self._alarm.start(500) self._output = Queue() + self._process = self.new_process(parent) self._log(f" *** Export study {self._solver.name}", color="blue") - self._solver.export(self._study, "/tmp/pamhyr/0/", qlog = self._output) + self._solver.export(self._study, self._workdir, qlog = self._output) self.update() self._log(f" *** Run solver {self._solver.name}", color="blue") self._solver.run(self._process, self._output) + def new_process(self, parent): + new = QProcess(parent) + new.setWorkingDirectory(self._workdir) + return new + def setup_action(self): self.find(QAction, "action_start").setEnabled(False) self.find(QAction, "action_pause").setEnabled(True) @@ -145,7 +151,7 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow): def start(self): self._log(" *** Start", color="blue") if self._solver.is_stoped(): - self._process = QProcess(self._parent) + self._process = self.new_process(self._parent) self._solver.start(self._process) self.find(QAction, "action_start").setEnabled(False) diff --git a/src/View/ui/SolverLog.ui b/src/View/ui/SolverLog.ui index 15e450e4..5d2bf17f 100644 --- a/src/View/ui/SolverLog.ui +++ b/src/View/ui/SolverLog.ui @@ -17,6 +17,11 @@ <layout class="QGridLayout" name="gridLayout"> <item row="0" column="0"> <widget class="QTextEdit" name="textEdit"> + <property name="font"> + <font> + <family>Monospace</family> + </font> + </property> <property name="documentTitle"> <string notr="true"/> </property> -- GitLab