Commit ca3ba3ad authored by Pierre-Antoine Rouby's avatar Pierre-Antoine Rouby
Browse files

Solver: RubarBE: Add frictions export.

Showing with 59 additions and 17 deletions
+59 -17
...@@ -209,6 +209,11 @@ class Friction(SQLSubModel): ...@@ -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): ...@@ -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()]:
ind = 0
for mail in mails:
f.write(f"{mail:15.3f}")
# TMAIL ind += 1
ind = 0 if ind % 3 == 0:
for inter in edge.reach.inter_profiles_kp(): f.write("\n")
f.write(f"{inter:15.3f}")
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 def _export_stricklers(self, study, repertory, files, qlog, name="0"):
# line) self._export_frot(study, repertory, files, qlog, name="0", version="")
if ind % 3 != 0: self._export_frot(study, repertory, files, qlog, name="0", version="2")
f.write("\n")
# XTMAIL def _export_frot(self, study, repertory, files, qlog, name="0", version=""):
ind = 0 if qlog is not None:
for profile in edge.reach.profiles: qlog.put("Export FROT file")
f.write(f" {profile.kp:15.3f} ")
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")
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment