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()
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()
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()
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()