mirror of https://gitlab.com/pamhyr/pamhyr2
fix RubarBE friction export + extrapolation
parent
879c151524
commit
a8a408b5d5
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue