From 2a926a8d730dcd07f346e0912809c0feb536acc7 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Tue, 30 Sep 2025 15:54:00 +0200 Subject: [PATCH] Frictions: Split frictions list at reach split. --- src/Model/Friction/Friction.py | 11 +++++++++++ src/Model/Friction/FrictionList.py | 27 +++++++++++++++++++++++++++ src/Model/River.py | 4 ++-- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/Model/Friction/Friction.py b/src/Model/Friction/Friction.py index 0e7f157a..a5696d07 100644 --- a/src/Model/Friction/Friction.py +++ b/src/Model/Friction/Friction.py @@ -213,6 +213,17 @@ class Friction(SQLSubModel): return new + def cloned_for(self, reach): + new = Friction(reach=reach, status=self._status) + + new.reach = reach + new.begin_rk = self._begin_rk + new.end_rk = self._end_rk + new.begin_strickler = self._begin_strickler + new.end_strickler = self._begin_strickler + + return new + def must_be_saved(self): ssi = self._status.scenario_id diff --git a/src/Model/Friction/FrictionList.py b/src/Model/Friction/FrictionList.py index c185ebd3..cc14da10 100644 --- a/src/Model/Friction/FrictionList.py +++ b/src/Model/Friction/FrictionList.py @@ -20,6 +20,7 @@ import logging from copy import copy from tools import trace, timer +from functools import reduce from Model.Tools.PamhyrDB import SQLSubModel from Model.Tools.PamhyrListExt import PamhyrModelList @@ -95,3 +96,29 @@ class FrictionList(PamhyrModelList): self._lst.insert(index, n) self._status.modified() return n + + def _splited_for(self, reach): + new = FrictionList(status=self._status) + + rk_min, rk_max = reduce( + lambda mm, p: ( + min(mm[0], p.rk), + max(mm[1], p.rk) + ), + reach.reach.profiles, + ((999 ** 100), -(999 ** 100)) + ) + + frictions = list( + filter( + lambda f: ((rk_min <= f.begin_rk <= rk_max) or + (rk_min <= f.end_rk <= rk_max)), + self._lst)) + + for ind, friction in enumerate(frictions): + n = friction.cloned_for(reach) + + new._lst.insert(ind, n) + new._status.modified() + + return new diff --git a/src/Model/River.py b/src/Model/River.py index d6eb9423..a22f25b0 100644 --- a/src/Model/River.py +++ b/src/Model/River.py @@ -437,10 +437,10 @@ class RiverReach(Edge): nr1, nr2 = self._reach._split(profile, new_reach1, new_reach2) new_reach1._reach = nr1 - new_reach1._frictions = self._frictions + new_reach1._frictions = self._frictions._splited_for(new_reach1) new_reach2._reach = nr2 - new_reach2._frictions = self._frictions + new_reach2._frictions = self._frictions._splited_for(new_reach2) self.disable()