fix RubarBE friction export + extrapolation

scenarios
Theophile Terraz 2025-10-30 16:16:35 +01:00
parent 879c151524
commit a8a408b5d5
1 changed files with 49 additions and 15 deletions

View File

@ -395,24 +395,58 @@ class Rubar3(CommandLineSolver):
lm = len(reach) + 1 lm = len(reach) + 1
f.write(f"{lm:>6}\n") f.write(f"{lm:>6}\n")
def get_stricklers_from_rk(rk): lst = list(filter(
return next( lambda f: f.is_full_defined(),
map( edge.frictions.frictions
lambda s: ( ))
s.begin_strickler.medium if version == "2"
else s.begin_strickler.minor rk_min = 9999999.9
), rk_max = -9999999.9
filter( coeff_min = -1.0
lambda f: rk in f, coeff_max = -1.0
edge.frictions.lst for s in lst: # TODO optimise ?
) if s.begin_rk > rk_max:
) rk_max = s.begin_rk
coeff_max = s.begin_strickler
if s.begin_rk < rk_min:
rk_min = s.begin_rk
coeff_min = s.begin_strickler
if s.end_rk > rk_max:
rk_max = s.end_rk
coeff_max = s.end_strickler
if s.end_rk < rk_min:
rk_min = s.end_rk
coeff_min = s.end_strickler
def get_stricklers_from_rk(rk, lst):
coeff = None
if rk > rk_max:
coeff = coeff_max
elif rk < rk_min:
coeff = coeff_min
else:
for s in lst:
print(s.begin_rk, s.end_rk)
if (rk >= s.begin_rk and rk <= s.end_rk or
rk <= s.begin_rk and rk >= s.end_rk):
coeff = s.begin_strickler # TODO: inerpolate
break
# TODO interpolation if rk is not in frictons
if coeff is None:
logger.error(
"Study frictions are not fully defined"
) )
return None
return coeff.medium if version == "2" else coeff.minor
ind = 1 ind = 1
for mail in edge.reach.inter_profiles_rk(): for mail in edge.reach.inter_profiles_rk():
coef = get_stricklers_from_rk(mail) coef = get_stricklers_from_rk(mail, lst)
if coeff is not None:
f.write(f"{ind:>6} {coef:>12.5f}") f.write(f"{ind:>6} {coef:>12.5f}")
ind += 1 ind += 1