From e189ab69dc972dc3c746501f351d577dda0f93d5 Mon Sep 17 00:00:00 2001
From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr>
Date: Tue, 29 Aug 2023 13:37:39 +0200
Subject: [PATCH] Mage: Add sediment parameter into solver parameter and update
 DB.

---
 .../SolverParameters/SolverParametersList.py  | 53 +++++++++++++++++++
 src/Model/Study.py                            |  2 +-
 src/Solver/Mage.py                            | 14 +++++
 3 files changed, 68 insertions(+), 1 deletion(-)

diff --git a/src/Model/SolverParameters/SolverParametersList.py b/src/Model/SolverParameters/SolverParametersList.py
index 18c45529..4aae2b37 100644
--- a/src/Model/SolverParameters/SolverParametersList.py
+++ b/src/Model/SolverParameters/SolverParametersList.py
@@ -100,6 +100,59 @@ class SolverParametersList(SQLSubModel):
                 execute(f"UPDATE solver_parameter SET name='mage_implicitation' WHERE name='mage_implication'")
                 execute(f"UPDATE solver_parameter SET name='mage_iteration_type' WHERE name='mage_iter_type'")
 
+            if int(release) < 4:
+                solvers = execute("SELECT DISTINCT solver FROM solver_parameter")
+
+                for solver in solvers:
+                    if solver is not "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}'"
+                    )
+
+                    insert = lambda name, value, ind: execute(
+                            "INSERT INTO " +
+                            "solver_parameter(ind, name, value, solver) "+
+                            "VALUES (" +
+                            f"{ind}, " +
+                            f"'{cls._sql_format(name)}', " +
+                            f"'{cls._sql_format(value)}', " +
+                            f"'{cls._sql_format(solver)}'" +
+                            ")"
+                    )
+
+                    ind = 0
+                    lst = []
+                    for v in data:
+                        insert(v[0], v[1], 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
+
         return cls._update_submodel(execute, version)
 
     @classmethod
diff --git a/src/Model/Study.py b/src/Model/Study.py
index 5b44d0a7..774a03d1 100644
--- a/src/Model/Study.py
+++ b/src/Model/Study.py
@@ -40,7 +40,7 @@ class Study(SQLModel):
 
     def __init__(self, filename = None, init_new = True):
         # Metadata
-        self._version = "0.0.3"
+        self._version = "0.0.4"
         self.creation_date = datetime.now()
         self.last_modification_date = datetime.now()
         self.last_save_date = datetime.now()
diff --git a/src/Solver/Mage.py b/src/Solver/Mage.py
index d75fd6cb..8fdf25a0 100644
--- a/src/Solver/Mage.py
+++ b/src/Solver/Mage.py
@@ -455,6 +455,20 @@ class Mage8(Mage):
         i = names.index("mage_precision_reduction_factor_Q")
         lst.insert(i+1, ("mage_precision_reduction_factor_r", "1"))
 
+        # Mage parameter for sediment module (added in DB 0.0.4)
+        lst.append(("mage_sediment_masse_volumique", "2650.0"))
+        lst.append(("mage_sediment_angle_repos", "40.0"))
+        lst.append(("mage_sediment_porosity", "0.40"))
+        lst.append(("mage_distance_Han", "0.0"))
+        lst.append(("mage_distance_chargement_d50", "100.0"))
+        lst.append(("mage_distance_chargement_sigma", "100.0"))
+        lst.append(("mage_methode_modification_geometrie", "1"))
+        lst.append(("mage_shields_critique", "1"))
+        lst.append(("mage_shields_correction", "1"))
+        lst.append(("mage_capacite_solide", "1"))
+        lst.append(("mage_pas_de_temps_charriage", "1"))
+        lst.append(("mage_facteur_multiplicateur", "1.0"))
+
         return lst
 
     ##########
-- 
GitLab