def errors(dir, time_l, xy_lim): for time in time_l: # reading the model output var_model = reading_modeloutput(dir, time) var_model["x_range"] = np.arange(-xy_lim+var_model["dx"]/2., xy_lim, var_model["dx"]) assert(var_model["x_range"].shape[0] == var_model["h"].shape[0]), "domain size differs from model output shape" var_model["y_range"] = np.arange(-xy_lim+var_model["dy"]/2., xy_lim, var_model["dx"]) assert(var_model["y_range"].shape[0] == var_model["h"].shape[1]), "domainsize differs from model output shape" # calculating the analytical solution lamb = eq.d2_lambda_evol(time) h_an = eq.d2_height_plane(lamb, var_model["x_range"], var_model["y_range"]) # calculating the errors of the drop depth, eq. 25 and 26 from the paper h_diff = var_model["h"] - h_an points_nr = var_model["h"].shape[0] * var_model["h"].shape[1] delh_inf = abs(h_diff).max() delh_2 = 1./time * ((h_diff**2).sum() / points_nr )**0.5 # outputing general info if time == time_l[0]: file = open(dir + "_stats.txt", "w") fstring = ( "dx = {dx:.4f}\n" "dy = {dy:.4f}\n" "dt = {dt:.4f}\n" "number of points in the domain = {npoints}\n" "L_inf = max|h_m-h_an|\n" "L_2 = sqrt(sum(h_m-h_an)^2 / N) / time\n\n" ) file.write(fstring.format( dx = var_model["dx"], dy = var_model["dy"], dt = var_model["dt"], npoints = points_nr ) ) # outputting error statistics fstring = ( "time = {time:.4f}\n" "max(h_an) = {max_h_an:.7f}\n" "max(h_num) = {max_h_num:.7f}\n" "L_inf = {L_inf:.7f}\n" "L_2 = {L_2:.7f}\n" "max(px_num) = {max_px_num:.7f}\n" "max(py_num) = {max_py_num:.7f}\n\n" ) file.write(fstring.format( time = time, max_h_an = h_an.max(), max_h_num = var_model["h"].max(), L_inf = delh_inf, L_2 = delh_2, max_px_num = var_model["qx"].max(), max_py_num = var_model["qy"].max() ) ) file.close()
def errors(dir, time_l, xy_lim): for time in time_l: # reading the model output var_model = reading_modeloutput(dir, time) var_model["x_range"] = np.arange(-xy_lim + var_model["dx"] / 2., xy_lim, var_model["dx"]) assert (var_model["x_range"].shape[0] == var_model["h"].shape[0] ), "domain size differs from model output shape" var_model["y_range"] = np.arange(-xy_lim + var_model["dy"] / 2., xy_lim, var_model["dx"]) assert (var_model["y_range"].shape[0] == var_model["h"].shape[1] ), "domainsize differs from model output shape" # calculating the analytical solution lamb = eq.d2_lambda_evol(time) h_an = eq.d2_height_plane(lamb, var_model["x_range"], var_model["y_range"]) # calculating the errors of the drop depth, eq. 25 and 26 from the paper h_diff = var_model["h"] - h_an points_nr = var_model["h"].shape[0] * var_model["h"].shape[1] delh_inf = abs(h_diff).max() delh_2 = 1. / time * ((h_diff**2).sum() / points_nr)**0.5 # outputing general info if time == time_l[0]: file = open(dir + "_stats.txt", "w") fstring = ( "dx = {dx:.4f}\n" "dy = {dy:.4f}\n" "dt = {dt:.4f}\n" "number of points in the domain = {npoints}\n" "L_inf = max|h_m-h_an|\n" "L_2 = sqrt(sum(h_m-h_an)^2 / N) / time\n\n" ) file.write( fstring.format(dx=var_model["dx"], dy=var_model["dy"], dt=var_model["dt"], npoints=points_nr)) # outputting error statistics fstring = ("time = {time:.4f}\n" "max(h_an) = {max_h_an:.7f}\n" "max(h_num) = {max_h_num:.7f}\n" "L_inf = {L_inf:.7f}\n" "L_2 = {L_2:.7f}\n" "max(px_num) = {max_px_num:.7f}\n" "max(py_num) = {max_py_num:.7f}\n\n") file.write( fstring.format(time=time, max_h_an=h_an.max(), max_h_num=var_model["h"].max(), L_inf=delh_inf, L_2=delh_2, max_px_num=var_model["qx"].max(), max_py_num=var_model["qy"].max())) file.close()
def analytic_fig(ax, x_lim, time_l=[0,1,2,3], nxy=320): x_range = np.linspace(-x_lim, x_lim, nxy) y_range = np.zeros(nxy) oznacz = ['k', 'b', 'c', 'y', 'g', 'm', 'r'] for it, time in enumerate(time_l): lamb = eq.d2_lambda_evol(time) h = eq.d2_height(lamb, x_range, y_range) v = eq.d2_velocity(lamb, x_range, y_range) ax.plot(x_range, h, oznacz[it]) ax.plot(x_range, v, oznacz[it]+ "--") ps.ticks_changes(ax)
def analytic_fig(ax, x_lim, time_l=[0, 1, 2, 3], nxy=320): x_range = np.linspace(-x_lim, x_lim, nxy) y_range = np.zeros(nxy) oznacz = ['k', 'b', 'c', 'y', 'g', 'm', 'r'] for it, time in enumerate(time_l): lamb = eq.d2_lambda_evol(time) h = eq.d2_height(lamb, x_range, y_range) v = eq.d2_velocity(lamb, x_range, y_range) ax.plot(x_range, h, oznacz[it]) ax.plot(x_range, v, oznacz[it] + "--") ps.ticks_changes(ax)
def analytic_model_fig(ax, var_md, time=1): x_range = var_md["x_range"] y_range = 0 * var_md["x_range"] ind_cs = int(var_md["h"].shape[1]/2) lamb = eq.d2_lambda_evol(time) h_a = eq.d2_height(lamb, x_range, y_range) v_a = eq.d2_velocity(lamb, x_range, y_range) ax.plot(x_range, eq.d2_initial(x_range, y_range), 'k', x_range, h_a, 'b', x_range, var_md["h"][:,ind_cs], "r") ax.plot(x_range, 0*x_range, "k-", x_range, v_a, 'b--', x_range, var_md["vx"][:,ind_cs], "r--") ps.ticks_changes(ax)
def analytic_model_fig(ax, x_range, y_range, h_m, v_m, time=1): lamb = eq.d2_lambda_evol(time) h_a = eq.d2_height(lamb, x_range, y_range) v_a = eq.d2_velocity(lamb, x_range, y_range) ax.plot(x_range, eq.d2_initial(x_range, y_range), 'k', x_range, h_a, 'b', x_range, h_m, "r") ax.plot(x_range, 0*x_range, "k-", x_range, v_a, 'b--', x_range, v_m, "r--") #ax.set_ylim(-2,2) ps.ticks_changes(ax)
def analytic_model_fig(ax, var_md, time=1): x_range = var_md["x_range"] y_range = 0 * var_md["x_range"] ind_cs = int(var_md["h"].shape[1] / 2) lamb = eq.d2_lambda_evol(time) h_a = eq.d2_height(lamb, x_range, y_range) v_a = eq.d2_velocity(lamb, x_range, y_range) ax.plot(x_range, eq.d2_initial(x_range, y_range), 'k', x_range, h_a, 'b', x_range, var_md["h"][:, ind_cs], "r") ax.plot(x_range, 0 * x_range, "k-", x_range, v_a, 'b--', x_range, var_md["vx"][:, ind_cs], "r--") ps.ticks_changes(ax)
def analytic_model_fig(ax, x_range, y_range, h_m, v_m, time=1): lamb = eq.d2_lambda_evol(time) h_a = eq.d2_height(lamb, x_range, y_range) v_a = eq.d2_velocity(lamb, x_range, y_range) ax.plot(x_range, eq.d2_initial(x_range, y_range), 'k', x_range, h_a, 'b', x_range, h_m, "r") ax.plot(x_range, 0 * x_range, "k-", x_range, v_a, 'b--', x_range, v_m, "r--") #ax.set_ylim(-2,2) ps.ticks_changes(ax)
def analytic_fig(ax, time_l = [0,1,2,3], x_range = np.linspace(-8,8,320), y_range = np.zeros(320)): oznacz = ['k', 'b', 'c', 'y', 'g', 'm', 'r'] y0 = eq.d2_initial(x_range, y_range) for it, time in enumerate(time_l): lamb = eq.d2_lambda_evol(time) h = eq.d2_height(lamb, x_range, y_range) v = eq.d2_velocity(lamb, x_range, y_range) ax.plot(x_range, h, oznacz[it]) ax.plot(x_range, v, oznacz[it]+ "--") ps.ticks_changes(ax)
def analytic_fig(ax, time_l=[0, 1, 2, 3], x_range=np.linspace(-8, 8, 320), y_range=np.zeros(320)): oznacz = ['k', 'b', 'c', 'y', 'g', 'm', 'r'] y0 = eq.d2_initial(x_range, y_range) for it, time in enumerate(time_l): lamb = eq.d2_lambda_evol(time) h = eq.d2_height(lamb, x_range, y_range) v = eq.d2_velocity(lamb, x_range, y_range) ax.plot(x_range, h, oznacz[it]) ax.plot(x_range, v, oznacz[it] + "--") ps.ticks_changes(ax)