From cda821389250d1529170e3da1b084478dc0421bc Mon Sep 17 00:00:00 2001
From: Richard Berger <richard.berger@temple.edu>
Date: Thu, 16 Mar 2017 01:41:28 -0400
Subject: [PATCH] Added Python matplotlib plot example

---
 python/examples/matplotlib_plot.py | 93 ++++++++++++++++++++++++++++++
 1 file changed, 93 insertions(+)
 create mode 100755 python/examples/matplotlib_plot.py

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...")
-- 
GitLab