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

Solver: Fix SIN export and error handler at export.

No related merge requests found
Pipeline #55026 passed with stages
in 3 minutes and 21 seconds
Showing with 53 additions and 48 deletions
+53 -48
......@@ -20,7 +20,7 @@ import os
import logging
import numpy as np
from tools import timer, trace
from tools import timer, trace, logger_exception
from Solver.CommandLine import CommandLineSolver
from Checker.Mage import (
......@@ -137,7 +137,6 @@ class Mage(CommandLineSolver):
for line in lines:
rep_file.write(line.line)
@timer
def _export_ST(self, study, repertory, qlog, name="0"):
files = []
......@@ -236,7 +235,6 @@ class Mage(CommandLineSolver):
# Point line
wfile.write(f"{x} {y} {z} {n} {sediment}\n")
@timer
def _export_BC(self, t, bounds, repertory, qlog, name="0"):
files = []
......@@ -270,7 +268,6 @@ class Mage(CommandLineSolver):
return files
@timer
def _export_bound_cond(self, study, repertory, qlog, name="0"):
files = []
lst = study.river.boundary_condition
......@@ -301,7 +298,6 @@ class Mage(CommandLineSolver):
return files
@timer
def _export_lateral_contrib(self, study, repertory, qlog, name="0"):
files = []
lst = study.river.lateral_contribution
......@@ -320,7 +316,6 @@ class Mage(CommandLineSolver):
return files
@timer
def _export_LC(self, study, lateral, f, qlog, name="0"):
if lateral.edge is None:
return
......@@ -352,7 +347,6 @@ class Mage(CommandLineSolver):
else:
f.write(f"{d[0]:10.3f}{d[1]:10.3f}\n")
@timer
def _export_RUG(self, study, repertory, qlog, name="0"):
files = []
......@@ -396,7 +390,6 @@ class Mage(CommandLineSolver):
return files
@timer
def _export_INI(self, study, repertory, qlog, name="0"):
files = []
......@@ -439,7 +432,6 @@ class Mage(CommandLineSolver):
files.append(f"{name}.INI")
return files
@timer
def _export_CAS(self, study, repertory, qlog, name="0"):
files = []
......@@ -472,7 +464,6 @@ class Mage(CommandLineSolver):
return files
@timer
def _export_SIN(self, study, repertory, qlog, name="0"):
files = []
......@@ -504,34 +495,40 @@ class Mage(CommandLineSolver):
if not hs.input_reach.is_enable():
continue
if hs.input_kp is None:
continue
f.write(
'* ouvrage au pk ' +
f"{float(hs.input_kp):>12.1f}" + ' ' +
hs.name + '\n'
)
for bhs in hs.basic_structures:
reach_id = study.river.get_edge_id(hs.input_reach) + 1
param_str = ' '.join(
[
f'{p:>10.3f}'
for p in self._export_SIN_parameters(bhs)
]
)
self._export_SIN_bhs(study, sin_dict, hs, f)
name = bhs.name
if name == "":
name = f"HS_{bhs.id:>3}".replace(" ", "0")
else:
name = name.replace(" ", "_")
return files
f.write(
f"{sin_dict[bhs._type]} " +
f"{reach_id} {float(hs.input_kp):>12.3f} " +
f"{param_str} {name}\n"
)
def _export_SIN_bhs(self, study, sin_dict, hs, f):
for bhs in hs.basic_structures:
reach_id = study.river.get_edge_id(hs.input_reach) + 1
param_str = ' '.join(
[
f'{p:>10.3f}'
for p in self._export_SIN_parameters(bhs)
]
)
return files
name = bhs.name
if name == "":
name = f"HS_{bhs.id:>3}".replace(" ", "0")
else:
name = name.replace(" ", "_")
f.write(
f"{sin_dict[bhs._type]} " +
f"{reach_id} {float(hs.input_kp):>12.3f} " +
f"{param_str} {name}\n"
)
def _export_SIN_parameters(self, bhs):
res = [9999.999] * 5
......@@ -591,7 +588,6 @@ class Mage(CommandLineSolver):
return res
@timer
def _export_VAR(self, study, repertory, qlog, name="0"):
files = []
......@@ -627,7 +623,6 @@ class Mage(CommandLineSolver):
return files
@timer
def _export_DEV(self, study, repertory, qlog, name="0"):
files = []
......@@ -650,7 +645,6 @@ class Mage(CommandLineSolver):
return files
@timer
def _export_REP(self, study, repertory, files, qlog, name="0"):
if qlog is not None:
qlog.put("Export REP file")
......@@ -785,7 +779,6 @@ class Mage8(Mage):
return lst
@timer
def _export_PAR(self, study, repertory, qlog=None, name="0"):
files = []
......@@ -820,7 +813,6 @@ class Mage8(Mage):
return files
@timer
def _export_NET(self, study, repertory, qlog=None, name="0"):
files = []
......@@ -844,7 +836,6 @@ class Mage8(Mage):
return files
@timer
def _export_QSO(self, bounds, repertory, qlog, name="0"):
files = []
......@@ -902,14 +893,19 @@ class Mage8(Mage):
# Generate files
files = []
for func in self.export_func_dict():
files = files + func(study, repertory, qlog, name=name)
try:
for func in self.export_func_dict():
files = files + func(study, repertory, qlog, name=name)
self.export_additional_files(study, repertory, qlog, name=name)
self.export_study_description(study, repertory, qlog, name=name)
self._export_REP(study, repertory, files, qlog, name=name)
self.export_additional_files(study, repertory, qlog, name=name)
self.export_study_description(study, repertory, qlog, name=name)
self._export_REP(study, repertory, files, qlog, name=name)
return True
return True
except Exception as e:
logger.error(f"Failed to export study to {self._type}")
logger_exception(e)
return False
###########
# RESULTS #
......
......@@ -158,8 +158,11 @@ class SolverLogWindow(PamhyrWindow):
self.setup_workdir()
self.setup_process()
self.export()
self.run()
ok = self.export()
if ok:
self.run()
else:
self._log(f" *** Failed to export study to {self._solver._type}", color="red")
def setup_action(self):
self.find(QAction, "action_start").setEnabled(False)
......@@ -210,9 +213,11 @@ class SolverLogWindow(PamhyrWindow):
def export(self):
self._log(f" *** Export study {self._solver.name}", color="blue")
self._solver.export(self._study, self._workdir, qlog=self._output)
ok = self._solver.export(self._study, self._workdir, qlog=self._output)
self.update()
return ok
def closeEvent(self, event):
self._alarm.stop()
super(SolverLogWindow, self).closeEvent(event)
......@@ -319,10 +324,14 @@ class SolverLogWindow(PamhyrWindow):
def start(self):
if self._solver.is_stoped():
self._log(f" *** Export study {self._solver.name}", color="blue")
self._solver.export(self._study, self._workdir, qlog=self._output)
self.update()
self._process = self.new_process(self._parent)
ok = self._solver.export(self._study, self._workdir, qlog=self._output)
if not ok:
self._log(f" *** Failed to export", color="red")
self.update()
return
else:
self.update()
self._process = self.new_process(self._parent)
self._log(" *** Start", color="blue")
self._results = None
......
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