mirror of https://gitlab.com/pamhyr/pamhyr2
refactoring: refacto solver parameters
parent
63d6c114c0
commit
a64a9867ef
|
|
@ -24,9 +24,9 @@ from Solver.Mage import Mage7, Mage8
|
||||||
_translate = QCoreApplication.translate
|
_translate = QCoreApplication.translate
|
||||||
|
|
||||||
solver_long_name = {
|
solver_long_name = {
|
||||||
"generic": _translate("Solvers", "Generic"),
|
"generic": "Generic",
|
||||||
# "mage7": _translate("Solvers", "Mage version 7"),
|
# "mage7": "Mage v7",
|
||||||
"mage8": _translate("Solvers", "Mage version 8"),
|
"mage8": "Mage v8",
|
||||||
}
|
}
|
||||||
|
|
||||||
solver_type_list = {
|
solver_type_list = {
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ from View.Stricklers.Window import StricklersWindow
|
||||||
from View.Frictions.Window import FrictionsWindow
|
from View.Frictions.Window import FrictionsWindow
|
||||||
from View.SedimentLayers.Window import SedimentLayersWindow
|
from View.SedimentLayers.Window import SedimentLayersWindow
|
||||||
from View.SedimentLayers.Reach.Window import ReachSedimentLayersWindow
|
from View.SedimentLayers.Reach.Window import ReachSedimentLayersWindow
|
||||||
# from View.SolverParameters.Window import SolverParametersWindow
|
from View.SolverParameters.Window import SolverParametersWindow
|
||||||
# from View.RunSolver.Window import SelectSolverWindow, SolverLogWindow
|
# from View.RunSolver.Window import SelectSolverWindow, SolverLogWindow
|
||||||
# from View.CheckList.Window import CheckListWindow
|
# from View.CheckList.Window import CheckListWindow
|
||||||
# from View.Results.Window import ResultsWindow
|
# from View.Results.Window import ResultsWindow
|
||||||
|
|
|
||||||
|
|
@ -34,37 +34,20 @@ from PyQt5.QtWidgets import (
|
||||||
QComboBox,
|
QComboBox,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from View.Tools.PamhyrTable import PamhyrTableModel
|
||||||
|
|
||||||
from View.SolverParameters.UndoCommand import *
|
from View.SolverParameters.UndoCommand import *
|
||||||
from View.SolverParameters import translate as tr
|
|
||||||
|
|
||||||
from Solver.Solvers import solver_long_name, solver_type_list
|
from Solver.Solvers import solver_long_name, solver_type_list
|
||||||
|
|
||||||
|
logger = logging.getLogger()
|
||||||
|
|
||||||
_translate = QCoreApplication.translate
|
_translate = QCoreApplication.translate
|
||||||
|
|
||||||
class TableModel(QAbstractTableModel):
|
class TableModel(PamhyrTableModel):
|
||||||
def __init__(self, data=None, undo=None, tab=""):
|
def _setup_lst(self):
|
||||||
super(QAbstractTableModel, self).__init__()
|
self._tab = self._opt_data
|
||||||
self._headers = list(tr.table_headers.keys())
|
self._lst = self._data.get_params(self._tab)
|
||||||
self._data = data
|
|
||||||
self._undo = undo
|
|
||||||
self._tab = tab
|
|
||||||
self._params = self._data.get_params(self._tab)
|
|
||||||
|
|
||||||
def flags(self, index):
|
|
||||||
options = Qt.ItemIsEnabled | Qt.ItemIsSelectable
|
|
||||||
|
|
||||||
column = index.column()
|
|
||||||
|
|
||||||
if self._headers[column] == "value":
|
|
||||||
options |= Qt.ItemIsEditable
|
|
||||||
|
|
||||||
return options
|
|
||||||
|
|
||||||
def rowCount(self, parent):
|
|
||||||
return len(self._params)
|
|
||||||
|
|
||||||
def columnCount(self, parent):
|
|
||||||
return len(self._headers)
|
|
||||||
|
|
||||||
def data(self, index, role):
|
def data(self, index, role):
|
||||||
if role != Qt.ItemDataRole.DisplayRole:
|
if role != Qt.ItemDataRole.DisplayRole:
|
||||||
|
|
@ -75,24 +58,18 @@ class TableModel(QAbstractTableModel):
|
||||||
cname = self._headers[column]
|
cname = self._headers[column]
|
||||||
|
|
||||||
if cname == "name":
|
if cname == "name":
|
||||||
value = self._params.get(row)[cname]
|
value = self._lst.get(row)[cname]
|
||||||
if value in tr.names:
|
if value in self._trad.get_dict("names"):
|
||||||
value = tr.names[value]
|
value = self._trad.get_dict("names")[value]
|
||||||
return value
|
return value
|
||||||
elif cname == "value":
|
elif cname == "value":
|
||||||
value = self._params.get(row)[cname]
|
value = self._lst.get(row)[cname]
|
||||||
if value in tr.yes_no:
|
if value in self._trad.get_dict("yes_no"):
|
||||||
value = tr.yes_no[value]
|
value = self._trad.get_dict("yes_no")[value]
|
||||||
return value
|
return value
|
||||||
|
|
||||||
return QVariant()
|
return QVariant()
|
||||||
|
|
||||||
def headerData(self, section, orientation, role):
|
|
||||||
if role == Qt.ItemDataRole.DisplayRole and orientation == Qt.Orientation.Horizontal:
|
|
||||||
return tr.table_headers[self._headers[section]]
|
|
||||||
|
|
||||||
return QVariant()
|
|
||||||
|
|
||||||
def setData(self, index, value, role=Qt.EditRole):
|
def setData(self, index, value, role=Qt.EditRole):
|
||||||
if not index.isValid() or role != Qt.EditRole:
|
if not index.isValid() or role != Qt.EditRole:
|
||||||
return False
|
return False
|
||||||
|
|
@ -102,12 +79,12 @@ class TableModel(QAbstractTableModel):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if self._headers[column] == "value":
|
if self._headers[column] == "value":
|
||||||
if value in tr.r_yes_no:
|
if value in self._trad.get_dict("r_yes_no"):
|
||||||
value = tr.r_yes_no[value].lower()
|
value = self._trad.get_dict("r_yes_no")[value].lower()
|
||||||
|
|
||||||
self._undo.push(
|
self._undo.push(
|
||||||
SetCommand(
|
SetCommand(
|
||||||
self._params, row,
|
self._lst, row,
|
||||||
"value", value
|
"value", value
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
@ -123,7 +100,7 @@ class TableModel(QAbstractTableModel):
|
||||||
|
|
||||||
# self._undo.push(
|
# self._undo.push(
|
||||||
# AddCommand(
|
# AddCommand(
|
||||||
# self._params, row
|
# self._lst, row
|
||||||
# )
|
# )
|
||||||
# )
|
# )
|
||||||
|
|
||||||
|
|
@ -135,7 +112,7 @@ class TableModel(QAbstractTableModel):
|
||||||
|
|
||||||
# self._undo.push(
|
# self._undo.push(
|
||||||
# DelCommand(
|
# DelCommand(
|
||||||
# self._params, rows
|
# self._lst, rows
|
||||||
# )
|
# )
|
||||||
# )
|
# )
|
||||||
|
|
||||||
|
|
@ -147,7 +124,7 @@ class TableModel(QAbstractTableModel):
|
||||||
|
|
||||||
# self._undo.push(
|
# self._undo.push(
|
||||||
# SortCommand(
|
# SortCommand(
|
||||||
# self._params, False
|
# self._lst, False
|
||||||
# )
|
# )
|
||||||
# )
|
# )
|
||||||
|
|
||||||
|
|
@ -164,7 +141,7 @@ class TableModel(QAbstractTableModel):
|
||||||
|
|
||||||
# self._undo_stack.push(
|
# self._undo_stack.push(
|
||||||
# MoveCommand(
|
# MoveCommand(
|
||||||
# self._params, "up", row
|
# self._lst, "up", row
|
||||||
# )
|
# )
|
||||||
# )
|
# )
|
||||||
|
|
||||||
|
|
@ -172,7 +149,7 @@ class TableModel(QAbstractTableModel):
|
||||||
# self.layoutChanged.emit()
|
# self.layoutChanged.emit()
|
||||||
|
|
||||||
# def move_down(self, index, parent=QModelIndex()):
|
# def move_down(self, index, parent=QModelIndex()):
|
||||||
# if row > len(self._params):
|
# if row > len(self._lst):
|
||||||
# return
|
# return
|
||||||
|
|
||||||
# target = row
|
# target = row
|
||||||
|
|
@ -181,7 +158,7 @@ class TableModel(QAbstractTableModel):
|
||||||
|
|
||||||
# self._undo_stack.push(
|
# self._undo_stack.push(
|
||||||
# MoveCommand(
|
# MoveCommand(
|
||||||
# self._params, "down", row
|
# self._lst, "down", row
|
||||||
# )
|
# )
|
||||||
# )
|
# )
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ from PyQt5.QtWidgets import (
|
||||||
|
|
||||||
from View.SolverParameters.UndoCommand import *
|
from View.SolverParameters.UndoCommand import *
|
||||||
from View.SolverParameters.Table import TableModel
|
from View.SolverParameters.Table import TableModel
|
||||||
from View.SolverParameters import translate as tr
|
from View.SolverParameters.translate import ParamTranslate
|
||||||
|
|
||||||
from Solver.Solvers import solver_long_name, solver_type_list
|
from Solver.Solvers import solver_long_name, solver_type_list
|
||||||
|
|
||||||
|
|
@ -55,16 +55,13 @@ class SolverParametersWindow(PamhyrWindow):
|
||||||
_pamhyr_name = "Solver parameters"
|
_pamhyr_name = "Solver parameters"
|
||||||
|
|
||||||
def __init__(self, study=None, config=None, parent=None):
|
def __init__(self, study=None, config=None, parent=None):
|
||||||
# Init tanslate dictionary
|
|
||||||
tr.init()
|
|
||||||
|
|
||||||
name = self._pamhyr_name + " - " + study.name
|
name = self._pamhyr_name + " - " + study.name
|
||||||
|
|
||||||
super(SolverParametersWindow, self).__init__(
|
super(SolverParametersWindow, self).__init__(
|
||||||
title = name,
|
title = name,
|
||||||
study = study,
|
study = study,
|
||||||
config = config,
|
config = config,
|
||||||
options = ['copy'],
|
options = ['copy'],
|
||||||
|
trad = ParamTranslate(),
|
||||||
parent = parent
|
parent = parent
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -73,8 +70,6 @@ class SolverParametersWindow(PamhyrWindow):
|
||||||
self.setup_sc()
|
self.setup_sc()
|
||||||
self.setup_table()
|
self.setup_table()
|
||||||
|
|
||||||
self.ui.setWindowTitle(self._title)
|
|
||||||
|
|
||||||
def setup_sc(self):
|
def setup_sc(self):
|
||||||
self._undo_stack = {}
|
self._undo_stack = {}
|
||||||
|
|
||||||
|
|
@ -101,9 +96,13 @@ class SolverParametersWindow(PamhyrWindow):
|
||||||
|
|
||||||
# Create table model
|
# Create table model
|
||||||
self._table[st] = TableModel(
|
self._table[st] = TableModel(
|
||||||
|
table_view = table,
|
||||||
data = self._study.river,
|
data = self._study.river,
|
||||||
|
opt_data = st,
|
||||||
|
table_headers = self._trad.get_dict("table_headers"),
|
||||||
|
editable_headers = ["value"],
|
||||||
|
trad = self._trad,
|
||||||
undo = self._undo_stack[st],
|
undo = self._undo_stack[st],
|
||||||
tab = st,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
table.setModel(self._table[st])
|
table.setModel(self._table[st])
|
||||||
|
|
|
||||||
|
|
@ -18,66 +18,60 @@
|
||||||
|
|
||||||
from PyQt5.QtCore import QCoreApplication
|
from PyQt5.QtCore import QCoreApplication
|
||||||
|
|
||||||
|
from View.Tools.PamhyrTranslate import PamhyrTranslate
|
||||||
|
|
||||||
_translate = QCoreApplication.translate
|
_translate = QCoreApplication.translate
|
||||||
|
|
||||||
table_headers = None
|
class ParamTranslate(PamhyrTranslate):
|
||||||
yes_no = None
|
def __init__(self):
|
||||||
r_yes_no = None
|
super(ParamTranslate, self).__init__()
|
||||||
names = None
|
|
||||||
|
|
||||||
def init():
|
self._sub_dict["table_headers"] = {
|
||||||
global table_headers
|
"name": _translate("SolverParameters", "Name"),
|
||||||
table_headers = {
|
"value": _translate("SolverParameters", "Value")
|
||||||
"name": _translate("SolverParameters", "Name"),
|
}
|
||||||
"value": _translate("SolverParameters", "Value")
|
|
||||||
}
|
|
||||||
|
|
||||||
# Used to translate user parameter with value yes or no
|
self._sub_dict["yes_no"] = {
|
||||||
global yes_no
|
"yes": _translate("SolverParameters", "Yes"),
|
||||||
yes_no = {
|
"no": _translate("SolverParameters", "No"),
|
||||||
"yes": _translate("SolverParameters", "Yes"),
|
"y": _translate("SolverParameters", "Y"),
|
||||||
"no": _translate("SolverParameters", "No"),
|
"n": _translate("SolverParameters", "N"),
|
||||||
"y": _translate("SolverParameters", "Y"),
|
}
|
||||||
"n": _translate("SolverParameters", "N"),
|
|
||||||
}
|
|
||||||
|
|
||||||
# Reverse
|
self._sub_dict["r_yes_no"] = {
|
||||||
global r_yes_no
|
_translate("SolverParameters", "Yes"): "yes",
|
||||||
r_yes_no = {
|
_translate("SolverParameters", "No"): "no",
|
||||||
_translate("SolverParameters", "Yes"): "yes",
|
_translate("SolverParameters", "Y"): "y",
|
||||||
_translate("SolverParameters", "No"): "no",
|
_translate("SolverParameters", "N"): "n",
|
||||||
_translate("SolverParameters", "Y"): "y",
|
}
|
||||||
_translate("SolverParameters", "N"): "n",
|
|
||||||
}
|
|
||||||
|
|
||||||
global names
|
self._sub_dict["names"] = {
|
||||||
names = {
|
"all_init_time": _translate("SolverParameters", "Initial time (jj:hh:mm:ss)"),
|
||||||
"all_init_time": _translate("SolverParameters", "Initial time (jj:hh:mm:ss)"),
|
"all_final_time": _translate("SolverParameters", "Final time (jj:hh:mm:ss)"),
|
||||||
"all_final_time": _translate("SolverParameters", "Final time (jj:hh:mm:ss)"),
|
"all_timestep": _translate("SolverParameters", "Timestep (second)"),
|
||||||
"all_timestep": _translate("SolverParameters", "Timestep (second)"),
|
"all_command_line_arguments": _translate("SolverParameters", "Command line arguments"),
|
||||||
"all_command_line_arguments": _translate("SolverParameters", "Command line arguments"),
|
# Mage specific parameters
|
||||||
# Mage specific parameters
|
"mage_min_timestep": _translate("SolverParameters", "Minimum timestep (second)"),
|
||||||
"mage_min_timestep": _translate("SolverParameters", "Minimum timestep (second)"),
|
"mage_timestep_tra": _translate("SolverParameters", "Time step of writing on .TRA"),
|
||||||
"mage_timestep_tra": _translate("SolverParameters", "Time step of writing on .TRA"),
|
"mage_timestep_bin": _translate("SolverParameters", "Time step of writing on .BIN"),
|
||||||
"mage_timestep_bin": _translate("SolverParameters", "Time step of writing on .BIN"),
|
"mage_implicitation": _translate("SolverParameters", "Implicitation parameter"),
|
||||||
"mage_implicitation": _translate("SolverParameters", "Implicitation parameter"),
|
"mage_continuity_discretization": _translate("SolverParameters", "Continuity discretization type (S/L)"),
|
||||||
"mage_continuity_discretization": _translate("SolverParameters", "Continuity discretization type (S/L)"),
|
"mage_qsj_discretization": _translate("SolverParameters", "QSJ discretization (A/B)"),
|
||||||
"mage_qsj_discretization": _translate("SolverParameters", "QSJ discretization (A/B)"),
|
"mage_stop_criterion_iterations": _translate("SolverParameters", "Stop criterion iterations (G/A/R)"),
|
||||||
"mage_stop_criterion_iterations": _translate("SolverParameters", "Stop criterion iterations (G/A/R)"),
|
"mage_iteration_type": _translate("SolverParameters", "Iteration type"),
|
||||||
"mage_iteration_type": _translate("SolverParameters", "Iteration type"),
|
"mage_smooth_coef": _translate("SolverParameters", "Smoothing coefficient"),
|
||||||
"mage_smooth_coef": _translate("SolverParameters", "Smoothing coefficient"),
|
"mage_cfl_max": _translate("SolverParameters", "Maximun accepted number of CFL"),
|
||||||
"mage_cfl_max": _translate("SolverParameters", "Maximun accepted number of CFL"),
|
"mage_min_height": _translate("SolverParameters", "Minimum water height (meter)"),
|
||||||
"mage_min_height": _translate("SolverParameters", "Minimum water height (meter)"),
|
"mage_max_niter": _translate("SolverParameters", "Maximun number of iterations (< 100)"),
|
||||||
"mage_max_niter": _translate("SolverParameters", "Maximun number of iterations (< 100)"),
|
"mage_timestep_reduction_factor": _translate("SolverParameters", "Timestep reduction factor"),
|
||||||
"mage_timestep_reduction_factor": _translate("SolverParameters", "Timestep reduction factor"),
|
"mage_precision_reduction_factor_Z": _translate("SolverParameters", "Reduction precision factor of Z"),
|
||||||
"mage_precision_reduction_factor_Z": _translate("SolverParameters", "Reduction precision factor of Z"),
|
"mage_precision_reduction_factor_Q": _translate("SolverParameters", "Reduction precision factor of Q"),
|
||||||
"mage_precision_reduction_factor_Q": _translate("SolverParameters", "Reduction precision factor of Q"),
|
"mage_precision_reduction_factor_r": _translate("SolverParameters", "Reduction precision factor of residue"),
|
||||||
"mage_precision_reduction_factor_r": _translate("SolverParameters", "Reduction precision factor of residue"),
|
"mage_niter_max_precision": _translate("SolverParameters", "Number of iteration at maximum precision"),
|
||||||
"mage_niter_max_precision": _translate("SolverParameters", "Number of iteration at maximum precision"),
|
"mage_niter_before_switch": _translate("SolverParameters", "Number of iteration before switch"),
|
||||||
"mage_niter_before_switch": _translate("SolverParameters", "Number of iteration before switch"),
|
"mage_max_froude": _translate("SolverParameters", "Maximum accepted Froude number"),
|
||||||
"mage_max_froude": _translate("SolverParameters", "Maximum accepted Froude number"),
|
"mage_diffluence_node_height_balance": _translate("SolverParameters", "Diffluence node height balance"),
|
||||||
"mage_diffluence_node_height_balance": _translate("SolverParameters", "Diffluence node height balance"),
|
"mage_compute_reach_volume_balance": _translate("SolverParameters", "Compute reach volume balance (Y/N)"),
|
||||||
"mage_compute_reach_volume_balance": _translate("SolverParameters", "Compute reach volume balance (Y/N)"),
|
"mage_max_reach_volume_balance": _translate("SolverParameters", "Maximum reach volume balance"),
|
||||||
"mage_max_reach_volume_balance": _translate("SolverParameters", "Maximum reach volume balance"),
|
"mage_min_reach_volume_to_check": _translate("SolverParameters", "Minimum reach volume to check"),
|
||||||
"mage_min_reach_volume_to_check": _translate("SolverParameters", "Minimum reach volume to check"),
|
}
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue