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()
|
||||
|
||||
def contains_kp(self, kp):
|
||||
return (
|
||||
self._begin_kp <= kp <= self._end_kp
|
||||
)
|
||||
|
||||
@property
|
||||
def begin_strickler(self):
|
||||
return self._begin_strickler
|
||||
|
|
|
|||
|
|
@ -207,28 +207,65 @@ class RubarBE(CommandLineSolver):
|
|||
) as f:
|
||||
for edge in study.river.enable_edges():
|
||||
lm = len(edge) + 1
|
||||
f.write(f"{lm:>13}\n")
|
||||
|
||||
f.write(f"{lm:>13}")
|
||||
|
||||
# TMAIL
|
||||
for mails in [edge.reach.inter_profiles_kp(),
|
||||
edge.reach.profiles.get_kp()]:
|
||||
ind = 0
|
||||
for inter in edge.reach.inter_profiles_kp():
|
||||
f.write(f"{inter:15.3f}")
|
||||
for mail in mails:
|
||||
f.write(f"{mail:15.3f}")
|
||||
|
||||
ind += 1
|
||||
if ind % 3 == 0:
|
||||
f.write("\n")
|
||||
|
||||
# New line (if last iteration do not finish with new
|
||||
# line)
|
||||
if ind % 3 != 0:
|
||||
f.write("\n")
|
||||
|
||||
# XTMAIL
|
||||
ind = 0
|
||||
for profile in edge.reach.profiles:
|
||||
f.write(f" {profile.kp:15.3f} ")
|
||||
def _export_stricklers(self, study, repertory, files, qlog, name="0"):
|
||||
self._export_frot(study, repertory, files, qlog, name="0", version="")
|
||||
self._export_frot(study, repertory, files, qlog, name="0", version="2")
|
||||
|
||||
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
|
||||
if ind % 3 == 0:
|
||||
f.write("\n")
|
||||
|
|
|
|||
Loading…
Reference in New Issue