Split reach: handling the case where the reach is split on a data used to define a data (an initial condition for example)

split_reach
Dylan Jeannin 2026-08-12 12:09:47 +02:00
parent 3d467c9620
commit dd31ffc5a2
8 changed files with 20 additions and 14 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 = (

View File

@ -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

View File

@ -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