From 4d2ba40287425dbd13a03c7000745d05fb8f2ce2 Mon Sep 17 00:00:00 2001 From: Theophile Terraz <theophile.terraz@inrae.fr> Date: Thu, 8 Aug 2024 11:43:42 +0200 Subject: [PATCH] work on get friction values from rk --- .../BoundaryCondition/BoundaryCondition.py | 8 ++++---- src/Model/Friction/Friction.py | 16 ++++++++++++++++ .../InitialConditions/InitialConditions.py | 18 +++++++++++++++--- src/View/BoundaryCondition/Edit/Window.py | 8 +++++++- 4 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/Model/BoundaryCondition/BoundaryCondition.py b/src/Model/BoundaryCondition/BoundaryCondition.py index 455365d6..fd62afe9 100644 --- a/src/Model/BoundaryCondition/BoundaryCondition.py +++ b/src/Model/BoundaryCondition/BoundaryCondition.py @@ -373,13 +373,13 @@ class BoundaryCondition(SQLSubModel): self._status.modified() def reach(self, river): - edges = [] + r = [] if self._node is not None: if river is not None: for edge in river.edges(): if edge.node1.name == self._node.name: - edges.append(edge.reach) + r.append(edge.reach) if edge.node2.name == self._node.name: - edges.append(edge.reach) + r.append(edge.reach) - return edges + return r diff --git a/src/Model/Friction/Friction.py b/src/Model/Friction/Friction.py index d7b0386e..9f0e0f3c 100644 --- a/src/Model/Friction/Friction.py +++ b/src/Model/Friction/Friction.py @@ -22,6 +22,8 @@ from tools import trace, timer from Model.Tools.PamhyrDB import SQLSubModel +from numpy import interp + logger = logging.getLogger() @@ -241,3 +243,17 @@ class Friction(SQLSubModel): def end_strickler(self, strickler): self._end_strickler = strickler self._status.modified() + + def get_friction(self, rk): + if not self.contains_rk(rk): + return None + minor = interp(rk, + [self.begin_rk, self.end_rk], + [self.begin_strickler.minor, + self.end_strickler.minor]) + medium = interp(rk, + [self.begin_rk, self.end_rk], + [self.begin_strickler.medium, + self.end_strickler.medium]) + + return minor, medium diff --git a/src/Model/InitialConditions/InitialConditions.py b/src/Model/InitialConditions/InitialConditions.py index 1b923cda..a4becbae 100644 --- a/src/Model/InitialConditions/InitialConditions.py +++ b/src/Model/InitialConditions/InitialConditions.py @@ -395,8 +395,14 @@ class InitialConditions(SQLSubModel): logger.debug(f"incline = {incline}") self._data = [] for profile in profiles: - width = profile.width_approximation() - strickler = 25 + width = profile.wet_width(profile.z_min() + height) + frictions = self._reach.frictions.frictions + strickler = None + for f in frictions: + if f.contains_rk(profile.rk): + strickler = f.get_friction(profile.rk)[0] + if strickler is None: + strickler = 25.0 if not compute_discharge: discharge = data_discharge[profile.rk] @@ -449,7 +455,13 @@ class InitialConditions(SQLSubModel): self._data = [] for profile in profiles: width = profile.width_approximation() - strickler = 25 + frictions = self._reach.frictions.frictions + strickler = None + for f in frictions: + if f.contains_rk(profile.rk): + strickler = f.get_friction(profile.rk)[0] + if strickler is None: + strickler = 25.0 if not compute_height: height = data_height[profile.rk] diff --git a/src/View/BoundaryCondition/Edit/Window.py b/src/View/BoundaryCondition/Edit/Window.py index 4b4798a6..d639a3a3 100644 --- a/src/View/BoundaryCondition/Edit/Window.py +++ b/src/View/BoundaryCondition/Edit/Window.py @@ -333,9 +333,15 @@ class EditBoundaryConditionWindow(PamhyrWindow): reach = self._data.reach(self._study.river)[0] profile = reach.profiles[-1] incline = reach.get_incline_median_mean() + frictions = reach._parent.frictions.frictions z_min = profile.z_min() z_max = profile.z_max() - strickler = 25 + strickler = None + for f in frictions: + if f.contains_rk(profile.rk): + strickler = f.get_friction(profile.rk)[0] + if strickler is None: + strickler = 25.0 height = [(i)*(z_max-z_min)/50 for i in range(51)] q = [((profile.wet_width(z_min + h) * 0.8) * strickler * (h ** (5/3)) * (abs(incline) ** (0.5))) -- GitLab