mirror of https://gitlab.com/pamhyr/pamhyr2
Solver: Add some mage export.
parent
d893db4ef7
commit
6a241f7a67
|
|
@ -261,7 +261,8 @@ class Reach:
|
|||
# Get all guide line name
|
||||
guide_set = reduce(
|
||||
lambda acc, x: set(x).union(acc),
|
||||
points_name
|
||||
points_name,
|
||||
set()
|
||||
)
|
||||
|
||||
# Get incomplete guideline
|
||||
|
|
@ -271,7 +272,8 @@ class Reach:
|
|||
map(
|
||||
lambda l: list(set(l).symmetric_difference(guide_set)),
|
||||
points_name
|
||||
)
|
||||
),
|
||||
[]
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -115,11 +115,17 @@ class AbstractSolver(object):
|
|||
self._path_output = path
|
||||
self._cmd_output = cmd
|
||||
|
||||
# Export
|
||||
def export(self, study):
|
||||
##########
|
||||
# Export #
|
||||
##########
|
||||
|
||||
def export(self, study, repertory, qlog = None):
|
||||
raise NotImplementedMethodeError(self, self.export)
|
||||
|
||||
# Run
|
||||
#######
|
||||
# Run #
|
||||
#######
|
||||
|
||||
def run_input_data_fomater(self):
|
||||
if self._cmd_input == "":
|
||||
return True
|
||||
|
|
|
|||
|
|
@ -1,5 +1,9 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
|
||||
from tools import timer
|
||||
|
||||
from Solver.ASolver import AbstractSolver
|
||||
|
||||
class Mage(AbstractSolver):
|
||||
|
|
@ -45,6 +49,88 @@ class Mage(AbstractSolver):
|
|||
|
||||
return lst
|
||||
|
||||
##########
|
||||
# Export #
|
||||
##########
|
||||
|
||||
@timer
|
||||
def _export_ST(self, study, repertory, qlog = None):
|
||||
if qlog is not None:
|
||||
qlog.put("Export ST file")
|
||||
|
||||
# Write header
|
||||
for edge in study.river.edges():
|
||||
name = f"Reach_{edge.id}"
|
||||
|
||||
with open(os.path.join(repertory, f"{name}.ST"), "w+") as f:
|
||||
f.write("* This file is generate by PAMHYR, please don't modify\n")
|
||||
|
||||
for profile in edge.reach.profiles:
|
||||
num = f"{profile.num:>6}"
|
||||
c1 = f"{profile.code1:>6}"
|
||||
c2 = f"{profile.code2:>6}"
|
||||
t = f"{len(profile.points):>6}"
|
||||
kp = f"{profile.kp:>13.4f}"
|
||||
name = profile.name
|
||||
|
||||
f.write(f"{num}{c1}{c2}{t}{kp} {name}\n")
|
||||
|
||||
for point in profile.points:
|
||||
x = f"{point.x:>13.4f}"
|
||||
y = f"{point.y:>13.4f}"
|
||||
z = f"{point.z:>13.4f}"
|
||||
n = point.name
|
||||
|
||||
f.write(f"{x}{y}{z} {n}\n")
|
||||
|
||||
f.write(f" 999.9990 999.9990 999.9990\n")
|
||||
|
||||
f.write("* END OF FILE")
|
||||
|
||||
def _export_BC(self, bound, repertory, qlog = None):
|
||||
t = "XX"
|
||||
if bound.bctype == "ZD":
|
||||
t = "AVA"
|
||||
elif bound.bctype == "TD":
|
||||
t = "HYD"
|
||||
else:
|
||||
return None
|
||||
|
||||
if qlog is not None:
|
||||
qlog.put(f"Export {t} file")
|
||||
|
||||
with open(os.path.join(repertory, f"0.{t}"), "w+") as f:
|
||||
f.write("* This file is generate by PAMHYR, please don't modify\n")
|
||||
|
||||
name = f"{bound.node.id:3}".replace(" ", "x")
|
||||
f.write(f"* {bound.node.name} ({name}) {bound.bctype}\n")
|
||||
f.write(f"${name}\n")
|
||||
header = bound.header
|
||||
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("* END OF FILE")
|
||||
|
||||
|
||||
@timer
|
||||
def _export_bound_cond(self, study, repertory, qlog = None):
|
||||
# Write header
|
||||
lst = study.river.boundary_condition
|
||||
for tab in ["liquid", "solid", "suspenssion"]:
|
||||
for bound in lst.get_tab(tab):
|
||||
self._export_BC(bound, repertory, qlog)
|
||||
|
||||
@timer
|
||||
def export(self, study, repertory, qlog = None):
|
||||
self._export_ST(study, repertory, qlog)
|
||||
|
||||
return True
|
||||
|
||||
##########
|
||||
# MAGE 7 #
|
||||
##########
|
||||
|
||||
class Mage7(Mage):
|
||||
def __init__(self, name):
|
||||
|
|
@ -58,6 +144,9 @@ class Mage7(Mage):
|
|||
|
||||
return lst
|
||||
|
||||
##########
|
||||
# MAGE 8 #
|
||||
##########
|
||||
|
||||
class Mage8(Mage):
|
||||
def __init__(self, name):
|
||||
|
|
@ -75,3 +164,57 @@ class Mage8(Mage):
|
|||
lst.insert(i+1, ("mage_precision_reduction_factor_r", "1"))
|
||||
|
||||
return lst
|
||||
|
||||
##########
|
||||
# Export #
|
||||
##########
|
||||
|
||||
@timer
|
||||
def _export_PAR(self, study, repertory, qlog = None):
|
||||
if qlog is not None:
|
||||
qlog.put("Export PAR file")
|
||||
|
||||
with open(os.path.join(repertory, "0.PAR"), "w+") as f:
|
||||
f.write("* This file is generate by PAMHYR, please don't modify\n")
|
||||
|
||||
params = study.river.get_params(self.type).parameters
|
||||
for p in params:
|
||||
name = p.name\
|
||||
.replace("all_", "")\
|
||||
.replace("mage_", "")
|
||||
value = p.value
|
||||
|
||||
f.write(f"{name} {value}\n")
|
||||
|
||||
f.write("* END OF FILE")
|
||||
|
||||
@timer
|
||||
def _export_NET(self, study, repertory, qlog = None):
|
||||
if qlog is not None:
|
||||
qlog.put("Export NET file")
|
||||
|
||||
with open(os.path.join(repertory, "0.NET"), "w+") as f:
|
||||
f.write("* This file is generate by PAMHYR, please don't modify\n")
|
||||
|
||||
edges = study.river.edges()
|
||||
for e in edges:
|
||||
name = e.name.replace(" ", "_")
|
||||
if e._name == "":
|
||||
name = f"Reach_{e.id}"
|
||||
|
||||
n1 = f"{e.node1.id:3}".replace(" ", "x")
|
||||
n2 = f"{e.node2.id:3}".replace(" ", "x")
|
||||
files = name + ".ST"
|
||||
|
||||
f.write(f"{name} {n1} {n2} {files}\n")
|
||||
|
||||
f.write("* END OF FILE")
|
||||
|
||||
@timer
|
||||
def export(self, study, repertory, qlog = None):
|
||||
self._export_PAR(study, repertory, qlog)
|
||||
self._export_NET(study, repertory, qlog)
|
||||
self._export_ST(study, repertory, qlog)
|
||||
self._export_bound_cond(study, repertory, qlog)
|
||||
|
||||
return True
|
||||
|
|
|
|||
|
|
@ -9,12 +9,12 @@ _translate = QCoreApplication.translate
|
|||
|
||||
solver_long_name = {
|
||||
"generic": _translate("Solvers", "Generic"),
|
||||
"mage7": _translate("Solvers", "Mage version 7"),
|
||||
# "mage7": _translate("Solvers", "Mage version 7"),
|
||||
"mage8": _translate("Solvers", "Mage version 8"),
|
||||
}
|
||||
|
||||
solver_type_list = {
|
||||
"generic": GenericSolver,
|
||||
"mage7": Mage7,
|
||||
# "mage7": Mage7,
|
||||
"mage8": Mage8,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -93,6 +93,11 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow):
|
|||
self._alarm.start(500)
|
||||
self._output = Queue()
|
||||
|
||||
self._log(f" *** Export study {self._solver.name}", color="blue")
|
||||
self._solver.export(self._study, "/tmp/pamhyr/0/", qlog = self._output)
|
||||
|
||||
self.update()
|
||||
|
||||
self._log(f" *** Run solver {self._solver.name}", color="blue")
|
||||
self._solver.run(self._process, self._output)
|
||||
|
||||
|
|
@ -133,7 +138,6 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow):
|
|||
self.find(QAction, "action_pause").setEnabled(False)
|
||||
self.find(QAction, "action_stop").setEnabled(False)
|
||||
|
||||
|
||||
while self._output.qsize() != 0:
|
||||
s = self._output.get()
|
||||
self._log(s)
|
||||
|
|
|
|||
Loading…
Reference in New Issue