tadd force chain statistics script - sphere - GPU-based 3D discrete element met… | |
git clone git://src.adamsgaard.dk/sphere | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit dfce171595e257cf25c6fc52744f673663865807 | |
parent 2dc0f7a74374dce778a1b3b77efdf4349c924ace | |
Author: Anders Damsgaard <[email protected]> | |
Date: Mon, 23 Feb 2015 10:40:30 +0100 | |
add force chain statistics script | |
Diffstat: | |
A python/halfshear-darcy-forcechainm… | 96 +++++++++++++++++++++++++++… | |
1 file changed, 96 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/python/halfshear-darcy-forcechainmapper.py b/python/halfshear-darc… | |
t@@ -0,0 +1,96 @@ | |
+#!/usr/bin/env python | |
+import matplotlib | |
+matplotlib.use('Agg') | |
+#matplotlib.rcParams.update({'font.size': 18, 'font.family': 'serif'}) | |
+matplotlib.rcParams.update({'font.size': 7, 'font.family': 'sans-serif'}) | |
+matplotlib.rc('text', usetex=True) | |
+matplotlib.rcParams['text.latex.preamble']=[r"\usepackage{amsmath}"] | |
+import shutil | |
+ | |
+import os | |
+import sys | |
+import numpy | |
+import sphere | |
+import matplotlib.pyplot as plt | |
+ | |
+sids =\ | |
+ ['halfshear-darcy-sigma0=80000.0-k_c=3.5e-13-mu=1.04e-07-ss=10000.0-A=… | |
+ #['halfshear-darcy-sigma0=80000.0-k_c=3.5e-13-mu=1.797e-06-ss=10000.0-… | |
+outformat = 'pdf' | |
+fluid = True | |
+#threshold = 100.0 # [N] | |
+ | |
+ | |
+ | |
+for sid in sids: | |
+ | |
+ sim = sphere.sim(sid, fluid=fluid) | |
+ | |
+ #nsteps = 2 | |
+ #nsteps = 10 | |
+ nsteps = sim.status() | |
+ | |
+ t = numpy.empty(nsteps) | |
+ n = numpy.empty(nsteps) | |
+ coordinationnumber = numpy.empty(nsteps) | |
+ nkept = numpy.empty(nsteps) | |
+ | |
+ for i in numpy.arange(nsteps): | |
+ sim.readstep(i+1) | |
+ t[i] = sim.currentTime() | |
+ #n[i] = countLoadedContacts(sim, threshold) | |
+ | |
+ if i > 0: | |
+ loaded_contacts_prev = numpy.copy(loaded_contacts) | |
+ pairs_prev = numpy.copy(sim.pairs) | |
+ | |
+ loaded_contacts = sim.findLoadedContacts( | |
+ threshold = sim.currentNormalStress()*2.) | |
+ #sim.currentNormalStress()/1000.) | |
+ n[i] = numpy.size(loaded_contacts) | |
+ | |
+ sim.findCoordinationNumber() | |
+ coordinationnumber[i] = sim.findMeanCoordinationNumber() | |
+ | |
+ nfound = 0 | |
+ if i > 0: | |
+ for a in loaded_contacts[0]: | |
+ for b in loaded_contacts_prev[0]: | |
+ if (sim.pairs[:,a] == pairs_prev[:,b]).all(): | |
+ nfound += 1; | |
+ | |
+ nkept[i] = nfound | |
+ | |
+ print coordinationnumber[i] | |
+ print nfound | |
+ | |
+ #fig = plt.figure(figsize=[8,8]) | |
+ fig = plt.figure(figsize=[3.5,7]) | |
+ | |
+ ax1 = plt.subplot(3,1,1) | |
+ #ax1.plot(t, n) | |
+ ax1.semilogy(t, n, 'k') | |
+ ax1.set_xlabel('Time $t$ [s]') | |
+ #ax1.set_ylabel(\ | |
+ #'Heavily loaded contacts $||\\boldsymbol{{f}}_n|| \\geq {}$ N'.fo… | |
+ #threshold)) | |
+ ax1.set_ylabel(\ | |
+ 'Heavily loaded contacts $\sigma_c \\geq \\sigma_0\\times 4$ Pa') | |
+ #'Heavily loaded contacts $||\\boldsymbol{{\sigma}}_c|| \\geq \\si… | |
+ | |
+ ax2 = plt.subplot(3,1,2) | |
+ ax2.semilogy(t, n - nkept, 'k') | |
+ ax2.set_xlabel('Time $t$ [s]') | |
+ ax2.set_ylabel(\ | |
+ 'New heavily loaded contacts $\sigma_c \\geq \\sigma_0\\times 4$ P… | |
+ #'Heavily loaded contacts $||\\boldsymbol{{\sigma}}_c|| \\geq \\si… | |
+ | |
+ ax3 = plt.subplot(3,1,3) | |
+ #ax3.semilogy(t, coordinationnumber) | |
+ ax3.plot(t, coordinationnumber, 'k') | |
+ ax3.set_xlabel('Time $t$ [s]') | |
+ ax3.set_ylabel('Coordination number $z$') | |
+ | |
+ | |
+ | |
+ plt.savefig(sid + '-nloaded.' + outformat) |