From dd31ffc5a23f803ceac3c036715d24298b9c6c8b Mon Sep 17 00:00:00 2001 From: Dylan Jeannin Date: Wed, 12 Aug 2026 12:09:47 +0200 Subject: [PATCH] Split reach: handling the case where the reach is split on a data used to define a data (an initial condition for example) --- src/Model/D90AdisTS/D90AdisTS.py | 2 +- src/Model/DIFAdisTS/DIFAdisTS.py | 2 +- src/Model/Friction/FrictionList.py | 20 ++++++++++++------- .../InitialConditionsAdisTS.py | 2 +- .../InitialConditionsTemperature.py | 2 +- .../LateralContributionList.py | 2 +- .../LateralContributionsAdisTSList.py | 2 +- .../WeatherParametersList.py | 2 +- 8 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/Model/D90AdisTS/D90AdisTS.py b/src/Model/D90AdisTS/D90AdisTS.py index f901bf01..80ac1267 100644 --- a/src/Model/D90AdisTS/D90AdisTS.py +++ b/src/Model/D90AdisTS/D90AdisTS.py @@ -305,7 +305,7 @@ class D90AdisTS(SQLSubModel): for new_reach, part_lower, part_upper in parts: clipped_lower = max(lower, part_lower) clipped_upper = min(upper, part_upper) - if clipped_lower > clipped_upper: + if clipped_lower >= clipped_upper: continue start_rk = clipped_upper if reverse else clipped_lower diff --git a/src/Model/DIFAdisTS/DIFAdisTS.py b/src/Model/DIFAdisTS/DIFAdisTS.py index 97c05064..f907a40e 100644 --- a/src/Model/DIFAdisTS/DIFAdisTS.py +++ b/src/Model/DIFAdisTS/DIFAdisTS.py @@ -359,7 +359,7 @@ class DIFAdisTS(SQLSubModel): for new_reach, part_lower, part_upper in parts: clipped_lower = max(lower, part_lower) clipped_upper = min(upper, part_upper) - if clipped_lower > clipped_upper: + if clipped_lower >= clipped_upper: continue start_rk = clipped_upper if reverse else clipped_lower diff --git a/src/Model/Friction/FrictionList.py b/src/Model/Friction/FrictionList.py index 963c3316..df4573b8 100644 --- a/src/Model/Friction/FrictionList.py +++ b/src/Model/Friction/FrictionList.py @@ -109,16 +109,22 @@ class FrictionList(PamhyrModelList): ((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 friction in self.lst: + lower, upper = sorted((friction.begin_rk, friction.end_rk)) + clipped_lower = max(lower, rk_min) + clipped_upper = min(upper, rk_max) + if clipped_lower >= clipped_upper: + continue - for ind, friction in enumerate(frictions): n = friction.cloned_for(reach) + if friction.begin_rk > friction.end_rk: + n.begin_rk = clipped_upper + n.end_rk = clipped_lower + else: + n.begin_rk = clipped_lower + n.end_rk = clipped_upper - new._lst.insert(ind, n) + new._lst.append(n) new._status.modified() return new diff --git a/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTS.py b/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTS.py index 65a72e90..903fe877 100644 --- a/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTS.py +++ b/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTS.py @@ -391,7 +391,7 @@ class InitialConditionsAdisTS(SQLSubModel): for new_reach, part_lower, part_upper in parts: clipped_lower = max(lower, part_lower) clipped_upper = min(upper, part_upper) - if clipped_lower > clipped_upper: + if clipped_lower >= clipped_upper: continue start_rk = clipped_upper if reverse else clipped_lower diff --git a/src/Model/InitialConditionsTemperature/InitialConditionsTemperature.py b/src/Model/InitialConditionsTemperature/InitialConditionsTemperature.py index 33e2c99e..986e603e 100644 --- a/src/Model/InitialConditionsTemperature/InitialConditionsTemperature.py +++ b/src/Model/InitialConditionsTemperature/InitialConditionsTemperature.py @@ -254,7 +254,7 @@ class InitialConditionsTemperature(SQLSubModel): for new_reach, part_lower, part_upper in parts: clipped_lower = max(lower, part_lower) clipped_upper = min(upper, part_upper) - if clipped_lower > clipped_upper: + if clipped_lower >= clipped_upper: continue start_rk = clipped_upper if reverse else clipped_lower diff --git a/src/Model/LateralContribution/LateralContributionList.py b/src/Model/LateralContribution/LateralContributionList.py index c6aa7162..803d2c27 100644 --- a/src/Model/LateralContribution/LateralContributionList.py +++ b/src/Model/LateralContribution/LateralContributionList.py @@ -117,7 +117,7 @@ class LateralContributionList(PamhyrModelListWithTab): for new_reach, part_lower, part_upper, sections in parts: clipped_lower = max(lower, part_lower) clipped_upper = min(upper, part_upper) - if clipped_lower > clipped_upper: + if clipped_lower >= clipped_upper: continue begin_index = ( diff --git a/src/Model/LateralContributionsAdisTS/LateralContributionsAdisTSList.py b/src/Model/LateralContributionsAdisTS/LateralContributionsAdisTSList.py index ad9d2783..05bc07f1 100644 --- a/src/Model/LateralContributionsAdisTS/LateralContributionsAdisTSList.py +++ b/src/Model/LateralContributionsAdisTS/LateralContributionsAdisTSList.py @@ -95,7 +95,7 @@ class LateralContributionsAdisTSList(PamhyrModelList): for new_reach, part_lower, part_upper in parts: clipped_lower = max(lower, part_lower) clipped_upper = min(upper, part_upper) - if clipped_lower > clipped_upper: + if clipped_lower >= clipped_upper: continue begin_rk = clipped_upper if reverse else clipped_lower diff --git a/src/Model/WeatherParameters/WeatherParametersList.py b/src/Model/WeatherParameters/WeatherParametersList.py index 399308ff..8669e34f 100644 --- a/src/Model/WeatherParameters/WeatherParametersList.py +++ b/src/Model/WeatherParameters/WeatherParametersList.py @@ -204,7 +204,7 @@ class WeatherParametersList(PamhyrModelList): for new_reach, part_lower, part_upper, sections in parts: clipped_lower = max(lower, part_lower) clipped_upper = min(upper, part_upper) - if clipped_lower > clipped_upper: + if clipped_lower >= clipped_upper: continue begin_index = clipped_upper if reverse else clipped_lower