mirror of
https://gitlab.com/pamhyr/pamhyr2.git
synced 2026-10-29 19:10:42 +01:00
RubarBE: export an empty upstream solid boundary condition as a supply at equilibrium (negative Qs in hydros), like Mage 'default'
This commit is contained in:
1 parent
b1cf45497b
commit
a2f215984b
2 files changed
+22
-12
No files matched your search
@@ -44,6 +44,7 @@ __old__
|
|||||||
mage8/
|
mage8/
|
||||||
adists/
|
adists/
|
||||||
rubarbe/
|
rubarbe/
|
||||||
|
rubar/
|
||||||
|
|
||||||
linux/
|
linux/
|
||||||
windows/
|
windows/
|
||||||
|
|||||||
+21
-12
@@ -194,7 +194,8 @@ class Rubar3(CommandLineSolver):
|
|||||||
self._export_stricklers(hydraulics, repertory, qlog, name=name)
|
self._export_stricklers(hydraulics, repertory, qlog, name=name)
|
||||||
self._export_boundaries(hydraulics, repertory, qlog, name=name)
|
self._export_boundaries(hydraulics, repertory, qlog, name=name)
|
||||||
if solid is not None:
|
if solid is not None:
|
||||||
self._export_hydros(solid, repertory, qlog, name=name)
|
self._export_hydros(solid, hydraulics["tinit"], repertory, qlog,
|
||||||
|
name=name)
|
||||||
if trased:
|
if trased:
|
||||||
self._export_condins(geometry, hydraulics["tinit"], repertory,
|
self._export_condins(geometry, hydraulics["tinit"], repertory,
|
||||||
qlog, name=name)
|
qlog, name=name)
|
||||||
@@ -432,13 +433,14 @@ class Rubar3(CommandLineSolver):
|
|||||||
}
|
}
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _ignore_empty(bcs, node, warnings):
|
def _ignore_empty(bcs, node, warnings, meaningful=()):
|
||||||
"""A boundary condition without value carries no data: it is
|
"""A boundary condition without value carries no data: it is
|
||||||
ignored with a warning. Return (kept, ignored)"""
|
ignored with a warning, except for the types where an empty
|
||||||
|
condition has a meaning. Return (kept, ignored)"""
|
||||||
trad = RunSolverTranslate()
|
trad = RunSolverTranslate()
|
||||||
kept, ignored = [], []
|
kept, ignored = [], []
|
||||||
for bc in bcs:
|
for bc in bcs:
|
||||||
if len(bc) == 0:
|
if len(bc) == 0 and bc.bctype not in meaningful:
|
||||||
warnings.append(trad["boundary_empty_ignored"].format(
|
warnings.append(trad["boundary_empty_ignored"].format(
|
||||||
name=bc.name, node=node.name))
|
name=bc.name, node=node.name))
|
||||||
ignored.append(bc)
|
ignored.append(bc)
|
||||||
@@ -447,10 +449,10 @@ class Rubar3(CommandLineSolver):
|
|||||||
return kept, ignored
|
return kept, ignored
|
||||||
|
|
||||||
def _select_boundaries(self, bcs, expected, node, required_by, setting,
|
def _select_boundaries(self, bcs, expected, node, required_by, setting,
|
||||||
warnings):
|
warnings, meaningful=()):
|
||||||
trad = RunSolverTranslate()
|
trad = RunSolverTranslate()
|
||||||
selected = {}
|
selected = {}
|
||||||
bcs, ignored = self._ignore_empty(bcs, node, warnings)
|
bcs, ignored = self._ignore_empty(bcs, node, warnings, meaningful)
|
||||||
|
|
||||||
for bc in bcs:
|
for bc in bcs:
|
||||||
kind = self._boundary_kinds[bc.bctype]
|
kind = self._boundary_kinds[bc.bctype]
|
||||||
@@ -487,7 +489,9 @@ class Rubar3(CommandLineSolver):
|
|||||||
at the upstream node when TRASED is enabled and CONDAM=1 (CONDAM=2
|
at the upstream node when TRASED is enabled and CONDAM=1 (CONDAM=2
|
||||||
is refused), and has no downstream solid condition (rubar_init.f90,
|
is refused), and has no downstream solid condition (rubar_init.f90,
|
||||||
inits). Without sediment transport the solid conditions are
|
inits). Without sediment transport the solid conditions are
|
||||||
ignored. Return the condition or None"""
|
ignored. At the upstream node, an empty solid condition means a
|
||||||
|
supply at equilibrium in Pamhyr2 (Mage 'default'), written as a
|
||||||
|
negative Qs (_export_hydros). Return the condition or None"""
|
||||||
if not trased:
|
if not trased:
|
||||||
return None
|
return None
|
||||||
trad = RunSolverTranslate()
|
trad = RunSolverTranslate()
|
||||||
@@ -509,7 +513,7 @@ class Rubar3(CommandLineSolver):
|
|||||||
selected = self._select_boundaries(
|
selected = self._select_boundaries(
|
||||||
[bc for bc in solid if bc.node == edge.node1], expected,
|
[bc for bc in solid if bc.node == edge.node1], expected,
|
||||||
edge.node1, {"SL": f"TRASED=O, CONDAM={condam}"},
|
edge.node1, {"SL": f"TRASED=O, CONDAM={condam}"},
|
||||||
f"CONDAM={condam}", warnings
|
f"CONDAM={condam}", warnings, meaningful=("SL",)
|
||||||
)
|
)
|
||||||
bc = selected.get("SL")
|
bc = selected.get("SL")
|
||||||
if bc is None:
|
if bc is None:
|
||||||
@@ -1083,16 +1087,21 @@ class Rubar3(CommandLineSolver):
|
|||||||
lines = [header(len(bc))] + records(bc, columns)
|
lines = [header(len(bc))] + records(bc, columns)
|
||||||
self._write_parameters(repertory, f"{filename}.{name}", lines)
|
self._write_parameters(repertory, f"{filename}.{name}", lines)
|
||||||
|
|
||||||
def _export_hydros(self, bc, repertory, qlog, name="0"):
|
def _export_hydros(self, bc, tinit, repertory, qlog, name="0"):
|
||||||
"""HYDROS: number of points, then Qs, t, D, S (notice annex 1).
|
"""HYDROS: number of points, then Qs, t, D, S (notice annex 1).
|
||||||
Qs is a solid discharge (kg/s) or a concentration (kg/m3)
|
Qs is a solid discharge (kg/s) or a concentration (kg/m3)
|
||||||
according to UNISOL, D and S are those of the condition"""
|
according to UNISOL, D and S are those of the condition. An
|
||||||
|
empty condition (supply at equilibrium) is written as a single
|
||||||
|
negative Qs: RubarBE then takes the transport capacity of the
|
||||||
|
upstream section at each time step (notice §3.6; rubarbe.f90,
|
||||||
|
'si Hydros.etude contient un Qs<0')"""
|
||||||
if qlog is not None:
|
if qlog is not None:
|
||||||
qlog.put("Export HYDROS file")
|
qlog.put("Export HYDROS file")
|
||||||
d50, sigma = float(bc.d50), float(bc.sigma)
|
d50, sigma = float(bc.d50), float(bc.sigma)
|
||||||
lines = [f"{len(bc)}\n"] + [
|
data = [(t, qs) for t, qs in bc.data] or [(tinit, -1.0)]
|
||||||
|
lines = [f"{len(data)}\n"] + [
|
||||||
f"{float(qs)!r} {float(t)!r} {d50!r} {sigma!r}\n"
|
f"{float(qs)!r} {float(t)!r} {d50!r} {sigma!r}\n"
|
||||||
for t, qs in bc.data
|
for t, qs in data
|
||||||
]
|
]
|
||||||
self._write_parameters(repertory, f"hydros.{name}", lines)
|
self._write_parameters(repertory, f"hydros.{name}", lines)
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user