def test_4atoms(): a = Atom("Ar", [0.5, 0.5, 0]) b = Atom("Ar", [0.5, -0.5, 0]) c = Atom("Ar", [-0.2, -0.5, 0]) d = Atom("Ar", [-0.5, 0.5, 0.5]) sys = MonatomicSystem([a, b, c, d], 6.0) v = Viewer() sr = v.add_renderer(SphereRenderer, sys.atoms) v.add_renderer(CubeRenderer, sys.boxsize) # evo takes times in picoseconds evo = evolve_generator(sys, t=1e3, tstep=0.002, periodic=True) def update_pos(): try: for i in range(100): sys, t = evo.next() sr.update(sys.r_array) except StopIteration: pass #import pylab as pl #pl.plot(distances, pitentials, 'o') #pl.show() v.schedule(update_pos) v.run()
def test_3(): '''Make this much more interactive''' from chemlab.graphics.processviewer import ProcessViewer boxsize = 30.0 nmol = 1000 sys = MonatomicSystem.random("Ar", nmol, boxsize) v = ProcessViewer() pr = v.add_renderer(SphereRenderer, sys.atoms) v.add_renderer(CubeRenderer, boxsize) for i in range(100): # Let's try to make periodic boundary conditions farray = forces.lennard_jones(sys.r_array, "Ar", periodic=boxsize) # Just this time let's assume masses are 1 sys.r_array, sys.varray = integrators.euler(sys.r_array, sys.varray, farray/30.17, 0.01) # Add more periodic conditions rarray = sys.r_array i_toopositive = rarray > boxsize * 0.5 rarray[i_toopositive] -= boxsize i_toonegative = rarray < - boxsize * 0.5 rarray[i_toonegative] += boxsize sys.r_array = rarray pr.update(rarray) v._p.join()
def test_periodic(): '''Now let's try to implement the periodic boundaries, we should try to put the molecules near the border and see if one molecule 'passes' the wall. ''' import pyglet pyglet.options['vsync'] = False # Let's say we have to store this in nm and picoseconds # I setup argon atoms pretty overlapping a = Atom("Ar", [0.5, 0.0, 0.0]) b = Atom("Ar", [-1.4, 0.0, 0.0]) sys = MonatomicSystem([a, b], 3.0) v = Viewer() sr = v.add_renderer(SphereRenderer, sys.atoms) v.add_renderer(CubeRenderer, sys.boxsize) # evo takes times in picoseconds evo = evolve_generator(sys, t=1e3, tstep=0.002, periodic=True) distances = [np.linalg.norm(sys.r_array[0] - sys.r_array[1])] pitentials = [ cenergy.lennard_jones(sys.r_array * 1e-9, 'Ar', periodic=False) ] def update_pos(): try: for i in range(100): sys, t = evo.next() dist = np.linalg.norm(sys.r_array[0] - sys.r_array[1]) pot = cenergy.lennard_jones(sys.r_array * 1e-9, 'Ar', periodic=False) distances.append(dist) pitentials.append(pot) sr.update(sys.r_array) except StopIteration: pass #import pylab as pl #pl.plot(distances, pitentials, 'o') #pl.show() v.schedule(update_pos) v.run()
def test_forces(): '''This test simply shows two atoms that are subject to a lennard jones potential. you can modulate the distance between atoms and see if this physically makes sense. For example two atoms at a distance of about 1.5sigma should bounce. ''' import pyglet pyglet.options['vsync'] = False # Let's say we have to store this in nm and picoseconds # I setup argon atoms pretty overlapping a = Atom("Ar", [0.0, 0.0, 0.0]) b = Atom("Ar", [1.00, 0.0, 0.0]) sys = MonatomicSystem([a, b], 3.0) v = Viewer() sr = v.add_renderer(SphereRenderer, sys.atoms) v.add_renderer(CubeRenderer, sys.boxsize) # evo takes times in picoseconds evo = evolve_generator(sys, t=1e2, tstep=0.002, periodic=False) distances = [np.linalg.norm(sys.r_array[0] - sys.r_array[1])] pitentials = [ cenergy.lennard_jones(sys.r_array * 1e-9, 'Ar', periodic=False) ] def update_pos(): try: for i in range(100): sys, t = evo.next() dist = np.linalg.norm(sys.r_array[0] - sys.r_array[1]) pot = cenergy.lennard_jones(sys.r_array * 1e-9, 'Ar', periodic=False) distances.append(dist) pitentials.append(pot) sr.update(sys.r_array) except StopIteration: import pylab as pl pl.plot(distances, pitentials, 'o') pl.show() v.schedule(update_pos) v.run()
def test_1(): boxsize = 50.0 sys = MonatomicSystem.random("Ne",500, boxsize) #x, y = pair_correlation(sys, 20) #pl.plot(x, y) for i in range(1000): print "Step ", i farray = forces.lennard_jones(sys.r_array, "Ne", periodic=boxsize) # Just this time let's assume masses are 1 sys.r_array, sys.varray = integrators.euler(sys.r_array, sys.varray, farray/300.17, 0.011) # Add more periodic conditions rarray = sys.r_array i_toopositive = rarray > boxsize * 0.5 rarray[i_toopositive] -= boxsize i_toonegative = rarray < - boxsize * 0.5 rarray[i_toonegative] += boxsize sys.r_array = rarray
def test_2(): boxsize = 15.0 #nm nmol = 400 sys = MonatomicSystem.random("Ar", nmol, boxsize) v = Viewer() pr = v.add_renderer(SphereRenderer, sys.atoms) v.add_renderer(CubeRenderer, boxsize) sys.varray = (np.random.rand(nmol, 3).astype(np.float32) - 0.5) gen = evolve_generator(sys, t=1000, tstep=0.002, periodic=True) def iterate(dt): for i in range(10): sys, t = gen.next() pr.update(sys.r_array) import pyglet pyglet.clock.schedule(iterate) pyglet.app.run()