Exemplo n.º 1
0
def main():
    args = sys.argv[1:]
    argc_min = 1
    if len(args) < argc_min:
        print('usage:\npython condition.py    model_name     [N0,     N1,     R/dr]')
        sys.exit(1)
    
    model_name, keys, model_dir, graph_dir, time_gaps_str, N0, N1, Nfrm, E, P, Tmp, Tmp_av, t, stabTind, params = my.std_start(args, 0, 1, 2, 3)
    # std_start(args, model_i, N0_i, N1_i):
    # model_name, keys, graph_dir, time_gaps_str, N0, N1, Nfrm, E, Tmp, Tmp_av, t, stabTind, params
    
    if(len(args) < 4):
        path = os.path.join(my.RAW_DATA_PATH, model_name)
        all_filenames = [name_of_smth for name_of_smth in os.listdir(path) if os.path.isfile(os.path.join(path, name_of_smth))]
        Nslice = max([int(_x) for _x in re.findall(r'condition_(\d+).dat', ' '.join(all_filenames))])
    else:
        Nslice = int(args[3])
        
    input_filename = 'condition_' + str(Nslice) + '.dat'
    data = my.load_file(model_name, input_filename)
    x_dr = data[0];
    if(len(x_dr) != Nslice):
        print('wrong condition file\n' + input_filename + '\n' + 'Nslice = ' + str(Nslice) + '; len(x_dr) = ' + str(len(x_dr)))
        exit(1)
    data = data[1:]
    if(N1 > len(data)):
        print('wrong condition file\n' + input_filename + '\n' + 'max_frame_n = ' + str(len(data)-1))
        exit(1)
    draw_on_screen = my.find_key(keys, 'keep')
    if(not draw_on_screen):
        plt.switch_backend('Agg') 
    
    y_gFnc = data[0];
    for i in range(N0,N1):
        for j in range(Nslice):
            y_gFnc[j] += data[i,j]
            
        if(draw_on_screen):
            print('condition progress: ' + str((i+1-N0)/Nfrm*100) + '%                     \r', end='')
    y_gFnc = [_x/(N1-N0) for _x in y_gFnc]
    
    fig_c = -1
    fig = []
    time_gaps_str += ('_Nslice_' + str(Nslice))
    y0 = [math.exp(-my.phi_r(_x)) for _x in x_dr]
    
    path = os.path.join(graph_dir, 'g(t)_' + time_gaps_str + '.png')
    fig_c, fig = my.plot_error(fig_c, fig, x_dr, y_gFnc, y0=1, y_th=y0, x_lbl='r', y_lbl='n/n0', pic_path=path, filter_rng=round(params['R']/Nslice/0.05 + 0.5), draw_linfit='n', show_key=draw_on_screen)
    
    if(draw_on_screen):
        input()
Exemplo n.º 2
0
def main():
    args = sys.argv[1:]
    argc_min = 1
    if len(args) < argc_min:
        print('usage:\npython E.py    model_name    [keys   N0    N1]')
        sys.exit(1)

    model_name, keys, model_dir, graph_dir, time_gaps_str, N0, N1, Nfrm, E, P, Tmp, Tmp_av, t, stabTind, params = my.std_start(
        args, 0, 1, 2, 3)
    # std_start(args, model_i, N0_i, N1_i):
    # model_name, keys, graph_dir, time_gaps_str, N0, N1, Nfrm, E, Tmp, Tmp_av, t, stabTind, params

    #for i in range(N0, N1):
    #    for j in range(4):
    #        E[i,j] /= params['Ntot']
    E /= params['Ntot']

    fig_c = -1
    fig = []
    draw_on_screen = my.find_key(keys, 'keep')
    if (not draw_on_screen):
        plt.switch_backend('Agg')

    fig_c += 1
    # 0
    fig.append(plt.figure(fig_c))
    plt.plot(t[N0:N1], E[N0:N1, 2], '-', label='Etot')
    plt.plot(t[N0:N1], E[N0:N1, 0], '-', label='Ek')
    plt.plot(t[N0:N1], E[N0:N1, 1], '-', label='Ep')
    plt.xlabel('time')
    plt.ylabel('E')
    plt.grid(True)
    plt.legend(bbox_to_anchor=(0., 1.02, 1., .102),
               loc=3,
               ncol=3,
               mode="expand",
               borderaxespad=0.)
    if (draw_on_screen):
        fig[fig_c].show()
    path = os.path.join(graph_dir, 'Energy3_' + time_gaps_str + '.png')
    fig[fig_c].savefig(path)

    # 1
    E0 = np.mean(E[N0:N1, 0]) + abs(np.mean(E[N0:N1, 1]))
    path = os.path.join(graph_dir, 'dE_norm_' + time_gaps_str + '.png')
    E_av = np.mean(E[N0:N1, 2])
    #y = [(e_el - E[N0,2])/E0 for e_el in E[N0:N1,2]]
    y = [(e_el / E_av - 1) for e_el in E[N0:N1, 2]]
    fig_c, fig = my.plot_error(fig_c,
                               fig,
                               t[N0:N1],
                               y,
                               y0=0,
                               y_lbl='E/<E>-1',
                               tit='E/<E> - 1 | std = ' +
                               my.str_sgn_round(np.std(y), 3),
                               pic_path=path,
                               show_key=draw_on_screen)

    # shadow error
    E0 = np.mean(E[N0:N1, 0]) + abs(np.mean(E[N0:N1, 1]))
    path = os.path.join(graph_dir, 'dH_norm_' + time_gaps_str + '.png')
    H_av = np.mean(E[N0:N1, 3])
    y = [(e_el / H_av - 1) for e_el in E[N0:N1, 3]]
    #print(E[N0:N1, :])
    fig_c, fig = my.plot_error(fig_c,
                               fig,
                               t[N0:N1],
                               y,
                               y0=0,
                               y_lbl='H/<H>-1',
                               tit='H/<H> - 1 | std = ' +
                               my.str_sgn_round(np.std(y), 3),
                               pic_path=path,
                               show_key=draw_on_screen)

    # shadow
    fig_c += 1
    fig.append(plt.figure(fig_c))
    plt.plot(t[N0:N1], E[N0:N1, 2], '-', label='Etot')
    plt.plot(t[N0:N1], E[N0:N1, 3], '-', label='d2H')
    plt.legend(bbox_to_anchor=(0., 1.02, 1., .102),
               loc=3,
               ncol=2,
               mode="expand",
               borderaxespad=0.)
    if (draw_on_screen):
        fig[fig_c].show()
    path = os.path.join(graph_dir, 'E_H_' + time_gaps_str + '.png')
    fig[fig_c].savefig(path)

    # shadow term
    fig_c += 1
    fig.append(plt.figure(fig_c))
    plt.plot(t[N0:N1], E[N0:N1, 3] - E[N0:N1, 2], '-', label='$d^2 H$')
    plt.legend(bbox_to_anchor=(0., 1.02, 1., .102),
               loc=3,
               mode="expand",
               borderaxespad=0.)
    if (draw_on_screen):
        fig[fig_c].show()
    path = os.path.join(graph_dir, 'd2H_' + time_gaps_str + '.png')
    fig[fig_c].savefig(path)

    # Pressure
    path = os.path.join(graph_dir, 'Pressure_' + time_gaps_str + '.png')
    P_th = params['n'] * params['Tmp']
    y = P[N0:N1]
    fig_c, fig = my.plot_error(
        fig_c,
        fig,
        t[N0:N1],
        y,
        y_th=[_x * P_th for _x in np.ones(len(y))],
        y0=np.mean(P[N0:N1]),
        y_lbl='P',
        tit='P(time) | std_rel = ' +
        my.str_sgn_round(np.std(P[N0:N1]) / np.mean(P[N0:N1]), 3),
        pic_path=path,
        show_key=draw_on_screen)

    # 2
    #path = os.path.join(graph_dir, 'Etot_' + time_gaps_str + '.png')
    #y = [_x*params['Ntot'] for _x in E[N0:N1, 2]]
    #fig_c, fig = my.plot_error(fig_c, fig, t[N0:N1], y, y0=np.mean(y), y_lbl='Etot', tit='Etot | std = ' + my.str_sgn_round(np.std(y),3), pic_path=path, show_key=draw_on_screen)

    # 3
    #path = os.path.join(graph_dir, 'dE_normSQRT(N)_' + time_gaps_str + '.png')
    ##y = [(e_el - E[N0,2])*mth.sqrt(params['Ntot']) for e_el in E[N0:N1,2]]
    #y = [(e_el - E_av)*mth.sqrt(params['Ntot']) for e_el in E[N0:N1,2]]
    #fig_c, fig = my.plot_error(fig_c, fig, t[N0:N1], y, y0=0, y_lbl='(E - <E>)/sqrt(N)', tit='Esqrt | std = ' + my.str_sgn_round(np.std(y),3), pic_path=path, show_key=draw_on_screen)

    # 4
    #path = os.path.join(graph_dir, 'dE_' + time_gaps_str + '.png')
    ##y = [(e_el - E[N0,2])*params['Ntot'] for e_el in E[N0:N1,2]]
    #y = [(e_el - E_av)*params['Ntot'] for e_el in E[N0:N1,2]]
    #fig_c, fig = my.plot_error(fig_c, fig, t[N0:N1], y, y0=0, y_lbl='E - <E>', tit='E - <E> | std = ' + my.str_sgn_round(np.std(y),3), pic_path=path, show_key=draw_on_screen)

    # 5
    path = os.path.join(graph_dir, 'Tmp_' + time_gaps_str + '.png')
    y = Tmp
    fig_c, fig = my.plot_error(fig_c,
                               fig,
                               t[N0:N1],
                               Tmp,
                               y0=Tmp_av,
                               y_lbl='Tmp',
                               tit='Tmp | std_rel = ' +
                               my.str_sgn_round(np.std(Tmp) / Tmp_av, 3),
                               pic_path=path,
                               show_key=draw_on_screen)

    if (draw_on_screen):
        input()
Exemplo n.º 3
0
def main():
    args = sys.argv[1:]
    argc_min = 2
    if len(args) < argc_min:
        print(
            'usage: ./maxwell.py    model_name    N_V_steps    [keys,    N0,    N1]'
        )
        sys.exit(1)

    model_name, keys, graph_dir, time_gaps_str, N0, N1, Nfrm, E, Tmp, Tmp_av, t, stabTind, params = my.std_start(
        args, 0, 2, 3, 4)
    # std_start(args, model_i, N0_i, N1_i):
    # model_name, keys, graph_dir, time_gaps_str, N0, N1, Nfrm, E, Tmp, Tmp_av, t, stabTind, params

    NV = int(args[1])
    draw_on_screen = my.find_key(keys, 'keep')
    if (not draw_on_screen):
        plt.switch_backend('Agg')

    if (len(args) < 4):
        if (draw_on_screen):
            print("N0 isn't set, N0 = ", stabTind, ' will be used')
        N0 = stabTind
        Nfrm = N1 - N0

    Z_sum = math.pow(params['mu'] / 2 / np.pi / Tmp_av, 1.5)
    k0 = 2 * np.pi * Z_sum
    v_prob = math.sqrt(2 * Tmp_av / params['mu'])
    v2_prob = Tmp_av / params['mu']
    total_v2 = np.zeros(NV - 1)
    total_v = np.zeros(NV - 1)
    for n in range(N0, N1):
        x, v, m = my.read_frame(model_name, n)

        v2 = my.arrDot(v, v)
        v_abs = my.arrFnc(v2, math.sqrt)
        if (n == N0):
            #v2max = max(v2)
            #v2min = min(v2)
            v2max = 3 * Tmp_av / params['mu'] * 4
            v2min = 3 * Tmp_av / params['mu'] / 10
            k_v2 = 1 / (params['Ntot'] * (v2max - v2min) / NV * Nfrm)
            k_v = 1 / (params['Ntot'] *
                       (math.sqrt(v2max) - math.sqrt(v2min)) / NV * Nfrm)
            v2steps = np.linspace(v2min, v2max, num=NV)
            vsteps = np.linspace(math.sqrt(v2min), math.sqrt(v2max), num=NV)
            x_v2 = [(v2steps[i] + v2steps[i + 1]) / 2 for i in range(NV - 1)]
            x_v = [(vsteps[i] + vsteps[i + 1]) / 2 for i in range(NV - 1)]
            y0_v2 = [
                k0 * math.sqrt(_x) * math.exp(-params['mu'] * _x / 2 / Tmp_av)
                for _x in x_v2
            ]
            y0_v = [
                2 * k0 * _x * _x *
                math.exp(-params['mu'] * _x * _x / 2 / Tmp_av) for _x in x_v
            ]
            #y0_ln = [-params['mu']*_x/2/Tmp_av for _x in x_v2]
            y0_ln = []
            for _x in x_v2:
                _a = params['mu'] * _x / 2 / Tmp_av
                #y0_ln.append(math.log(1-2*_a/3/params['Ntot']) - _a)
                y0_ln.append(-_a)

        peaks, bin_edges = np.histogram(v2, bins=v2steps)
        for i in range(NV - 1):
            total_v2[i] += peaks[i]

        peaks, bin_edges = np.histogram(v_abs, bins=vsteps)
        for i in range(NV - 1):
            total_v[i] += peaks[i]

        if (draw_on_screen):
            print('maxwell progress: ' + str(
                (n + 1 - N0) / (N1 - N0) * 100) + '%                     \r',
                  end='')

    y_v2 = [total_v2[i] * k_v2 for i in range(NV - 1)]
    y_v = [total_v[i] * k_v for i in range(NV - 1)]
    y_ln = []
    for i in range(NV - 1):
        if (y_v2[i] > 0):
            y_ln.append(math.log(y_v2[i] / k0 / math.sqrt(x_v2[i])))
        else:
            y_ln.append(0)
    dy_v = [y_v[i] / y0_v[i] - 1 for i in range(len(x_v))]
    dy_v2 = [y_v2[i] / y0_v2[i] - 1 for i in range(len(x_v2))]
    dy_ln = [y_ln[i] / y0_ln[i] - 1 for i in range(len(x_v2))]

    p_lnp = np.poly1d(np.polyfit(x_v2, y_ln, 1))
    k_exp = -p_lnp.c[0]
    k_th = params['mu'] / 2 / Tmp_av
    #print('k_exp = ', k_exp)
    #print('k_th = ', k_th)
    s = 0
    for i in range(NV - 1):
        s += (p_lnp(x_v2[i]) - y_ln[i])**2
    s /= (NV - 2)
    if (draw_on_screen):
        print('S = ', s)

    fig_c = -1
    figs = []
    time_gaps_str += ('_NV_' + str(NV))

    path = os.path.join(graph_dir, 'p(v)_' + time_gaps_str + '.png')
    fig_c, figs = my.plot_error(fig_c,
                                figs,
                                x_v,
                                y_v,
                                y_th=y0_v,
                                x0=v_prob,
                                x_lbl='v',
                                y_lbl='p',
                                pic_path=path,
                                show_key=draw_on_screen)

    path = os.path.join(graph_dir, 'p(v2)_' + time_gaps_str + '.png')
    fig_c, figs = my.plot_error(fig_c,
                                figs,
                                x_v2,
                                y_v2,
                                y_th=y0_v2,
                                x0=v2_prob,
                                x_lbl='v^2',
                                y_lbl='p',
                                pic_path=path,
                                show_key=draw_on_screen)

    path = os.path.join(graph_dir, 'ln_p(v2)_' + time_gaps_str + '.png')
    #fig_c, figs = my.plot_error(fig_c, figs, x_v2, y_ln, y_th=y0_ln, x_lbl='v^2', y_lbl='ln(p/v^2)', tit='(ln(p/v^2))(v^2) | k_th = ' + my.str_sgn_round(k_th,3) + ',  k_exp = ' + my.str_sgn_round(k_exp,3) + ' | std = ' + my.str_sgn_round(s,3), pic_path=path, show_key=draw_on_screen)
    fig_c, figs = my.plot_error(fig_c,
                                figs,
                                x_v2,
                                y_ln,
                                y_th=y0_ln,
                                x_lbl='v^2',
                                y_lbl='ln(p/v^2)',
                                tit='k_th = ' + my.str_sgn_round(k_th, 3) +
                                ',  k_exp = ' + my.str_sgn_round(k_exp, 3) +
                                ' | std = ' + my.str_sgn_round(s, 3) +
                                ', p0 = ' + my.str_sgn_round(p_lnp.c[1], 3),
                                pic_path=path,
                                show_key=draw_on_screen)

    path = os.path.join(graph_dir, 'd_p(v)_' + time_gaps_str + '.png')
    fig_c, figs = my.plot_error(fig_c,
                                figs,
                                x_v,
                                dy_v,
                                x0=v_prob,
                                y0=0,
                                x_lbl='v',
                                y_lbl='p/p0-1',
                                pic_path=path,
                                show_key=draw_on_screen)

    path = os.path.join(graph_dir, 'd_p(v2)_' + time_gaps_str + '.png')
    fig_c, figs = my.plot_error(fig_c,
                                figs,
                                x_v2,
                                dy_v2,
                                x0=v2_prob,
                                y0=0,
                                x_lbl='v^2',
                                y_lbl='p/p0-1',
                                pic_path=path,
                                show_key=draw_on_screen)

    path = os.path.join(graph_dir, 'd_ln_p(v2)_' + time_gaps_str + '.png')
    fig_c, figs = my.plot_error(fig_c,
                                figs,
                                x_v2,
                                dy_ln,
                                y0=0,
                                x_lbl='v^2',
                                y_lbl='dln(p)',
                                pic_path=path,
                                show_key=draw_on_screen)

    if (draw_on_screen):
        input()
Exemplo n.º 4
0
def main():
    args = sys.argv[1:]
    argc_min = 1
    if len(args) < argc_min:
        print('usage: ./E.py    model_name    [keys   N0    N1]')
        sys.exit(1)
        
    model_name, keys, graph_dir, time_gaps_str, N0, N1, Nfrm, E, Tmp, Tmp_av, t, stabTind, params = my.std_start(args, 0, 1, 2, 3)
    # std_start(args, model_i, N0_i, N1_i):
    # model_name, keys, graph_dir, time_gaps_str, N0, N1, Nfrm, E, Tmp, Tmp_av, t, stabTind, params
    
    for i in range(N0, N1):
        for j in range(3):
            E[i,j] /= params['Ntot']
        
    fig_c = -1
    fig = []
    draw_on_screen = my.find_key(keys, 'keep')
    if(not draw_on_screen):
        plt.switch_backend('Agg') 
    
    fig_c += 1
    # 0
    fig.append(plt.figure(fig_c))
    plt.plot(t[N0:N1], E[N0:N1,2], '-', label = 'Etot')    
    plt.plot(t[N0:N1], E[N0:N1,0], '-', label = 'Ek')
    plt.plot(t[N0:N1], E[N0:N1,1], '-', label = 'Ep')
    plt.xlabel('time')
    plt.ylabel('E')
    plt.grid(True)
    plt.legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3,
               ncol=3, mode="expand", borderaxespad=0.)
    if(draw_on_screen):
        fig[fig_c].show()
    path = os.path.join(graph_dir, 'Energy3_' + time_gaps_str + '.png')
    fig[fig_c].savefig(path)    
    
    # 1    
    E0 = np.mean(E[N0:N1,0]) + abs(np.mean(E[N0:N1,1]))
    path = os.path.join(graph_dir, 'dE_norm_' + time_gaps_str + '.png')
    E_av = np.mean(E[:,2])
    #y = [(e_el - E[N0,2])/E0 for e_el in E[N0:N1,2]]
    y = [(e_el - E_av)/E0 for e_el in E[N0:N1,2]]
    fig_c, fig = my.plot_error(fig_c, fig, t[N0:N1], y, y0=0, y_lbl='E/<E>-1', tit='E/<E> - 1 | std = ' + my.str_sgn_round(np.std(y),3), pic_path=path, show_key=draw_on_screen)
    
    # 2
    path = os.path.join(graph_dir, 'Etot_' + time_gaps_str + '.png')
    y = [_x*params['Ntot'] for _x in E[N0:N1, 2]]
    fig_c, fig = my.plot_error(fig_c, fig, t[N0:N1], y, y0=np.mean(y), y_lbl='Etot', tit='Etot | std = ' + my.str_sgn_round(np.std(y),3), pic_path=path, show_key=draw_on_screen)
       
    # 3
    path = os.path.join(graph_dir, 'dE_normSQRT(N)_' + time_gaps_str + '.png')
    #y = [(e_el - E[N0,2])*mth.sqrt(params['Ntot']) for e_el in E[N0:N1,2]]
    y = [(e_el - E_av)*mth.sqrt(params['Ntot']) for e_el in E[N0:N1,2]]
    fig_c, fig = my.plot_error(fig_c, fig, t[N0:N1], y, y0=0, y_lbl='(E - <E>)/sqrt(N)', tit='Esqrt | std = ' + my.str_sgn_round(np.std(y),3), pic_path=path, show_key=draw_on_screen)
    
    # 4
    path = os.path.join(graph_dir, 'dE_' + time_gaps_str + '.png')
    #y = [(e_el - E[N0,2])*params['Ntot'] for e_el in E[N0:N1,2]]
    y = [(e_el - E_av)*params['Ntot'] for e_el in E[N0:N1,2]]
    fig_c, fig = my.plot_error(fig_c, fig, t[N0:N1], y, y0=0, y_lbl='E - <E>', tit='E - <E> | std = ' + my.str_sgn_round(np.std(y),3), pic_path=path, show_key=draw_on_screen)
       
    # 5
    path = os.path.join(graph_dir, 'Tmp_' + time_gaps_str + '.png')
    fig_c, fig = my.plot_error(fig_c, fig, t[N0:N1], Tmp, y0=Tmp_av, y_lbl='Tmp', tit='Tmp | std/Tmp = ' + my.str_sgn_round(np.std(Tmp)/Tmp_av,3), pic_path=path, show_key=draw_on_screen)
    
    if(draw_on_screen):
        input()