Compare commits

...
2 Commits
Author SHA1 Message Date
parouby 933c6c1952 Ensemble: PlotRKC: Add standard derivation. 2026-09-16 16:10:46 +02:00
parouby d8fd4488e2 Ensemble: Add standard derivation computation. 2026-09-16 15:24:00 +02:00
4 changed files with 73 additions and 38 deletions

No files matched your search

+19 -21
View File
@@ -1621,26 +1621,33 @@ class Mage8(Mage):
res["z_mean"] = z
res["q_mean"] = q
res["z_tmp_M2"] = np.zeros(z.shape)
res["q_tmp_M2"] = np.zeros(q.shape)
res["z_std_derivation"] = np.zeros(z.shape)
res["q_std_derivation"] = np.zeros(q.shape)
res["z_min"] = z
res["z_max"] = z
res["q_min"] = q
res["q_max"] = q
res["res_z_min"] = []
res["res_z_mean"] = []
res["res_z_max"] = []
res["res_q_min"] = []
res["res_q_mean"] = []
res["res_q_max"] = []
res["traces"] = []
else:
# Get mean results for Z and Q
n = run_number
res["z_mean"] = (res["z_mean"] * n + z) / (n + 1)
res["q_mean"] = (res["q_mean"] * n + q) / (n + 1)
for x, txt in [(z, "z"), (q, "q")]:
t_mean = f"{txt}_mean"
t_M2 = f"{txt}_tmp_M2"
t_std_deriv = f"{txt}_std_derivation"
delta = x - res[t_mean]
res[t_mean] += delta / n
delta_2 = x - res[t_mean]
res[t_M2] += delta * delta_2
res[t_std_deriv] = np.sqrt(res[t_M2] / n)
# Z and Q min max values
res["z_min"] = np.minimum(z, res["z_min"])
@@ -1648,15 +1655,6 @@ class Mage8(Mage):
res["q_min"] = np.minimum(q, res["q_min"])
res["q_max"] = np.maximum(q, res["q_max"])
# Keep results min, mean and max
# res["res_z_min"].append((run_number, np.min(z, axis=0)))
# res["res_z_mean"].append((run_number, np.mean(z, axis=0)))
# res["res_z_max"].append((run_number, np.max(z, axis=0)))
# res["res_q_min"].append((run_number, np.min(q, axis=0)))
# res["res_q_mean"].append((run_number, np.mean(q, axis=0)))
# res["res_q_max"].append((run_number, np.max(q, axis=0)))
@timer
def results_ensemble(self, study, repertory,
tables, run_number,
+52 -1
View File
@@ -88,6 +88,7 @@ class PlotRKCEnsemble(PamhyrPlot):
reach = results.river.reach(self._current_reach_id)
self.draw_bottom(reach)
self.draw_std_derivation(reach)
self.draw_water_elevation(reach)
self.draw_current(reach)
self.draw_profiles_hs(reach)
@@ -149,7 +150,6 @@ class PlotRKCEnsemble(PamhyrPlot):
if len(reach.geometry.profiles) != 0:
result = self.results[0]
rk = reach.geometry.get_rk()
z_min = reach.geometry.get_z_min()
self.water = []
@@ -174,6 +174,35 @@ class PlotRKCEnsemble(PamhyrPlot):
self.water.append(plot)
def draw_std_derivation(self, reach):
if len(reach.geometry.profiles) != 0:
result = self.results[0]
rk = reach.geometry.get_rk()
z_min = reach.geometry.get_z_min()
color = self.color_plot_ensemble_std_deriv
table = result.get("table")["z_mean"]
std_deriv = result.get("table")["z_std_derivation"]
ts = result.get_timestamp_id(self._current_timestamp)
gi_0, gi_1 = reach.global_index
water_z = table[ts, gi_0:gi_1 + 1]
std = std_deriv[ts, gi_0:gi_1 + 1]
water_z_b = water_z - std
water_z_t = water_z + std
plot = self.canvas.axes.fill_between(
rk, water_z_b, water_z_t,
lw=1., color=color, alpha=0.3,
label=f"Standard derivation",
)
self.water_std_deriv = plot
def draw_additional_data(self):
results = self.results[0]
@@ -247,6 +276,7 @@ class PlotRKCEnsemble(PamhyrPlot):
reach = results.river.reach(self._current_reach_id)
self.update_water_elevation()
self.update_std_derivation()
self.update_idle()
@@ -283,6 +313,27 @@ class PlotRKCEnsemble(PamhyrPlot):
self.water[i].set_data(rk, water_z)
def update_std_derivation(self):
result = self.results[0]
reach = result.river.reach(self._current_reach_id)
rk = reach.geometry.get_rk()
table = result.get("table")["z_mean"]
std_deriv = result.get("table")["z_std_derivation"]
ts = result.get_timestamp_id(self._current_timestamp)
gi_0, gi_1 = reach.global_index
water_z = table[ts, gi_0:gi_1 + 1]
std = std_deriv[ts, gi_0:gi_1 + 1]
water_z_b = water_z - std
water_z_t = water_z + std
self.water_std_deriv.set_data(rk, water_z_b, water_z_t)
def update_additional_data(self):
self.draw_additional_data()
self.update_idle()
+1 -16
View File
@@ -576,25 +576,10 @@ class SolverLogEnsWindow(SolverLogWindow):
table = {}
for key in ["z", "q"]:
for func in ["min", "mean", "max"]:
for func in ["min", "mean", "max", "std_derivation"]:
name = f"{key}_{func}"
table[name] = results.new_table_data(name, tables[name])
name = f"res_{name}"
table[name] = results.new_table_data(
name,
np.array(
list(map(lambda e: e[1], tables[name]))
)
)
# for nb, data in tables["traces"]:
# name = f"{nb}_"
# table[name + "z"] = results.new_table_data(name + "z",
# data["Z"])
# table[name + "q"] = results.new_table_data(name + "q",
# data["Q"])
table["samples"] = results.new_table_data(
"samples", np.array(self._run_samples)
)
+1
View File
@@ -46,6 +46,7 @@ class PamhyrPlot(APlot):
color_plot_ensemble_min = "green"
color_plot_ensemble_mean = "black"
color_plot_ensemble_max = "red"
color_plot_ensemble_std_deriv = "black"
colors = list(mplcolors.TABLEAU_COLORS)
linestyle = ['solid', 'dashed', 'dashdot', 'dotted']