def make_illustration_snapshot(): fig = plt.figure() ax = fig.gca() model = vicsek_model_factory(model='angular', n=200, L=100.0, eta=0.2, v_0=0.5) for _ in range(100): model.iterate() ejm_rcparams.set_pretty_plots(use_latex=True, use_pgf=True) ejm_rcparams.prettify_axes(ax) ax.set_xlim(-model.L_half, model.L_half) ax.set_ylim(-model.L_half, model.L_half) ax.set_aspect('equal') i_source = np.argmin(np.sum(np.square(model.r), axis=1)) r_i = model.r[i_source] c = plt.Circle(r_i, radius=model.r_v, fill=False, edgecolor='red') ax.add_patch(c) colors = np.zeros([model.n]) colors[i_source] = 1.0 i_neighbs = model._neighbs(i_source) for i_neighb in i_neighbs: colors[i_neighb] = 0.5 s = 2.0 ax.quiver(model.r[:, 0], model.r[:, 1], s * model.L * model.u[:, 0], s * model.L * model.u[:, 1], colors, pivot='mid', edgecolor='none') ax.axis('off') plt.savefig('vicsek_snapshot_demo.pdf', bbox_inches='tight', transparent=True)
def eta_scan(model, n, L, v_0, num_equil, num_measure, etas): for eta in etas: m = vicsek_model_factory(model=model, n=n, L=L, eta=eta, v_0=v_0) # Equilibrate for _ in range(num_equil): m.iterate() # Take measurements mags = [] for _ in range(num_measure): m.iterate() mags.append(m.macro_u_mag) yield eta, np.mean(mags), np.std(mags), len(mags)
def make_disordered_snapshot(): model = vicsek_model_factory(model='angular', n=100, L=100.0, eta=0.8, v_0=0.5) for _ in range(100): model.iterate() fig = plt.figure() ax = fig.gca() ejm_rcparams.set_pretty_plots(use_latex=True, use_pgf=True) ejm_rcparams.prettify_axes(ax) ax.set_xlim(-model.L_half, model.L_half) ax.set_ylim(-model.L_half, model.L_half) ax.set_aspect('equal') s = 2.0 ax.quiver(model.r[:, 0], model.r[:, 1], s * model.L * model.u[:, 0], s * model.L * model.u[:, 1], pivot='mid', edgecolor='none') ax.axis('off') plt.savefig('vicsek_snapshot_disordered.pdf', bbox_inches='tight', transparent=True)
m = vicsek_model_factory(model=model, n=n, L=L, eta=eta, v_0=v_0) # Equilibrate for _ in range(num_equil): m.iterate() # Take measurements mags = [] for _ in range(num_measure): m.iterate() mags.append(m.macro_u_mag) yield eta, np.mean(mags), np.std(mags), len(mags) def make_vicsek_stats(): n = 2048 L = 32.0 v_0 = 0.5 num_equil = 100 num_measure = 500 for model in ('angular', 'vectorial'): if model == 'angular': etas = np.linspace(0.6, 0.8, 20) else: etas = np.linspace(0.55, 0.65, 20) stats = eta_scan(model, n, L, v_0, num_equil, num_measure, etas) np.savetxt('{}_stats.txt'.format(model), list(stats)) if __name__ == '__main__': plot_vicsek(vicsek_model_factory(model='angular', n=200, L=50.0, eta=0.05, v_0=0.5), 100)