git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@5201 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
109
python/examples/gui.py
Executable file
109
python/examples/gui.py
Executable file
@ -0,0 +1,109 @@
|
||||
#!/usr/local/bin/python -i
|
||||
# preceeding line should have path for Python on your machine
|
||||
|
||||
# gui.py
|
||||
# Purpose: control a continuously running LAMMPS simulation via a Tkinter GUI
|
||||
# Syntax: gui.py in.lammps Nfreq
|
||||
# in.lammps = LAMMPS input script
|
||||
# Nfreq = query GUI every this many steps
|
||||
|
||||
import sys,time
|
||||
|
||||
# methods called by GUI
|
||||
|
||||
def go():
|
||||
global runflag
|
||||
runflag = 1
|
||||
def stop():
|
||||
global runflag
|
||||
runflag = 0
|
||||
def settemp(value):
|
||||
global temptarget
|
||||
temptarget = slider.get()
|
||||
def quit():
|
||||
global breakflag
|
||||
breakflag = 1
|
||||
|
||||
# parse command line
|
||||
|
||||
argv = sys.argv
|
||||
if len(argv) != 3:
|
||||
print "Syntax: gui.py in.lammps Nfreq"
|
||||
sys.exit()
|
||||
|
||||
infile = sys.argv[1]
|
||||
nfreq = int(sys.argv[2])
|
||||
|
||||
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)
|
||||
|
||||
# display GUI with go/stop/quit buttons and slider for temperature
|
||||
# just proc 0 handles GUI
|
||||
|
||||
breakflag = 0
|
||||
runflag = 0
|
||||
temptarget = 1.0
|
||||
|
||||
if me == 0:
|
||||
from Tkinter import *
|
||||
tkroot = Tk()
|
||||
tkroot.withdraw()
|
||||
root = Toplevel(tkroot)
|
||||
root.title("LAMMPS GUI")
|
||||
|
||||
frame = Frame(root)
|
||||
Button(frame,text="Go",command=go).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('<ButtonRelease-1>',settemp)
|
||||
slider.set(temptarget)
|
||||
slider.pack(side=LEFT)
|
||||
Button(frame,text="Quit",command=quit).pack(side=RIGHT)
|
||||
frame.pack()
|
||||
tkroot.update()
|
||||
|
||||
# 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 %d" % (temp,temp,seed))
|
||||
running = 0
|
||||
if runflag and running:
|
||||
lmp.command("run %d pre no post no" % nfreq)
|
||||
elif runflag and not running:
|
||||
lmp.command("run %d pre yes post no" % nfreq)
|
||||
elif not runflag and running:
|
||||
lmp.command("run %d pre no post yes" % nfreq)
|
||||
if breakflag: break
|
||||
if runflag: running = 1
|
||||
else: running = 0
|
||||
time.sleep(0.01)
|
||||
|
||||
# uncomment if running in parallel via Pypar
|
||||
#print "Proc %d out of %d procs has" % (me,nprocs), lmp
|
||||
#pypar.finalize()
|
||||
Reference in New Issue
Block a user