diff --git a/python/examples/matplotlib_plot.py b/python/examples/matplotlib_plot.py new file mode 100755 index 0000000000..d4e304aa19 --- /dev/null +++ b/python/examples/matplotlib_plot.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python -i +# preceding line should have path for Python on your machine + +# matplotlib_plot.py +# Purpose: plot Temp of running LAMMPS simulation via matplotlib +# Syntax: plot.py in.lammps Nfreq Nsteps compute-ID +# in.lammps = LAMMPS input script +# Nfreq = plot data point every this many steps +# Nsteps = run for this many steps +# compute-ID = ID of compute that calculates temperature +# (or any other scalar quantity) + +from __future__ import print_function +import sys +sys.path.append("./pizza") +import matplotlib +matplotlib.use('tkagg') +import matplotlib.pyplot as plt + +# parse command line + +argv = sys.argv +if len(argv) != 5: + print("Syntax: plot.py in.lammps Nfreq Nsteps compute-ID") + sys.exit() + +infile = sys.argv[1] +nfreq = int(sys.argv[2]) +nsteps = int(sys.argv[3]) +compute = sys.argv[4] + +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) + +# initial 0-step run to generate initial 1-point plot + +lmp.command("run 0 pre yes post no") +value = lmp.extract_compute(compute,0,0) +ntimestep = 0 +xaxis = [ntimestep] +yaxis = [value] + +# create matplotlib plot +# just proc 0 handles plotting + +if me == 0: + fig = plt.figure() + line, = plt.plot(xaxis, yaxis) + plt.xlim([0, nsteps]) + plt.title(compute) + plt.xlabel("Timestep") + plt.ylabel("Temperature") + plt.show(block=False) + +# run nfreq steps at a time w/out pre/post, query compute, refresh plot +import time + +while ntimestep < nsteps: + lmp.command("run %d pre no post no" % nfreq) + ntimestep += nfreq + value = lmp.extract_compute(compute,0,0) + xaxis.append(ntimestep) + yaxis.append(value) + if me == 0: + line.set_xdata(xaxis) + line.set_ydata(yaxis) + ax = plt.gca() + ax.relim() + ax.autoscale_view(True, True, True) + fig.canvas.draw() + +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() + +if sys.version_info[0] == 3: + input("Press Enter to exit...") +else: + raw_input("Press Enter to exit...")