Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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()
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
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)
Ejemplo n.º 10
0
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)