mirror of https://gitlab.com/pamhyr/pamhyr2
Solver: Fix SIN export and error handler at export.
parent
ffdeb28bfd
commit
ec91a8b63f
|
|
@ -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 #
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue