tadd script to plot shear zone internals - sphere - GPU-based 3D discrete element method algorithm with optional fluid coupling
(HTM) git clone git://src.adamsgaard.dk/sphere
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
(DIR) commit c3f43ac112b3dbefc930e2c82e437b6def40446b
(DIR) parent e4530ec4d724ea43f1e7ec7695c426c0021247db
(HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
Date: Tue, 9 Sep 2014 14:42:21 +0200
add script to plot shear zone internals
Diffstat:
A python/shear-results-forces.py | 107 +++++++++++++++++++++++++++++++
M python/shear-results.py | 2 +-
2 files changed, 108 insertions(+), 1 deletion(-)
---
(DIR) diff --git a/python/shear-results-forces.py b/python/shear-results-forces.py
t@@ -0,0 +1,107 @@
+#!/usr/bin/env python
+import matplotlib
+matplotlib.use('Agg')
+matplotlib.rcParams.update({'font.size': 18, 'font.family': 'serif'})
+matplotlib.rc('text', usetex=True)
+matplotlib.rcParams['text.latex.preamble']=[r"\usepackage{amsmath}"]
+import shutil
+
+import os
+import numpy
+import sphere
+from permeabilitycalculator import *
+import matplotlib.pyplot as plt
+
+#steps = [5, 10, 100]
+steps = [3]
+nsteps_avg = 1 # no. of steps to average over
+
+sigma0 = 10.0e3
+c_grad_p = 1.0
+c_phi = 1.0
+
+sid = 'shear-sigma0=' + str(sigma0) + '-c_phi=' + \
+ str(c_phi) + '-c_grad_p=' + str(c_grad_p) + '-hi_mu-lo_visc'
+sim = sphere.sim(sid, fluid=True)
+sim.readfirst(verbose=False)
+
+# particle z positions
+zpos_p = numpy.zeros((len(steps), sim.np))
+
+# cell midpoint cell positions
+zpos_c = numpy.zeros((len(steps), sim.num[2]))
+dz = sim.L[2]/sim.num[2]
+for i in numpy.arange(sim.num[2]):
+ zpos_c[:,i] = i*dz + 0.5*dz
+
+# particle x displacements
+xdisp = numpy.zeros((len(steps), sim.np))
+
+# particle-fluid force per particle
+f_pf = numpy.zeros_like(xdisp)
+
+# pressure - hydrostatic pressure
+dev_p = numpy.zeros((len(steps), sim.num[2]))
+
+s = 0
+for step in steps:
+
+ if os.path.isfile('../output/' + sid + '.status.dat'):
+
+ if step > sim.status():
+ raise Exception(
+ 'Simulation step %d not available (sim.status = %d).'
+ % (step, sim.status()))
+
+ for substep in numpy.arange(nsteps_avg):
+
+ sim.readstep(step + substep, verbose=False)
+
+ zpos_p[s,:] += sim.x[:,2]/nsteps_avg
+
+ xdisp[s,:] += sim.xyzsum[:,0]/nsteps_avg
+
+ for i in numpy.arange(sim.np):
+ f_pf[s,i] += \
+ sim.f_sum[i].dot(sim.f_sum[i])/nsteps_avg
+
+ dev_p[s,:] += \
+ numpy.average(numpy.average(sim.p_f, axis=0), axis=0)\
+ /nsteps_avg
+
+ else:
+ print(sid + ' not found')
+ s += 1
+
+fig = plt.figure(figsize=(8,4*(len(steps))))
+
+for s in numpy.arange(len(steps)):
+ ax1 = plt.subplot((s+1)*100 + 31)
+ ax2 = plt.subplot((s+1)*100 + 32, sharey=ax1)
+ ax3 = plt.subplot((s+1)*100 + 33, sharey=ax1)
+
+ ax1.plot(xdisp[s], zpos_p[s], '.')
+ ax2.plot(f_pf[s], zpos_p[s], '.')
+ ax3.plot(dev_p[s], zpos_c[s], '.')
+ #plt.plot(dpdz[c], K[c], 'o-', label='$c$ = %.2f' % (cvals[c]))
+ #plt.semilogx(dpdz[c], K[c], 'o-', label='$c$ = %.2f' % (cvals[c]))
+ #plt.semilogy(dpdz[c], K[c], 'o-', label='$c$ = %.2f' % (cvals[c]))
+ #plt.loglog(dpdz[c], K[c], 'o-', label='$c$ = %.2f' % (cvals[c]))
+
+ ax1.set_ylabel('Vertical position $z$ [m]')
+ ax1.set_xlabel('Horizontal particle displacement [m]')
+ ax2.set_xlabel('Average fluid pressure $\\bar{p_f}$ [Pa]')
+ ax3.set_xlabel('Average fluid-particle interaction force '
+ + '$||\\bar{\\boldsymbol{f_{pf}}}||$ [N]')
+ plt.setp(ax2.get_yticklabels(), visible=False)
+ plt.setp(ax3.get_yticklabels(), visible=False)
+ #ax1.grid()
+ #ax2.grid()
+ #ax1.legend(loc='lower right', prop={'size':18})
+ #ax2.legend(loc='lower right', prop={'size':18})
+
+plt.tight_layout()
+filename = 'shear-10kPa-forces.pdf'
+plt.savefig(filename)
+shutil.copyfile(filename, '/home/adc/articles/own/2-org/' + filename)
+print(filename)
(DIR) diff --git a/python/shear-results.py b/python/shear-results.py
t@@ -104,7 +104,7 @@ ax3.set_xlabel('Shear strain $\\gamma$ [-]')
ax1.set_ylabel('Shear friction $\\tau/\\sigma\'$ [-]')
ax2.set_ylabel('Dilation $\\Delta h/(2r)$ [-]')
-ax3.set_ylabel('Fluid pressure $p_\\text{f}$ [Pa]')
+ax3.set_ylabel('Fluid pressure $p_f$ [Pa]')
plt.setp(ax1.get_xticklabels(), visible=False)
plt.setp(ax2.get_xticklabels(), visible=False)