diff --git a/src/Model/SolverParameters/SolverParametersList.py b/src/Model/SolverParameters/SolverParametersList.py index ef7dfad7..3b6a1dd1 100644 --- a/src/Model/SolverParameters/SolverParametersList.py +++ b/src/Model/SolverParameters/SolverParametersList.py @@ -20,6 +20,7 @@ from copy import copy from tools import trace, timer from Solver.Solvers import solver_type_list +from Model.Scenario import Scenario from Model.Tools.PamhyrList import PamhyrModelList @@ -80,13 +81,15 @@ class SolverParametersList(PamhyrModelList): @classmethod def _db_create(cls, execute): - execute(""" + execute(f""" CREATE TABLE solver_parameter( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, ind INTEGER NOT NULL, name TEXT NOT NULL, value TEXT NOT NULL, - solver TEXT NOT NULL + solver TEXT NOT NULL, + {Scenario.create_db_add_scenario()}, + {Scenario.create_db_add_scenario_fk()} ) """) @@ -97,7 +100,8 @@ class SolverParametersList(PamhyrModelList): major, minor, release = version.strip().split(".") if major == minor == "0": - if int(release) < 3: + release = int(release) + if release < 3: execute( "UPDATE solver_parameter SET name='mage_implicitation' " + "WHERE name='mage_implication'" @@ -107,66 +111,91 @@ class SolverParametersList(PamhyrModelList): "WHERE name='mage_iter_type'" ) - if int(release) < 4: - solvers = execute( - "SELECT DISTINCT solver FROM solver_parameter") + def insert(name, value, ind): + return execute( + "INSERT INTO " + + "solver_parameter(ind, name, value, solver) " + + "VALUES (" + + f"{ind}, " + + f"'{cls._db_format(name)}', " + + f"'{cls._db_format(value)}', " + + f"'{cls._db_format(solver)}'" + + ")" + ) - for solver in solvers: - if solver != "mage8": - continue + if release < 4: + cls._db_update_to_0_0_4(execute, insert) - data = execute("SELECT ind, name, value " + - "FROM solver_parameter " + - f"WHERE solver = '{solver}' " + - "ORDER BY ind ACS") + if release < 7: + cls._db_update_to_0_0_7(execute, insert) - execute( - "DELETE FROM solver_parameter " + - f"WHERE solver = '{solver}'" - ) - - def insert(name, value, ind): return execute( - "INSERT INTO " + - "solver_parameter(ind, name, value, solver) " + - "VALUES (" + - f"{ind}, " + - f"'{cls._db_format(name)}', " + - f"'{cls._db_format(value)}', " + - f"'{cls._db_format(solver)}'" + - ")" - ) - - ind = 0 - lst = [] - for v in data: - insert(v[0], v[1], ind) - ind += 1 - - if int(release) < 7: - insert("mage_init_internal", "N", ind) - ind += 1 - - new = [ - ("mage_sediment_masse_volumique", "2650.0"), - ("mage_sediment_angle_repos", "40.0"), - ("mage_sediment_porosity", "0.40"), - ("mage_distance_han", "0.0"), - ("mage_distance_chargement_d50", "100.0"), - ("mage_distance_chargement_sigma", "100.0"), - ("mage_methode_modification_geometrie", "1"), - ("mage_shields_critique", "1"), - ("mage_shields_correction", "1"), - ("mage_capacite_solide", "1"), - ("mage_pas_de_temps_charriage", "1"), - ("mage_facteur_multiplicateur", "1.0"), - ] - - for v in new: - insert(v[0], v[1], ind) - ind += 1 + if release < 14: + cls._db_update_to_0_0_14(execute) return cls._update_submodel(execute, version) + @classmethod + def _db_update_to_0_0_4(cls, execute, insert): + solvers = execute( + "SELECT DISTINCT solver FROM solver_parameter" + ) + + for solver in solvers: + if solver != "mage8": + continue + + data = execute("SELECT ind, name, value " + + "FROM solver_parameter " + + f"WHERE solver = '{solver}' " + + "ORDER BY ind ACS") + + execute( + "DELETE FROM solver_parameter " + + f"WHERE solver = '{solver}'" + ) + + ind = 0 + lst = [] + for v in data: + insert(v[0], v[1], ind) + ind += 1 + + @classmethod + def _db_update_to_0_0_7(cls, execute, insert): + solvers = execute( + "SELECT DISTINCT solver FROM solver_parameter" + ) + + for solver in solvers: + if solver != "mage8": + continue + + insert("mage_init_internal", "N", ind) + ind += 1 + + new = [ + ("mage_sediment_masse_volumique", "2650.0"), + ("mage_sediment_angle_repos", "40.0"), + ("mage_sediment_porosity", "0.40"), + ("mage_distance_han", "0.0"), + ("mage_distance_chargement_d50", "100.0"), + ("mage_distance_chargement_sigma", "100.0"), + ("mage_methode_modification_geometrie", "1"), + ("mage_shields_critique", "1"), + ("mage_shields_correction", "1"), + ("mage_capacite_solide", "1"), + ("mage_pas_de_temps_charriage", "1"), + ("mage_facteur_multiplicateur", "1.0"), + ] + + for v in new: + insert(v[0], v[1], ind) + ind += 1 + + @classmethod + def _db_update_to_0_0_14(cls, execute): + Scenario.update_db_add_scenario(execute, "solver_parameter") + @classmethod def _db_load(cls, execute, data=None): status = data["status"]