From c698f2af2b3b80df7f30dd94d268b7f946e8379a Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Wed, 18 Sep 2024 16:05:40 +0200 Subject: [PATCH] RubarBE (Rubar3): Add minimal rubar3. --- src/Solver/RubarBE.py | 104 ++++++++++++++++++++++++++++++++++-------- src/Solver/Solvers.py | 4 +- 2 files changed, 89 insertions(+), 19 deletions(-) diff --git a/src/Solver/RubarBE.py b/src/Solver/RubarBE.py index 9d2e7bee..3ad4723e 100644 --- a/src/Solver/RubarBE.py +++ b/src/Solver/RubarBE.py @@ -30,13 +30,13 @@ from Model.Results.River.River import River, Reach, Profile logger = logging.getLogger() -class RubarBE(CommandLineSolver): - _type = "rubarbe" +class Rubar3(CommandLineSolver): + _type = "rubar3" def __init__(self, name): - super(RubarBE, self).__init__(name) + super(Rubar3, self).__init__(name) - self._type = "rubarbe" + self._type = "rubar3" self._cmd_input = "" self._cmd_solver = "@path @input -o @output" @@ -44,9 +44,9 @@ class RubarBE(CommandLineSolver): @classmethod def default_parameters(cls): - lst = super(RubarBE, cls).default_parameters() + # lst = super(Rubar3, cls).default_parameters() - lst += [ + lst = [ ("rubarbe_cfl", "0.50000E+00"), ("rubarbe_condam", "1"), ("rubarbe_condav", "3"), @@ -60,10 +60,10 @@ class RubarBE(CommandLineSolver): ("rubarbe_tinit", "000:00:00:00"), ("rubarbe_tmax", "999:99:99:00"), ("rubarbe_tiopdt", "000:00:00:00"), - ("rubarbe_dt", "3000.0"), + ("rubarbe_dt", "5.0"), ("rubarbe_ts", "999:99:99:00"), - ("rubarbe_dtsauv", "999:99:99:00"), - ("rubarbe_psave", "999:99:99:00"), + ("rubarbe_dtsauv", "00:00:00:05"), + ("rubarbe_psave", "00:00:00:05"), ("rubarbe_fdeb1", "1"), ("rubarbe_fdeb2", "10"), ("rubarbe_fdeb3", "100"), @@ -119,21 +119,21 @@ class RubarBE(CommandLineSolver): ########## def cmd_args(self, study): - lst = super(RubarBE, self).cmd_args(study) + lst = super(Rubar3, self).cmd_args(study) return lst def input_param(self): name = self._study.name - return f"{name}.REP" + return f"{name}" def output_param(self): name = self._study.name - return f"{name}.BIN" + return f"{name}" def log_file(self): name = self._study.name - return f"{name}.TRA" + return f"{name}" def export(self, study, repertory, qlog=None): self._study = study @@ -145,6 +145,10 @@ class RubarBE(CommandLineSolver): self._export_mail(study, repertory, qlog, name=name) self._export_condin(study, repertory, qlog, name=name) self._export_stricklers(study, repertory, qlog, name=name) + self._export_hydro(study, repertory, qlog, name=name) + self._export_condav(study, repertory, qlog, name=name) + + return True def _export_donnee(self, study, repertory, qlog, name="0"): if qlog is not None: @@ -168,6 +172,9 @@ class RubarBE(CommandLineSolver): name = param.name value = param.value + if "all_" in name: + continue + if value != "": # Value format if value.count(':') == 3: @@ -276,7 +283,9 @@ class RubarBE(CommandLineSolver): if label[0] == "r": label = label[1].upper() else: - label = lable[0] + label = label[1].upper() + else: + label = " " y = point.y z = point.z @@ -392,7 +401,7 @@ class RubarBE(CommandLineSolver): l_h_s = self._export_condin_profile_height_speed(last, data) # First mail - f.write(f"{1:>5} {f_h_s[0]} {f_h_s[1]}") + f.write(f"{1:>5} {f_h_s[0]} {f_h_s[1]}\n") ind = 2 it = iter(profiles) @@ -418,7 +427,7 @@ class RubarBE(CommandLineSolver): ind += 1 # Last mail - f.write(f"{ind:>5} {f_h_s[0]} {f_h_s[1]}") + f.write(f"{ind:>5} {f_h_s[0]} {f_h_s[1]}\n") def _export_condin_init_data(self, ics): data = {} @@ -435,7 +444,66 @@ class RubarBE(CommandLineSolver): z = data[profile.rk][0] q = data[profile.rk][1] - height = z - profile.z_min() + #height = z - profile.z_min() speed = profile.speed(q, z) - return height, speed + return z, speed + + def _export_hydro(self, study, repertory, qlog, name="0"): + if qlog is not None: + qlog.put("Export HYDRO file") + + with open( + os.path.join( + repertory, f"hydro.{name}" + ), "w+" + ) as f: + bcs = [] + for edge in study.river.enable_edges(): + for bound in study.river.boundary_condition.get_tab("liquid"): + # BC is an hydrogramme + if bound.bctype == "TD" or bound.bctype == "PC": + # BC is on input node of this reach + if bound.node == edge.node1: + bcs.append(bound) + + for bc in bcs: + f.write(f"{len(bc)}\n") + for d0, d1 in bc.data: + f.write(f"{d0} {d1}\n") + + def _export_condav(self, study, repertory, qlog, name="0"): + if qlog is not None: + qlog.put("Export CONDAV file") + + with open( + os.path.join( + repertory, f"condav.{name}" + ), "w+" + ) as f: + bcs = [] + for edge in study.river.enable_edges(): + for bound in study.river.boundary_condition.get_tab("liquid"): + # BC is an hydrogramme + if bound.bctype == "ZD" or bound.bctype == "TZ": + # BC is on input node of this reach + if bound.node == edge.node2: + bcs.append(bound) + + for bc in bcs: + f.write(f"{len(bc)}\n") + for d0, d1 in bc.data: + f.write(f"{d0} {d1}\n") + + +class RubarBE(Rubar3): + _type = "rubarbe" + + def __init__(self, name): + super(RubarBE, self).__init__(name) + + self._type = "rubarbe" + + self._cmd_input = "" + self._cmd_solver = "@path @input -o @output" + self._cmd_output = "" diff --git a/src/Solver/Solvers.py b/src/Solver/Solvers.py index cd336e68..d0a8a981 100644 --- a/src/Solver/Solvers.py +++ b/src/Solver/Solvers.py @@ -22,7 +22,7 @@ from Solver.GenericSolver import GenericSolver from Solver.Mage import ( Mage7, Mage8, MageFake7, ) -from Solver.RubarBE import RubarBE +from Solver.RubarBE import Rubar3, RubarBE _translate = QCoreApplication.translate @@ -32,6 +32,7 @@ solver_long_name = { "mage8": "Mage v8", # "mage_fake7": "Mage fake v7", # "rubarbe": "RubarBE", + # "rubar3": "Rubar3", } solver_type_list = { @@ -40,4 +41,5 @@ solver_type_list = { "mage8": Mage8, # "mage_fake7": MageFake7, # "rubarbe": RubarBE, + # "rubar3": Rubar3, } -- GitLab