diff --git a/src/Model/Friction/Friction.py b/src/Model/Friction/Friction.py index 2a138f80e09757bd34ae45d66fb2e41deaba8e12..d49de8f850d91e313ad3e785ca76a0bc2f778596 100644 --- a/src/Model/Friction/Friction.py +++ b/src/Model/Friction/Friction.py @@ -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 diff --git a/src/Solver/RubarBE.py b/src/Solver/RubarBE.py index 66386c11802944acfadddb189a76880e1ff3560d..2aa67278da97ab0f2b5f2f40f858df70aa7f61cf 100644 --- a/src/Solver/RubarBE.py +++ b/src/Solver/RubarBE.py @@ -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}") + 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 = 0 - for inter in edge.reach.inter_profiles_kp(): - f.write(f"{inter:15.3f}") + ind += 1 + if ind % 3 == 0: + f.write("\n") - ind += 1 - if ind % 3 == 0: + 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") + 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") - # XTMAIL - ind = 0 - for profile in edge.reach.profiles: - 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 - if ind % 3 == 0: - f.write("\n") + f.write("\n")