mirror of
https://gitlab.com/pamhyr/pamhyr2.git
synced 2026-10-30 03:20:41 +01:00
Compare commits
2
Commits
fef2a2e979
...
933c6c1952
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
933c6c1952 | ||
|
|
d8fd4488e2 |
No files matched your search
+19
-21
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
)
|
||||
|
||||
@@ -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']
|
||||
|
||||
Reference in new issue
Block a user