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
|
# Get all guide line name
|
||||||
guide_set = reduce(
|
guide_set = reduce(
|
||||||
lambda acc, x: set(x).union(acc),
|
lambda acc, x: set(x).union(acc),
|
||||||
points_name
|
points_name,
|
||||||
|
set()
|
||||||
)
|
)
|
||||||
|
|
||||||
# Get incomplete guideline
|
# Get incomplete guideline
|
||||||
|
|
@ -271,7 +272,8 @@ class Reach:
|
||||||
map(
|
map(
|
||||||
lambda l: list(set(l).symmetric_difference(guide_set)),
|
lambda l: list(set(l).symmetric_difference(guide_set)),
|
||||||
points_name
|
points_name
|
||||||
)
|
),
|
||||||
|
[]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -115,11 +115,17 @@ class AbstractSolver(object):
|
||||||
self._path_output = path
|
self._path_output = path
|
||||||
self._cmd_output = cmd
|
self._cmd_output = cmd
|
||||||
|
|
||||||
# Export
|
##########
|
||||||
def export(self, study):
|
# Export #
|
||||||
|
##########
|
||||||
|
|
||||||
|
def export(self, study, repertory, qlog = None):
|
||||||
raise NotImplementedMethodeError(self, self.export)
|
raise NotImplementedMethodeError(self, self.export)
|
||||||
|
|
||||||
# Run
|
#######
|
||||||
|
# Run #
|
||||||
|
#######
|
||||||
|
|
||||||
def run_input_data_fomater(self):
|
def run_input_data_fomater(self):
|
||||||
if self._cmd_input == "":
|
if self._cmd_input == "":
|
||||||
return True
|
return True
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from tools import timer
|
||||||
|
|
||||||
from Solver.ASolver import AbstractSolver
|
from Solver.ASolver import AbstractSolver
|
||||||
|
|
||||||
class Mage(AbstractSolver):
|
class Mage(AbstractSolver):
|
||||||
|
|
@ -45,6 +49,88 @@ class Mage(AbstractSolver):
|
||||||
|
|
||||||
return lst
|
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):
|
class Mage7(Mage):
|
||||||
def __init__(self, name):
|
def __init__(self, name):
|
||||||
|
|
@ -58,6 +144,9 @@ class Mage7(Mage):
|
||||||
|
|
||||||
return lst
|
return lst
|
||||||
|
|
||||||
|
##########
|
||||||
|
# MAGE 8 #
|
||||||
|
##########
|
||||||
|
|
||||||
class Mage8(Mage):
|
class Mage8(Mage):
|
||||||
def __init__(self, name):
|
def __init__(self, name):
|
||||||
|
|
@ -75,3 +164,57 @@ class Mage8(Mage):
|
||||||
lst.insert(i+1, ("mage_precision_reduction_factor_r", "1"))
|
lst.insert(i+1, ("mage_precision_reduction_factor_r", "1"))
|
||||||
|
|
||||||
return lst
|
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 = {
|
solver_long_name = {
|
||||||
"generic": _translate("Solvers", "Generic"),
|
"generic": _translate("Solvers", "Generic"),
|
||||||
"mage7": _translate("Solvers", "Mage version 7"),
|
# "mage7": _translate("Solvers", "Mage version 7"),
|
||||||
"mage8": _translate("Solvers", "Mage version 8"),
|
"mage8": _translate("Solvers", "Mage version 8"),
|
||||||
}
|
}
|
||||||
|
|
||||||
solver_type_list = {
|
solver_type_list = {
|
||||||
"generic": GenericSolver,
|
"generic": GenericSolver,
|
||||||
"mage7": Mage7,
|
# "mage7": Mage7,
|
||||||
"mage8": Mage8,
|
"mage8": Mage8,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,11 @@ class SolverLogWindow(ASubMainWindow, ListedSubWindow):
|
||||||
self._alarm.start(500)
|
self._alarm.start(500)
|
||||||
self._output = Queue()
|
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._log(f" *** Run solver {self._solver.name}", color="blue")
|
||||||
self._solver.run(self._process, self._output)
|
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_pause").setEnabled(False)
|
||||||
self.find(QAction, "action_stop").setEnabled(False)
|
self.find(QAction, "action_stop").setEnabled(False)
|
||||||
|
|
||||||
|
|
||||||
while self._output.qsize() != 0:
|
while self._output.qsize() != 0:
|
||||||
s = self._output.get()
|
s = self._output.get()
|
||||||
self._log(s)
|
self._log(s)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue