Solver: RubarBE: Add read results method.

scenarios
Pierre-Antoine 2025-10-09 15:26:24 +02:00
parent 19045329dc
commit 21e6c410e2
2 changed files with 53 additions and 7 deletions

View File

@ -20,7 +20,7 @@ import os
import logging import logging
import numpy as np import numpy as np
from tools import timer, trace, old_pamhyr_date_to_timestamp from tools import timer, trace, old_pamhyr_date_to_timestamp, logger_exception
from Solver.CommandLine import CommandLineSolver from Solver.CommandLine import CommandLineSolver
@ -543,8 +543,53 @@ class Rubar3(CommandLineSolver):
for d0, d1 in bc.data: for d0, d1 in bc.data:
f.write(f"{d1} {d0}\n") f.write(f"{d1} {d0}\n")
def read_hydlim(self, study, fname, results, qlog=None, name="0"): def read_profil(self, study, fname, results, qlog=None, name="0"):
return logger.info(f"read: profil.{name}")
with open(fname, "r") as f:
reachs = []
for i, edge in enumerate(study.river.enable_edges()):
reach = edge.reach
# Add results reach to reach list
res_reach = results.river.add(i)
reachs.append((res_reach, len(reach) + 1))
def read_data_line(f):
line = f.readline().split()
return tuple(map(float, line))
ts = set()
end = False
while True:
line = f.readline()
if line == "":
return
timestamp = float(line)
for reach, lm in reachs:
# First profile
z, s, q, e = read_data_line(f)
reach.set(0, timestamp, "Z", z)
reach.set(0, timestamp, "Q", q)
reach.set(0, timestamp, "V", s)
# For each profile
ind = 1
pz, ps, pq, pe = read_data_line(f)
while ind < lm - 2:
z, s, q, e = read_data_line(f)
reach.set(ind, timestamp, "Z", (z + pz) / 2)
reach.set(ind, timestamp, "Q", (q + pq) / 2)
reach.set(ind, timestamp, "V", (q + ps) / 2)
pz, ps, pq, pe = z, s, q, e
ind += 1
# Last profile
z, s, q, e = read_data_line(f)
reach.set(ind, timestamp, "Z", z)
reach.set(ind, timestamp, "Q", q)
reach.set(ind, timestamp, "V", s)
@timer @timer
def results(self, study, repertory, qlog=None, name="0"): def results(self, study, repertory, qlog=None, name="0"):
@ -554,14 +599,14 @@ class Rubar3(CommandLineSolver):
repertory=repertory, repertory=repertory,
name=name, name=name,
) )
results_file = f"hydlim.{name}" results_file = f"profil.{name}"
fname = os.path.join(repertory, results_file) fname = os.path.join(repertory, results_file)
if not os.path.isfile(fname): if not os.path.isfile(fname):
logger.info(f"Result file {results_file} does not exist") logger.warning(f"Result file {results_file} does not exist")
return None return None
try: try:
self.read_hydlim(study, fname, results, qlog, name=name) self.read_profil(study, fname, results, qlog, name=name)
except Exception as e: except Exception as e:
logger.error(f"Failed to read results") logger.error(f"Failed to read results")
logger_exception(e) logger_exception(e)

View File

@ -500,7 +500,8 @@ class SolverLogWindow(PamhyrWindow):
if self._results is None: if self._results is None:
def reading_fn(): def reading_fn():
self._results = self._solver.results( self._results = self._solver.results(
self._study, self._workdir, qlog=self._output self._study, self._workdir,
qlog=self._output, name=self._study.name
) )
dlg = WaitingDialog( dlg = WaitingDialog(