mirror of https://gitlab.com/pamhyr/pamhyr2
Solver: RubarBE: Add frictions export.
parent
9f87a38107
commit
ca3ba3adb6
|
|
@ -209,6 +209,11 @@ class Friction(SQLSubModel):
|
||||||
|
|
||||||
self._status.modified()
|
self._status.modified()
|
||||||
|
|
||||||
|
def contains_kp(self, kp):
|
||||||
|
return (
|
||||||
|
self._begin_kp <= kp <= self._end_kp
|
||||||
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def begin_strickler(self):
|
def begin_strickler(self):
|
||||||
return self._begin_strickler
|
return self._begin_strickler
|
||||||
|
|
|
||||||
|
|
@ -207,28 +207,65 @@ class RubarBE(CommandLineSolver):
|
||||||
) as f:
|
) as f:
|
||||||
for edge in study.river.enable_edges():
|
for edge in study.river.enable_edges():
|
||||||
lm = len(edge) + 1
|
lm = len(edge) + 1
|
||||||
|
f.write(f"{lm:>13}\n")
|
||||||
|
|
||||||
f.write(f"{lm:>13}")
|
for mails in [edge.reach.inter_profiles_kp(),
|
||||||
|
edge.reach.profiles.get_kp()]:
|
||||||
# TMAIL
|
|
||||||
ind = 0
|
ind = 0
|
||||||
for inter in edge.reach.inter_profiles_kp():
|
for mail in mails:
|
||||||
f.write(f"{inter:15.3f}")
|
f.write(f"{mail:15.3f}")
|
||||||
|
|
||||||
ind += 1
|
ind += 1
|
||||||
if ind % 3 == 0:
|
if ind % 3 == 0:
|
||||||
f.write("\n")
|
f.write("\n")
|
||||||
|
|
||||||
# New line (if last iteration do not finish with new
|
|
||||||
# line)
|
|
||||||
if ind % 3 != 0:
|
if ind % 3 != 0:
|
||||||
f.write("\n")
|
f.write("\n")
|
||||||
|
|
||||||
# XTMAIL
|
def _export_stricklers(self, study, repertory, files, qlog, name="0"):
|
||||||
ind = 0
|
self._export_frot(study, repertory, files, qlog, name="0", version="")
|
||||||
for profile in edge.reach.profiles:
|
self._export_frot(study, repertory, files, qlog, name="0", version="2")
|
||||||
f.write(f" {profile.kp:15.3f} ")
|
|
||||||
|
def _export_frot(self, study, repertory, files, qlog, name="0", version=""):
|
||||||
|
if qlog is not None:
|
||||||
|
qlog.put("Export FROT file")
|
||||||
|
|
||||||
|
with open(
|
||||||
|
os.path.join(
|
||||||
|
repertory, f"frot{version}.{name}"
|
||||||
|
), "w+"
|
||||||
|
) as f:
|
||||||
|
for edge in study.river.enable_edges():
|
||||||
|
lm = len(edge) + 1
|
||||||
|
f.write(f"{lm:>6}\n")
|
||||||
|
|
||||||
|
# TODO: Take in consideration begin and end Stricklers
|
||||||
|
f_i = list(
|
||||||
|
map(
|
||||||
|
lambda f: (f.begin_kp, f.end_kp, f.begin_strickler),
|
||||||
|
reach.frictions
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_stricklers_from_kp(kp):
|
||||||
|
return next(
|
||||||
|
map(
|
||||||
|
lambda s: (
|
||||||
|
s[2].medium if version == "2"
|
||||||
|
else s[2].minor
|
||||||
|
),
|
||||||
|
filter(
|
||||||
|
lambda f: f.contains_kp(kp), f_i
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
ind = 1
|
||||||
|
for mail in edge.reach.inter_profiles_kp():
|
||||||
|
coef = get_stricklers_from_kp(mail)
|
||||||
|
|
||||||
|
f.write(f"{ind:>6} {coef:>12.5f}")
|
||||||
|
|
||||||
ind += 1
|
ind += 1
|
||||||
if ind % 3 == 0:
|
|
||||||
f.write("\n")
|
f.write("\n")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue