diff --git a/src/Model/SolverParameters/SolverParametersList.py b/src/Model/SolverParameters/SolverParametersList.py index 635b1014..025ff815 100644 --- a/src/Model/SolverParameters/SolverParametersList.py +++ b/src/Model/SolverParameters/SolverParametersList.py @@ -19,6 +19,7 @@ from copy import copy from tools import trace, timer from Solver.Solvers import solver_type_list +from Solver.RubarBE import Rubar3 from Model.Scenario import Scenario from Model.Tools.PamhyrDB import SQLSubModel @@ -296,14 +297,20 @@ class SolverParametersList(PamhyrModelList): scenario = data["scenario"] loaded = data['loaded_pid'] - solvers = execute("SELECT DISTINCT solver FROM solver_parameter") + solvers = [ + row[0] for row in + execute("SELECT DISTINCT solver FROM solver_parameter") + ] new = {} if scenario is None: return new for solver in solvers: - solver = solver[0] + if solver == "rubar3" and "rubarbe" not in solvers: + new["rubarbe"] = cls._db_load_rubar3(execute, data) + continue + if solver not in solver_type_list: continue @@ -327,6 +334,32 @@ class SolverParametersList(PamhyrModelList): return new + @classmethod + def _db_load_rubar3(cls, execute, data): + """Rubar3 is no longer offered: RubarBE, its generic version, + takes the parameters of a Rubar3 study (same rubarbe_* keys, + RubarBE reads them the same way). Missing parameters take the + Rubar3 defaults (no sediment transport), so that the + computation is unchanged. New parameters (new ids): saved as + RubarBE ones with the study, the Rubar3 rows are then ignored""" + status = data["status"] + n = cls(solver_type=solver_type_list["rubarbe"], status=status) + + data['solver'] = "rubar3" + lst = Parameter._db_load(execute, data) + + n._lst = [ + Parameter(name=p.name, value=p.value, status=status) + for _, p in sorted(lst, key=lambda t: t[0]) + ] + names = {p.name for p in n._lst} + n._lst += [ + Parameter(name=name, value=value, status=status) + for name, value in Rubar3.default_parameters() + if name not in names + ] + return n + def _db_save(self, execute, data=None): t = self._solver._type execute( diff --git a/src/Solver/Solvers.py b/src/Solver/Solvers.py index e0244744..e80a1591 100644 --- a/src/Solver/Solvers.py +++ b/src/Solver/Solvers.py @@ -36,7 +36,6 @@ solver_long_name = { "adistswc": "Adis-TS_WC", "adisttwc": "Adis-TT_WC", "rubarbe": "RubarBE", - "rubar3": "Rubar3", } solver_type_list = { @@ -47,5 +46,4 @@ solver_type_list = { "adistswc": AdisTSwc, "adisttwc": AdisTTwc, "rubarbe": RubarBE, - "rubar3": Rubar3, } diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py index 6b84d6eb..b13ba086 100644 --- a/src/View/MainWindow.py +++ b/src/View/MainWindow.py @@ -30,7 +30,7 @@ from platformdirs import user_cache_dir from Solver.AdisTS import AdisTS from Solver.Mage import Mage8 -from Solver.RubarBE import Rubar3 +from Solver.RubarBE import RubarBE from tools import logger_exception, pamhyr_db_need_update, timer from PyQt5 import QtGui @@ -2082,7 +2082,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): dialog.setFileMode(QFileDialog.FileMode.ExistingFile) dialog.setDefaultSuffix(".BIN") # dialog.setFilter(dialog.filter() | QtCore.QDir.Hidden) - dialog.setNameFilters(['Mage (*.BIN)', 'Rubar3 (profil.*)']) + dialog.setNameFilters(['Mage (*.BIN)', 'RubarBE (profil.*)']) if self._study.filename is not None: if self._last_solver is None: @@ -2102,7 +2102,7 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): if ".BIN" in file_name[0]: solver = Mage8("Mage8") else: - solver = Rubar3("Rubar3") + solver = RubarBE("RubarBE") self.open_solver_results( solver, diff --git a/src/config.py b/src/config.py index 466eed78..a54517a9 100644 --- a/src/config.py +++ b/src/config.py @@ -428,15 +428,7 @@ class Config(SQL): new._cmd_solver = f"\"{path}{ext}\" @args @input" self._solvers.append(new) - # Rubar3 - ctor = solver_type_list["rubar3"] - new = ctor("default-Rubar3") - new._description = "Default Pamhyr2 Rubar 3 version" - path = os.path.join("@install_dir", "rubar", f"rubarbe{ext}") - new._cmd_solver = f""""{path}" @args @input""" - self._solvers.append(new) - - # RubarBE (same executable as Rubar3, see notice ยง10.3) + # RubarBE ctor = solver_type_list["rubarbe"] new = ctor("default-RubarBE") new._description = "Default Pamhyr2 RubarBE version" @@ -444,14 +436,6 @@ class Config(SQL): new._cmd_solver = f""""{path}" @args @input""" self._solvers.append(new) - # Mage fake 7 -# ctor = solver_type_list["mage_fake7"] -# new = ctor("default-mage-fake-7") -# new._description = "Default Pamhyr2 mage fake version 7" -# new._cmd_solver = f"""\ -# "@install_dir/mage8/mage_as7{ext}" @args @input""" -# self._solvers.append(new) - # Backup self.backup_enable = True # self.backup_path = ""