From ab7699eecd0431231d8f69c76a87b5380e16f38d Mon Sep 17 00:00:00 2001 From: sjplimp Date: Wed, 24 Nov 2010 20:38:59 +0000 Subject: [PATCH] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@5318 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- python/examples/viz_vmd.py | 91 ++++++++++++++ python/examples/vizplotgui_atomeye.py | 8 +- python/examples/vizplotgui_gl.py | 8 +- python/examples/vizplotgui_pymol.py | 4 +- python/examples/vizplotgui_vmd.py | 173 ++++++++++++++++++++++++++ 5 files changed, 274 insertions(+), 10 deletions(-) create mode 100755 python/examples/viz_vmd.py create mode 100755 python/examples/vizplotgui_vmd.py diff --git a/python/examples/viz_vmd.py b/python/examples/viz_vmd.py new file mode 100755 index 0000000000..bce8360d35 --- /dev/null +++ b/python/examples/viz_vmd.py @@ -0,0 +1,91 @@ +#!/usr/local/bin/python -i +# preceeding line should have path for Python on your machine + +# viz_vmd.py +# Purpose: viz running LAMMPS simulation via VMD +# Syntax: viz_vmd.py in.lammps Nfreq Nsteps +# in.lammps = LAMMPS input script +# Nfreq = dump and viz shapshot every this many steps +# Nsteps = run for this many steps + +import sys +sys.path.append("./pizza") + +# parse command line + +argv = sys.argv +if len(argv) != 4: + print "Syntax: viz_vmd.py in.lammps Nfreq Nsteps" + sys.exit() + +infile = sys.argv[1] +nfreq = int(sys.argv[2]) +nsteps = int(sys.argv[3]) + +me = 0 +# uncomment if running in parallel via Pypar +#import pypar +#me = pypar.rank() +#nprocs = pypar.size() + +from lammps import lammps +lmp = lammps() + +# run infile all at once +# assumed to have no run command in it + +lmp.file(infile) +lmp.command("thermo %d" % nfreq) +lmp.command("dump python all atom %d tmp.dump" % nfreq) + +# initial 0-step run to generate dump file and image + +lmp.command("run 0 pre yes post no") +ntimestep = 0 + +# wrapper on VMD window via Pizza.py vmd tool +# just proc 0 handles reading of dump file and viz + +if me == 0: + from vmd import vmd + v = vmd() + v('menu main off') + v.rep('VDW') + + from dump import dump + from pdbfile import pdbfile + + d = dump('tmp.dump',0) + p = pdbfile(d) + d.next() + d.unscale() + p.single(ntimestep) + v.new('tmp.pdb','pdb') + +# run nfreq steps at a time w/out pre/post, read dump snapshot, display it + +while ntimestep < nsteps: + lmp.command("run %d pre no post no" % nfreq) + ntimestep += nfreq + if me == 0: + d.next() + d.unscale() + p.single(ntimestep) + # add frame to current data set + v.append('tmp.pdb','pdb') + # delete all frame and add new. + #v.update('tmp.dump') + +lmp.command("run 0 pre no post yes") + +if me == 0: + v.flush() + # uncomment the following, if you want to work with the viz some more. + #v('menu main on') + #print "type quit to terminate." + #v.enter() + #v.stop() + +# uncomment if running in parallel via Pypar +#print "Proc %d out of %d procs has" % (me,nprocs), lmp +#pypar.finalize() diff --git a/python/examples/vizplotgui_atomeye.py b/python/examples/vizplotgui_atomeye.py index 7969e8a1bd..879b6b061a 100755 --- a/python/examples/vizplotgui_atomeye.py +++ b/python/examples/vizplotgui_atomeye.py @@ -1,9 +1,9 @@ #!/usr/local/bin/python -i # preceeding line should have path for Python on your machine -# vizplotgui.py -# Purpose: viz running LAMMPS simulation with plot and GUI -# Syntax: vizplotgui.py in.lammps Nfreq compute-ID +# vizplotgui_atomeye.py +# Purpose: viz running LAMMPS simulation via AtomEye with plot and GUI +# Syntax: vizplotgui_atomeye.py in.lammps Nfreq compute-ID # in.lammps = LAMMPS input script # Nfreq = plot data point and viz shapshot every this many steps # compute-ID = ID of compute that calculates temperature @@ -49,7 +49,7 @@ def update(ntimestep): argv = sys.argv if len(argv) != 4: - print "Syntax: vizplotgui.py in.lammps Nfreq compute-ID" + print "Syntax: vizplotgui_atomeye.py in.lammps Nfreq compute-ID" sys.exit() infile = sys.argv[1] diff --git a/python/examples/vizplotgui_gl.py b/python/examples/vizplotgui_gl.py index e134c8791d..a0d84383e7 100755 --- a/python/examples/vizplotgui_gl.py +++ b/python/examples/vizplotgui_gl.py @@ -1,9 +1,9 @@ #!/usr/local/bin/python -i # preceeding line should have path for Python on your machine -# vizplotgui.py -# Purpose: viz running LAMMPS simulation with plot and GUI -# Syntax: vizplotgui.py in.lammps Nfreq compute-ID +# vizplotgui_gl.py +# Purpose: viz running LAMMPS simulation via GL tool with plot and GUI +# Syntax: vizplotgui_gl.py in.lammps Nfreq compute-ID # in.lammps = LAMMPS input script # Nfreq = plot data point and viz shapshot every this many steps # compute-ID = ID of compute that calculates temperature @@ -46,7 +46,7 @@ def update(ntimestep): argv = sys.argv if len(argv) != 4: - print "Syntax: vizplotgui.py in.lammps Nfreq compute-ID" + print "Syntax: vizplotgui_gl.py in.lammps Nfreq compute-ID" sys.exit() infile = sys.argv[1] diff --git a/python/examples/vizplotgui_pymol.py b/python/examples/vizplotgui_pymol.py index d5b356e390..0ec2c9fe10 100755 --- a/python/examples/vizplotgui_pymol.py +++ b/python/examples/vizplotgui_pymol.py @@ -2,7 +2,7 @@ # preceeding line should have path for Python on your machine # vizplotgui_pymol.py -# Purpose: viz running LAMMPS simulation with plot and GUI +# Purpose: viz running LAMMPS simulation via PyMol with plot and GUI # Syntax: vizplotgui_pymol.py in.lammps Nfreq compute-ID # in.lammps = LAMMPS input script # Nfreq = plot data point and viz shapshot every this many steps @@ -48,7 +48,7 @@ def update(ntimestep): argv = sys.argv if len(argv) != 4: - print "Syntax: vizplotgui.py in.lammps Nfreq compute-ID" + print "Syntax: vizplotgui_pymol.py in.lammps Nfreq compute-ID" sys.exit() infile = sys.argv[1] diff --git a/python/examples/vizplotgui_vmd.py b/python/examples/vizplotgui_vmd.py new file mode 100755 index 0000000000..0db1791595 --- /dev/null +++ b/python/examples/vizplotgui_vmd.py @@ -0,0 +1,173 @@ +#!/usr/local/bin/python -i +# preceeding line should have path for Python on your machine + +# vizplotgui_vmd.py +# Purpose: viz running LAMMPS simulation via VMD with plot and GUI +# Syntax: vizplotgui_vmd.py in.lammps Nfreq compute-ID +# in.lammps = LAMMPS input script +# Nfreq = plot data point and viz shapshot every this many steps +# compute-ID = ID of compute that calculates temperature +# (or any other scalar quantity) + +# IMPORTANT: this script cannot yet be run in parallel via Pypar, +# because I can't seem to do a MPI-style broadcast in Pypar + +import sys,time +sys.path.append("./pizza") + +# methods called by GUI + +def run(): + global runflag + runflag = 1 +def stop(): + global runflag + runflag = 0 +def settemp(value): + global temptarget + temptarget = slider.get() +def quit(): + global breakflag + breakflag = 1 + +# method called by timestep loop every Nfreq steps +# read dump snapshot and viz it, update plot with compute value + +def update(ntimestep): + d.next() + d.unscale() + p.single(ntimestep) + v.append('tmp.pdb','pdb') + value = lmp.extract_compute(compute,0,0) + xaxis.append(ntimestep) + yaxis.append(value) + gn.plot(xaxis,yaxis) + +# parse command line + +argv = sys.argv +if len(argv) != 4: + print "Syntax: vizplotgui_vmd.py in.lammps Nfreq compute-ID" + sys.exit() + +infile = sys.argv[1] +nfreq = int(sys.argv[2]) +compute = sys.argv[3] + +me = 0 +# uncomment if running in parallel via Pypar +#import pypar +#me = pypar.rank() +#nprocs = pypar.size() + +from lammps import lammps +lmp = lammps() + +# run infile all at once +# assumed to have no run command in it +# dump a file in native LAMMPS dump format for Pizza.py dump tool + +lmp.file(infile) +lmp.command("thermo %d" % nfreq) +lmp.command("dump python all atom %d tmp.dump" % nfreq) + +# initial 0-step run to generate initial 1-point plot, dump file, and image + +lmp.command("run 0 pre yes post no") +value = lmp.extract_compute(compute,0,0) +ntimestep = 0 +xaxis = [ntimestep] +yaxis = [value] + +breakflag = 0 +runflag = 0 +temptarget = 1.0 + +# wrapper on VMD window via Pizza.py vmd tool +# just proc 0 handles reading of dump file and viz + +if me == 0: + from vmd import vmd + v = vmd() + v('menu main off') + v.rep('VDW') + + from dump import dump + from pdbfile import pdbfile + + d = dump('tmp.dump',0) + p = pdbfile(d) + d.next() + d.unscale() + p.single(ntimestep) + v.new('tmp.pdb','pdb') + +# display GUI with run/stop buttons and slider for temperature + +if me == 0: + from Tkinter import * + tkroot = Tk() + tkroot.withdraw() + root = Toplevel(tkroot) + root.title("LAMMPS GUI") + + frame = Frame(root) + Button(frame,text="Run",command=run).pack(side=LEFT) + Button(frame,text="Stop",command=stop).pack(side=LEFT) + slider = Scale(frame,from_=0.0,to=5.0,resolution=0.1, + orient=HORIZONTAL,label="Temperature") + slider.bind('',settemp) + slider.set(temptarget) + slider.pack(side=LEFT) + Button(frame,text="Quit",command=quit).pack(side=RIGHT) + frame.pack() + tkroot.update() + +# wrapper on GnuPlot via Pizza.py gnu tool + +if me == 0: + from gnu import gnu + gn = gnu() + gn.plot(xaxis,yaxis) + gn.title(compute,"Timestep","Temperature") + +# endless loop, checking status of GUI settings every Nfreq steps +# run with pre yes/no and post yes/no depending on go/stop status +# re-invoke fix langevin with new seed when temperature slider changes +# after re-invoke of fix langevin, run with pre yes + +running = 0 +temp = temptarget +seed = 12345 + +lmp.command("fix 2 all langevin %g %g 0.1 %d" % (temp,temp,seed)) + +while 1: + if me == 0: tkroot.update() + if temp != temptarget: + temp = temptarget + seed += me+1 + lmp.command("fix 2 all langevin %g %g 0.1 12345" % (temp,temp)) + running = 0 + if runflag and running: + lmp.command("run %d pre no post no" % nfreq) + ntimestep += nfreq + if me == 0: update(ntimestep) + elif runflag and not running: + lmp.command("run %d pre yes post no" % nfreq) + ntimestep += nfreq + if me == 0: update(ntimestep) + elif not runflag and running: + lmp.command("run %d pre no post yes" % nfreq) + ntimestep += nfreq + if me == 0: update(ntimestep) + if breakflag: break + if runflag: running = 1 + else: running = 0 + time.sleep(0.01) + +lmp.command("run 0 pre no post yes") + +# uncomment if running in parallel via Pypar +#print "Proc %d out of %d procs has" % (me,nprocs), lmp +#pypar.finalize()