mirror of
https://gitlab.com/pamhyr/pamhyr2.git
synced 2026-10-30 03:20:41 +01:00
Compare commits
3
Commits
2a699f46ca
...
656b337499
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
656b337499 | ||
|
|
ed2ed0ac2a | ||
|
|
ab95f06700 |
No files matched your search
+39
-1
@@ -143,8 +143,32 @@ class Rubar3(CommandLineSolver):
|
|||||||
self._study = study
|
self._study = study
|
||||||
name = study.name.replace(" ", "_")
|
name = study.name.replace(" ", "_")
|
||||||
|
|
||||||
|
values = self._parameter_values(study)
|
||||||
|
if (values.get("rubarbe_regime") == "1" and
|
||||||
|
values.get("rubarbe_condam") == "0"):
|
||||||
|
trad = RunSolverTranslate()
|
||||||
|
message = trad["incompatible_upstream_boundary"]
|
||||||
|
logger.warning(message)
|
||||||
|
if qlog is not None:
|
||||||
|
qlog.put(trad["warning"].format(message=message))
|
||||||
|
return False
|
||||||
|
|
||||||
|
trased = self._parameter_flag(study, "trased") == "O"
|
||||||
|
if trased:
|
||||||
|
# Notice §3.6: HYDROS is required at each upstream boundary
|
||||||
|
missing = self._reaches_without_solid_boundary(study)
|
||||||
|
if missing:
|
||||||
|
trad = RunSolverTranslate()
|
||||||
|
message = trad["missing_solid_boundary"].format(
|
||||||
|
reaches=", ".join(missing)
|
||||||
|
)
|
||||||
|
logger.warning(message)
|
||||||
|
if qlog is not None:
|
||||||
|
qlog.put(trad["warning"].format(message=message))
|
||||||
|
return False
|
||||||
|
|
||||||
self._export_donnee(study, repertory, qlog, name=name)
|
self._export_donnee(study, repertory, qlog, name=name)
|
||||||
if self._parameter_flag(study, "trased") == "O":
|
if trased:
|
||||||
if not self._export_ts(study, repertory, qlog, name=name):
|
if not self._export_ts(study, repertory, qlog, name=name):
|
||||||
return False
|
return False
|
||||||
self._export_geomac_i(study, repertory, qlog, name=name)
|
self._export_geomac_i(study, repertory, qlog, name=name)
|
||||||
@@ -184,6 +208,20 @@ class Rubar3(CommandLineSolver):
|
|||||||
("defond", "integer"), ("varcons", "integer"),
|
("defond", "integer"), ("varcons", "integer"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _reaches_without_solid_boundary(study):
|
||||||
|
river = study.river
|
||||||
|
solid = [
|
||||||
|
bc for bc in river.boundary_condition.get_tab("solid")
|
||||||
|
if not bc.is_deleted() and bc.bctype == "SL" and len(bc) > 0
|
||||||
|
]
|
||||||
|
|
||||||
|
return [
|
||||||
|
edge.name for edge in river.enable_edges()
|
||||||
|
if river.is_upstream_node(edge.node1)
|
||||||
|
and not any(bc.node == edge.node1 for bc in solid)
|
||||||
|
]
|
||||||
|
|
||||||
def _parameter_values(self, study):
|
def _parameter_values(self, study):
|
||||||
return {p.name: str(p.value).strip()
|
return {p.name: str(p.value).strip()
|
||||||
for p in study.river.get_params(self.type).parameters}
|
for p in study.river.get_params(self.type).parameters}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ solver_long_name = {
|
|||||||
# "mage_fake7": "Mage fake v7",
|
# "mage_fake7": "Mage fake v7",
|
||||||
"adistswc": "Adis-TS_WC",
|
"adistswc": "Adis-TS_WC",
|
||||||
"adisttwc": "Adis-TT_WC",
|
"adisttwc": "Adis-TT_WC",
|
||||||
# "rubarbe": "RubarBE",
|
"rubarbe": "RubarBE",
|
||||||
"rubar3": "Rubar3",
|
"rubar3": "Rubar3",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,6 +46,6 @@ solver_type_list = {
|
|||||||
# "mage_fake7": MageFake7,
|
# "mage_fake7": MageFake7,
|
||||||
"adistswc": AdisTSwc,
|
"adistswc": AdisTSwc,
|
||||||
"adisttwc": AdisTTwc,
|
"adisttwc": AdisTTwc,
|
||||||
# "rubarbe": RubarBE,
|
"rubarbe": RubarBE,
|
||||||
"rubar3": Rubar3,
|
"rubar3": Rubar3,
|
||||||
}
|
}
|
||||||
@@ -38,6 +38,18 @@ class RunSolverTranslate(PamhyrTranslate):
|
|||||||
"Please choose another transport law from the list."
|
"Please choose another transport law from the list."
|
||||||
)
|
)
|
||||||
self._dict["warning"] = _translate("Solver", "Warning: {message}")
|
self._dict["warning"] = _translate("Solver", "Warning: {message}")
|
||||||
|
self._dict["incompatible_upstream_boundary"] = _translate(
|
||||||
|
"Solver",
|
||||||
|
"Export cancelled: REGIME=1 is incompatible with CONDAM=0. "
|
||||||
|
"A reflecting upstream boundary cannot impose the water depth."
|
||||||
|
)
|
||||||
|
self._dict["missing_solid_boundary"] = _translate(
|
||||||
|
"Solver",
|
||||||
|
"Export cancelled: sediment transport (TRASED) is enabled but "
|
||||||
|
"no solid boundary condition is defined at the upstream node "
|
||||||
|
"of reach(es): {reaches}. Add a solid boundary condition, or "
|
||||||
|
"disable sediment transport in the solver parameters."
|
||||||
|
)
|
||||||
self._dict["export_failed"] = _translate(
|
self._dict["export_failed"] = _translate(
|
||||||
"Solver", "Export failed; task cancelled"
|
"Solver", "Export failed; task cancelled"
|
||||||
)
|
)
|
||||||
@@ -199,6 +199,12 @@ class RubarForm(QWidget):
|
|||||||
|
|
||||||
def apply_pending(self):
|
def apply_pending(self):
|
||||||
"""Commit focused text before Ctrl+S; leave invalid drafts visible."""
|
"""Commit focused text before Ctrl+S; leave invalid drafts visible."""
|
||||||
|
values = self.values()
|
||||||
|
if (values.get('rubarbe_condam') == '0' and
|
||||||
|
values.get('rubarbe_regime') == '1'):
|
||||||
|
self.tabs.setCurrentIndex(1)
|
||||||
|
self.editors['rubarbe_condam'].setFocus()
|
||||||
|
return False
|
||||||
for key, editor in self.editors.items():
|
for key, editor in self.editors.items():
|
||||||
if (isinstance(editor, QLineEdit) and editor.isModified() and
|
if (isinstance(editor, QLineEdit) and editor.isModified() and
|
||||||
active(self.descriptions[key], self.values())):
|
active(self.descriptions[key], self.values())):
|
||||||
@@ -220,6 +226,13 @@ class RubarForm(QWidget):
|
|||||||
value = self._validated(key, value)
|
value = self._validated(key, value)
|
||||||
if value is None:
|
if value is None:
|
||||||
return False
|
return False
|
||||||
|
values = self.values()
|
||||||
|
values[key] = value
|
||||||
|
if (key in ('rubarbe_condam', 'rubarbe_regime') and
|
||||||
|
values.get('rubarbe_condam') == '0' and
|
||||||
|
values.get('rubarbe_regime') == '1'):
|
||||||
|
self.refresh()
|
||||||
|
return False
|
||||||
if isinstance(self.editors[key], QLineEdit):
|
if isinstance(self.editors[key], QLineEdit):
|
||||||
self.editors[key].setModified(False)
|
self.editors[key].setModified(False)
|
||||||
if self.values()[key] != value:
|
if self.values()[key] != value:
|
||||||
@@ -270,6 +283,16 @@ class RubarForm(QWidget):
|
|||||||
self.errors[key].setVisible(
|
self.errors[key].setVisible(
|
||||||
enabled and bool(self.errors[key].text()))
|
enabled and bool(self.errors[key].text()))
|
||||||
self._update_context(values)
|
self._update_context(values)
|
||||||
|
for key, forbidden, blocked in (
|
||||||
|
('rubarbe_regime', '1', values.get('rubarbe_condam') == '0'),
|
||||||
|
('rubarbe_condam', '0', values.get('rubarbe_regime') == '1'),
|
||||||
|
):
|
||||||
|
editor = self.editors.get(key)
|
||||||
|
if editor is None:
|
||||||
|
continue
|
||||||
|
index = editor.findData(forbidden)
|
||||||
|
if index >= 0:
|
||||||
|
editor.model().item(index).setEnabled(not blocked)
|
||||||
self._refreshing = False
|
self._refreshing = False
|
||||||
|
|
||||||
def _update_context(self, values):
|
def _update_context(self, values):
|
||||||
|
|||||||
+26
-5
@@ -37,7 +37,7 @@ logger = logging.getLogger()
|
|||||||
|
|
||||||
class Config(SQL):
|
class Config(SQL):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._version = '0.0.9'
|
self._version = '0.0.10'
|
||||||
self.filename = Config.filename()
|
self.filename = Config.filename()
|
||||||
self.set_default_value()
|
self.set_default_value()
|
||||||
|
|
||||||
@@ -221,6 +221,26 @@ class Config(SQL):
|
|||||||
"VALUES ('display_manning', 'False')"
|
"VALUES ('display_manning', 'False')"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if int(release) < 10:
|
||||||
|
posix = os.name == 'posix'
|
||||||
|
ext = "" if posix else ".exe"
|
||||||
|
path = os.path.join("@install_dir",
|
||||||
|
"rubar", f"rubarbe{ext}")
|
||||||
|
|
||||||
|
self.execute(f"""
|
||||||
|
INSERT OR IGNORE INTO solver VALUES (
|
||||||
|
'rubarbe',
|
||||||
|
'default-RubarBE',
|
||||||
|
'Default Pamhyr2 RubarBE version',
|
||||||
|
|
||||||
|
'', '', '',
|
||||||
|
|
||||||
|
'',
|
||||||
|
'"{path}" @args @input',
|
||||||
|
''
|
||||||
|
)
|
||||||
|
""")
|
||||||
|
|
||||||
self.execute(
|
self.execute(
|
||||||
f"UPDATE info SET value='{self._version}' " +
|
f"UPDATE info SET value='{self._version}' " +
|
||||||
"WHERE key='version'"
|
"WHERE key='version'"
|
||||||
@@ -417,11 +437,12 @@ class Config(SQL):
|
|||||||
new._cmd_solver = f""""{path}" @args @input"""
|
new._cmd_solver = f""""{path}" @args @input"""
|
||||||
self._solvers.append(new)
|
self._solvers.append(new)
|
||||||
|
|
||||||
# Rubar3
|
# RubarBE (same executable as Rubar3, see notice §10.3)
|
||||||
ctor = solver_type_list["rubar3"]
|
ctor = solver_type_list["rubarbe"]
|
||||||
new = ctor("default-Rubar3")
|
new = ctor("default-RubarBE")
|
||||||
new._description = "Default Pamhyr2 RubarBE version"
|
new._description = "Default Pamhyr2 RubarBE version"
|
||||||
new._cmd_solver = f""""@install_dir/rubar/rubarbe{ext}" @args @input"""
|
path = os.path.join("@install_dir", "rubar", f"rubarbe{ext}")
|
||||||
|
new._cmd_solver = f""""{path}" @args @input"""
|
||||||
self._solvers.append(new)
|
self._solvers.append(new)
|
||||||
|
|
||||||
# Mage fake 7
|
# Mage fake 7
|
||||||
|
|||||||
Reference in new issue
Block a user