Source code for wolfgpu.plots

from pathlib import Path
from wolfgpu.gl_utils import Path, np
from wolfgpu.results_store import ResultsStore
from wolfgpu.simple_simulation import SimpleSimulation


import matplotlib.pyplot as plt
import numpy as np
import tqdm


[docs] def plot_evolution_of_simulation_base(sim: SimpleSimulation, rs: ResultsStore): #dx, dy = wolf2d.myparam.dxfin, wolf2d.myparam.dyfin dx, dy = sim.param_dx, sim.param_dy r = [] times = [] clock_times = [] for i in tqdm.tqdm(range(1,rs.nb_results)): t,h,qx,qy,dryup_niter,clock_t = rs.get_named_result(["t","h","qx","qy","dryup_niter","clock_t"],i) msk = h > 0 x_discharge = dx * qx[msk] y_discharge = dy * qy[msk] q = np.sqrt(x_discharge**2 + y_discharge**2) r.append( [np.sum(h[msk])*dx*dy, np.sum(q), dryup_niter]) times.append(t) clock_times.append(clock_t) rs.close() r = np.array(r) fig, axs = plt.subplots(2,2) axs[0,0].plot(times, r[:,0]) axs[0,0].set_xlabel("Sim. Time (s)") axs[0,0].set_ylabel("Water (m³)") axs[0,1].plot(times, r[:,1]) axs[0,1].set_xlabel("Sim. Time (s)") axs[0,1].set_ylabel("Q (m³/s)") #print((r[1:,2]-r[:-1,2]).tolist()) clock_times = np.array(clock_times) axs[1,0].bar(times, np.hstack([clock_times[1:][0], clock_times[1:] - clock_times[:-1]]), width=times[-1] /(1.5*rs.nb_results)) axs[1,0].set_xlabel("Clock Time (s)") axs[1,0].set_ylabel("Sim. Time (sec./recd)") # dry ups tiles * loops * RK or euler axs[1,1].bar(times, [r[0,2]] + (r[1:,2]-r[:-1,2]).tolist(), width=times[-1] /(1.5*rs.nb_results)) axs[1,1].set_xlabel("Sim. Time (s)") axs[1,1].set_ylabel("Dried ups tiles × loops") fig.tight_layout() plt.show()
[docs] def plot_evolution_of_simulation(path_to_model: Path, path_to_results_store: Path): # FIXME Put this in another package: the simulator should not know about the ResultStore import matplotlib.pyplot as plt # wolf2d: prev_sim2D =prev_sim2D(dir=str(path_to_model), splash=False, in_gui=False) rs = ResultsStore(path_to_results_store, "r") #dx, dy = wolf2d.dx_fine, wolf2d.dy_fine dx, dy = 1, 1 r = [] times = [] clock_times = [] for i in tqdm.tqdm(range(1,rs.nb_results)): t,h,qx,qy,dryup_niter,clock_t = rs.get_named_result(["t","h","qx","qy","dryup_niter","clock_t"],i) msk = h > 0 x_discharge = dx * qx[msk] y_discharge = dy * qy[msk] q = np.sqrt(x_discharge**2 + y_discharge**2) r.append( [np.sum(h[msk])*dx*dy, np.sum(q), dryup_niter]) times.append(t) clock_times.append(clock_t) rs.close() r = np.array(r) fig, axs = plt.subplots(2,2) axs[0,0].plot(times, r[:,0]) axs[0,0].set_xlabel("Sim. Time (s)") axs[0,0].set_ylabel("Water (m³)") axs[0,1].plot(times, r[:,1]) axs[0,1].set_xlabel("Sim. Time (s)") axs[0,1].set_ylabel("Q (m³/s)") #print((r[1:,2]-r[:-1,2]).tolist()) clock_times = np.array(clock_times) axs[1,0].bar(times, np.hstack([clock_times[1:][0], clock_times[1:] - clock_times[:-1]]), width=times[-1] /(1.5*rs.nb_results)) axs[1,0].set_xlabel("Clock Time (s)") axs[1,0].set_ylabel("Sim. Time (sec./recd)") # dry ups tiles * loops * RK or euler axs[1,1].bar(times, [r[0,2]] + (r[1:,2]-r[:-1,2]).tolist(), width=times[-1] /(1.5*rs.nb_results)) axs[1,1].set_xlabel("Sim. Time (s)") axs[1,1].set_ylabel("Dried ups tiles × loops") fig.tight_layout() plt.show()