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

Solver: RubarBE: Add tps export.

Showing with 72 additions and 1 deletion
+72 -1
...@@ -330,7 +330,6 @@ class RubarBE(CommandLineSolver): ...@@ -330,7 +330,6 @@ class RubarBE(CommandLineSolver):
) )
) )
ind = 1 ind = 1
for mail in edge.reach.inter_profiles_kp(): for mail in edge.reach.inter_profiles_kp():
coef = get_stricklers_from_kp(mail) coef = get_stricklers_from_kp(mail)
...@@ -339,3 +338,75 @@ class RubarBE(CommandLineSolver): ...@@ -339,3 +338,75 @@ class RubarBE(CommandLineSolver):
ind += 1 ind += 1
f.write("\n") f.write("\n")
def _export_tps(self, study, repertory, files, qlog, name="0"):
if qlog is not None:
qlog.put("Export TPS file")
with open(
os.path.join(
repertory, f"tps.{name}"
), "w+"
) as f:
for reach in study.river.enable_edges():
f.write(f"0.0\n")
ics = study.river.initial_conditions.get(reach)
data = self._export_tps_init_data(ics)
profiles = edge.reach.profiles
first = profiles[0]
last = profiles[-1]
f_h_s = self._export_tps_profile_height_speed(first, data)
l_h_s = self._export_tps_profile_height_speed(last, data)
# First mail
f.write(f"{1:>5} {f_h_s[0]} {f_h_s[1]}")
ind = 2
it = iter(profiles)
prev = next(profiles)
prev_h, prev_s = f_h_s
for profile in it:
cur_h, cur_s = self._export_tps_profile_height_speed(
profile, data
)
# Mean of height and speed
h = (prev_h + cur_h) / 2
s = (prev_s + cur_s) / 2
f.write(f"{ind:>5} {h} {s}")
prev_h, prev_s = cur_h, cur_s
ind += 1
# Last mail
f.write(f"{ind:>5} {f_h_s[0]} {f_h_s[1]}")
def _export_tps_init_data(self, ics):
data = {}
for ic in ics:
d = ic.data
if len(d) == 0:
continue
data[d['kp']] = (
d['elevation'],
d['discharge'],
)
return data
def _export_tps_profile_height_speed(self, profile, data):
z = data[profile.kp][0]
q = data[profile.kp][1]
heiglt = z - profile.z_min()
speed = profile.seed(q, z)
return height, speed
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