Solver: Fix SIN export and error handler at export.

setup.py
Pierre-Antoine Rouby 2024-04-22 11:33:07 +02:00
parent ffdeb28bfd
commit ec91a8b63f
2 changed files with 54 additions and 49 deletions

View File

@ -20,7 +20,7 @@ import os
import logging import logging
import numpy as np import numpy as np
from tools import timer, trace from tools import timer, trace, logger_exception
from Solver.CommandLine import CommandLineSolver from Solver.CommandLine import CommandLineSolver
from Checker.Mage import ( from Checker.Mage import (
@ -137,7 +137,6 @@ class Mage(CommandLineSolver):
for line in lines: for line in lines:
rep_file.write(line.line) rep_file.write(line.line)
@timer
def _export_ST(self, study, repertory, qlog, name="0"): def _export_ST(self, study, repertory, qlog, name="0"):
files = [] files = []
@ -236,7 +235,6 @@ class Mage(CommandLineSolver):
# Point line # Point line
wfile.write(f"{x} {y} {z} {n} {sediment}\n") wfile.write(f"{x} {y} {z} {n} {sediment}\n")
@timer
def _export_BC(self, t, bounds, repertory, qlog, name="0"): def _export_BC(self, t, bounds, repertory, qlog, name="0"):
files = [] files = []
@ -270,7 +268,6 @@ class Mage(CommandLineSolver):
return files return files
@timer
def _export_bound_cond(self, study, repertory, qlog, name="0"): def _export_bound_cond(self, study, repertory, qlog, name="0"):
files = [] files = []
lst = study.river.boundary_condition lst = study.river.boundary_condition
@ -301,7 +298,6 @@ class Mage(CommandLineSolver):
return files return files
@timer
def _export_lateral_contrib(self, study, repertory, qlog, name="0"): def _export_lateral_contrib(self, study, repertory, qlog, name="0"):
files = [] files = []
lst = study.river.lateral_contribution lst = study.river.lateral_contribution
@ -320,7 +316,6 @@ class Mage(CommandLineSolver):
return files return files
@timer
def _export_LC(self, study, lateral, f, qlog, name="0"): def _export_LC(self, study, lateral, f, qlog, name="0"):
if lateral.edge is None: if lateral.edge is None:
return return
@ -352,7 +347,6 @@ class Mage(CommandLineSolver):
else: else:
f.write(f"{d[0]:10.3f}{d[1]:10.3f}\n") f.write(f"{d[0]:10.3f}{d[1]:10.3f}\n")
@timer
def _export_RUG(self, study, repertory, qlog, name="0"): def _export_RUG(self, study, repertory, qlog, name="0"):
files = [] files = []
@ -396,7 +390,6 @@ class Mage(CommandLineSolver):
return files return files
@timer
def _export_INI(self, study, repertory, qlog, name="0"): def _export_INI(self, study, repertory, qlog, name="0"):
files = [] files = []
@ -439,7 +432,6 @@ class Mage(CommandLineSolver):
files.append(f"{name}.INI") files.append(f"{name}.INI")
return files return files
@timer
def _export_CAS(self, study, repertory, qlog, name="0"): def _export_CAS(self, study, repertory, qlog, name="0"):
files = [] files = []
@ -472,7 +464,6 @@ class Mage(CommandLineSolver):
return files return files
@timer
def _export_SIN(self, study, repertory, qlog, name="0"): def _export_SIN(self, study, repertory, qlog, name="0"):
files = [] files = []
@ -504,35 +495,41 @@ class Mage(CommandLineSolver):
if not hs.input_reach.is_enable(): if not hs.input_reach.is_enable():
continue continue
if hs.input_kp is None:
continue
f.write( f.write(
'* ouvrage au pk ' + '* ouvrage au pk ' +
f"{float(hs.input_kp):>12.1f}" + ' ' + f"{float(hs.input_kp):>12.1f}" + ' ' +
hs.name + '\n' hs.name + '\n'
) )
for bhs in hs.basic_structures: self._export_SIN_bhs(study, sin_dict, hs, f)
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)
]
)
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"
)
return files return files
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)
]
)
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): def _export_SIN_parameters(self, bhs):
res = [9999.999] * 5 res = [9999.999] * 5
@ -591,7 +588,6 @@ class Mage(CommandLineSolver):
return res return res
@timer
def _export_VAR(self, study, repertory, qlog, name="0"): def _export_VAR(self, study, repertory, qlog, name="0"):
files = [] files = []
@ -627,7 +623,6 @@ class Mage(CommandLineSolver):
return files return files
@timer
def _export_DEV(self, study, repertory, qlog, name="0"): def _export_DEV(self, study, repertory, qlog, name="0"):
files = [] files = []
@ -650,7 +645,6 @@ class Mage(CommandLineSolver):
return files return files
@timer
def _export_REP(self, study, repertory, files, qlog, name="0"): def _export_REP(self, study, repertory, files, qlog, name="0"):
if qlog is not None: if qlog is not None:
qlog.put("Export REP file") qlog.put("Export REP file")
@ -785,7 +779,6 @@ class Mage8(Mage):
return lst return lst
@timer
def _export_PAR(self, study, repertory, qlog=None, name="0"): def _export_PAR(self, study, repertory, qlog=None, name="0"):
files = [] files = []
@ -820,7 +813,6 @@ class Mage8(Mage):
return files return files
@timer
def _export_NET(self, study, repertory, qlog=None, name="0"): def _export_NET(self, study, repertory, qlog=None, name="0"):
files = [] files = []
@ -844,7 +836,6 @@ class Mage8(Mage):
return files return files
@timer
def _export_QSO(self, bounds, repertory, qlog, name="0"): def _export_QSO(self, bounds, repertory, qlog, name="0"):
files = [] files = []
@ -902,14 +893,19 @@ class Mage8(Mage):
# Generate files # Generate files
files = [] files = []
for func in self.export_func_dict(): try:
files = files + func(study, repertory, qlog, name=name) 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_additional_files(study, repertory, qlog, name=name)
self.export_study_description(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_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 # # RESULTS #

View File

@ -158,8 +158,11 @@ class SolverLogWindow(PamhyrWindow):
self.setup_workdir() self.setup_workdir()
self.setup_process() self.setup_process()
self.export() ok = self.export()
self.run() if ok:
self.run()
else:
self._log(f" *** Failed to export study to {self._solver._type}", color="red")
def setup_action(self): def setup_action(self):
self.find(QAction, "action_start").setEnabled(False) self.find(QAction, "action_start").setEnabled(False)
@ -210,9 +213,11 @@ class SolverLogWindow(PamhyrWindow):
def export(self): def export(self):
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, self._workdir, qlog=self._output) ok = self._solver.export(self._study, self._workdir, qlog=self._output)
self.update() self.update()
return ok
def closeEvent(self, event): def closeEvent(self, event):
self._alarm.stop() self._alarm.stop()
super(SolverLogWindow, self).closeEvent(event) super(SolverLogWindow, self).closeEvent(event)
@ -319,10 +324,14 @@ class SolverLogWindow(PamhyrWindow):
def start(self): def start(self):
if self._solver.is_stoped(): if self._solver.is_stoped():
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, self._workdir, qlog=self._output) ok = self._solver.export(self._study, self._workdir, qlog=self._output)
self.update() if not ok:
self._log(f" *** Failed to export", color="red")
self._process = self.new_process(self._parent) self.update()
return
else:
self.update()
self._process = self.new_process(self._parent)
self._log(" *** Start", color="blue") self._log(" *** Start", color="blue")
self._results = None self._results = None