SolverParameters: Add Scenario reference.

scenarios
Pierre-Antoine Rouby 2024-07-22 11:49:33 +02:00
parent ba4603e850
commit 4271fbb85f
1 changed files with 86 additions and 57 deletions

View File

@ -20,6 +20,7 @@ from copy import copy
from tools import trace, timer from tools import trace, timer
from Solver.Solvers import solver_type_list from Solver.Solvers import solver_type_list
from Model.Scenario import Scenario
from Model.Tools.PamhyrList import PamhyrModelList from Model.Tools.PamhyrList import PamhyrModelList
@ -80,13 +81,15 @@ class SolverParametersList(PamhyrModelList):
@classmethod @classmethod
def _db_create(cls, execute): def _db_create(cls, execute):
execute(""" execute(f"""
CREATE TABLE solver_parameter( CREATE TABLE solver_parameter(
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
ind INTEGER NOT NULL, ind INTEGER NOT NULL,
name TEXT NOT NULL, name TEXT NOT NULL,
value 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(".") major, minor, release = version.strip().split(".")
if major == minor == "0": if major == minor == "0":
if int(release) < 3: release = int(release)
if release < 3:
execute( execute(
"UPDATE solver_parameter SET name='mage_implicitation' " + "UPDATE solver_parameter SET name='mage_implicitation' " +
"WHERE name='mage_implication'" "WHERE name='mage_implication'"
@ -107,66 +111,91 @@ class SolverParametersList(PamhyrModelList):
"WHERE name='mage_iter_type'" "WHERE name='mage_iter_type'"
) )
if int(release) < 4: def insert(name, value, ind):
solvers = execute( return execute(
"SELECT DISTINCT solver FROM solver_parameter") "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 release < 4:
if solver != "mage8": cls._db_update_to_0_0_4(execute, insert)
continue
data = execute("SELECT ind, name, value " + if release < 7:
"FROM solver_parameter " + cls._db_update_to_0_0_7(execute, insert)
f"WHERE solver = '{solver}' " +
"ORDER BY ind ACS")
execute( if release < 14:
"DELETE FROM solver_parameter " + cls._db_update_to_0_0_14(execute)
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
return cls._update_submodel(execute, version) 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 @classmethod
def _db_load(cls, execute, data=None): def _db_load(cls, execute, data=None):
status = data["status"] status = data["status"]