Commit e66b7f66 authored by Pierre-Antoine Rouby's avatar Pierre-Antoine Rouby
Browse files

Mage: Some minor fix, add INI export and minor change.

Showing with 52 additions and 16 deletions
+52 -16
...@@ -160,7 +160,8 @@ class AbstractSolver(object): ...@@ -160,7 +160,8 @@ class AbstractSolver(object):
def _data_ready(self): def _data_ready(self):
s = self._process.readAll().data().decode() s = self._process.readAll().data().decode()
if self._output is not None: 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): def _finished(self, exit_code, exit_status):
if self._output is not None: if self._output is not None:
......
...@@ -62,7 +62,9 @@ class Mage(AbstractSolver): ...@@ -62,7 +62,9 @@ class Mage(AbstractSolver):
# Write header # Write header
for edge in study.river.edges(): 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: with open(os.path.join(repertory, f"{name}.ST"), "w+") as f:
files.append(f"{name}.ST") files.append(f"{name}.ST")
...@@ -88,8 +90,6 @@ class Mage(AbstractSolver): ...@@ -88,8 +90,6 @@ class Mage(AbstractSolver):
f.write(f" 999.9990 999.9990 999.9990\n") f.write(f" 999.9990 999.9990 999.9990\n")
f.write("* END OF FILE")
return files return files
def _export_BC(self, bound, repertory, qlog): def _export_BC(self, bound, repertory, qlog):
...@@ -118,9 +118,8 @@ class Mage(AbstractSolver): ...@@ -118,9 +118,8 @@ class Mage(AbstractSolver):
f.write(f"*{header[0]:>9}|{header[1]:>10}\n") f.write(f"*{header[0]:>9}|{header[1]:>10}\n")
for d in bound.data: 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 return files
...@@ -167,7 +166,33 @@ class Mage(AbstractSolver): ...@@ -167,7 +166,33 @@ class Mage(AbstractSolver):
f.write(f"K{num} {bkp}{ekp}{coef_1}{coef_2}\n") f.write(f"K{num} {bkp}{ekp}{coef_1}{coef_2}\n")
id += 1 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 return files
...@@ -189,7 +214,6 @@ class Mage(AbstractSolver): ...@@ -189,7 +214,6 @@ class Mage(AbstractSolver):
f.write("* OUTPUT\n") f.write("* OUTPUT\n")
f.write(f"TRA 0.TRA\n") f.write(f"TRA 0.TRA\n")
f.write(f"BIN 0.BIN\n") f.write(f"BIN 0.BIN\n")
f.write("* END OF FILE")
@timer @timer
def export(self, study, repertory, qlog = None): def export(self, study, repertory, qlog = None):
...@@ -259,7 +283,6 @@ class Mage8(Mage): ...@@ -259,7 +283,6 @@ class Mage8(Mage):
f.write(f"{name} {value}\n") f.write(f"{name} {value}\n")
f.write("* END OF FILE")
return files return files
...@@ -281,13 +304,13 @@ class Mage8(Mage): ...@@ -281,13 +304,13 @@ class Mage8(Mage):
if e._name == "": if e._name == "":
name = f"Reach_{e.id}" name = f"Reach_{e.id}"
id = f"Bief_{e.id+1}"
n1 = f"{e.node1.id:3}".replace(" ", "x") n1 = f"{e.node1.id:3}".replace(" ", "x")
n2 = f"{e.node2.id:3}".replace(" ", "x") n2 = f"{e.node2.id:3}".replace(" ", "x")
file = name + ".ST" file = name + ".ST"
f.write(f"{name} {n1} {n2} {file}\n") f.write(f"{id} {n1} {n2} {file}\n")
f.write("* END OF FILE")
return files return files
...@@ -295,11 +318,12 @@ class Mage8(Mage): ...@@ -295,11 +318,12 @@ class Mage8(Mage):
def export(self, study, repertory, qlog = None): def export(self, study, repertory, qlog = None):
files = [] files = []
self._export_ST(study, repertory, qlog)
files = files + self._export_PAR(study, repertory, qlog) files = files + self._export_PAR(study, repertory, qlog)
files = files + self._export_NET(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_bound_cond(study, repertory, qlog)
files = files + self._export_RUG(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) self._export_REP(study, repertory, files, qlog)
return True return True
...@@ -79,7 +79,6 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow): ...@@ -79,7 +79,6 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow):
self._study = study self._study = study
self._config = config self._config = config
self._solver = solver self._solver = solver
self._process = QProcess(parent)
super(SolverLogWindow, self).__init__( super(SolverLogWindow, self).__init__(
name=self._title, ui="SolverLog", parent=parent name=self._title, ui="SolverLog", parent=parent
...@@ -90,17 +89,24 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow): ...@@ -90,17 +89,24 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow):
self.setup_alarm() self.setup_alarm()
self.setup_connections() self.setup_connections()
self._workdir = "/tmp/pamhyr/0/"
self._alarm.start(500) self._alarm.start(500)
self._output = Queue() self._output = Queue()
self._process = self.new_process(parent)
self._log(f" *** Export study {self._solver.name}", color="blue") 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.update()
self._log(f" *** Run solver {self._solver.name}", color="blue") self._log(f" *** Run solver {self._solver.name}", color="blue")
self._solver.run(self._process, self._output) 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): def setup_action(self):
self.find(QAction, "action_start").setEnabled(False) self.find(QAction, "action_start").setEnabled(False)
self.find(QAction, "action_pause").setEnabled(True) self.find(QAction, "action_pause").setEnabled(True)
...@@ -145,7 +151,7 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow): ...@@ -145,7 +151,7 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow):
def start(self): def start(self):
self._log(" *** Start", color="blue") self._log(" *** Start", color="blue")
if self._solver.is_stoped(): if self._solver.is_stoped():
self._process = QProcess(self._parent) self._process = self.new_process(self._parent)
self._solver.start(self._process) self._solver.start(self._process)
self.find(QAction, "action_start").setEnabled(False) self.find(QAction, "action_start").setEnabled(False)
......
...@@ -17,6 +17,11 @@ ...@@ -17,6 +17,11 @@
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QTextEdit" name="textEdit"> <widget class="QTextEdit" name="textEdit">
<property name="font">
<font>
<family>Monospace</family>
</font>
</property>
<property name="documentTitle"> <property name="documentTitle">
<string notr="true"/> <string notr="true"/>
</property> </property>
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment