Introduction
Introduction Statistics Contact Development Disclaimer Help
timplementing forcechains2d plot in sphere.py - sphere - GPU-based 3D discrete …
git clone git://src.adamsgaard.dk/sphere
Log
Files
Refs
LICENSE
---
commit d56b993770731d00848516d7910fd41e9f9d7356
parent df6ae0a224ab005821c2c6e95a35430975018268
Author: Anders Damsgaard <[email protected]>
Date: Tue, 23 Sep 2014 15:43:56 +0200
implementing forcechains2d plot in sphere.py
Diffstat:
M python/permeability-results.py | 2 ++
M python/shear-results-forces.py | 5 +++--
M python/shear-results.py | 12 ++++++++----
M python/shear-starter.py | 6 ++++--
M python/sphere.py | 54 +++++++++++++++++++++++++++++…
5 files changed, 71 insertions(+), 8 deletions(-)
---
diff --git a/python/permeability-results.py b/python/permeability-results.py
t@@ -60,6 +60,8 @@ for c_grad_p in cvals:
sim.readlast(verbose=False)
Re[c][i] = numpy.mean(sim.ReynoldsNumber())
+ #sim.writeVTKall()
+
# find magnitude of fluid pressure force and total interaction for…
'''
fp_magn = numpy.empty(sim.np)
diff --git a/python/shear-results-forces.py b/python/shear-results-forces.py
t@@ -15,11 +15,12 @@ from matplotlib.ticker import MaxNLocator
#steps = [5, 10, 100]
#steps = [5, 10]
-steps = sys.argv[2:]
+steps = sys.argv[3:]
nsteps_avg = 5 # no. of steps to average over
sigma0 = float(sys.argv[1])
-c_grad_p = 1.0
+#c_grad_p = 1.0
+c_grad_p = float(sys.argv[2])
c_phi = 1.0
sid = 'shear-sigma0=' + str(sigma0) + '-c_phi=' + \
diff --git a/python/shear-results.py b/python/shear-results.py
t@@ -16,8 +16,8 @@ import matplotlib.pyplot as plt
#sigma0_list = numpy.array([1.0e3, 2.0e3, 4.0e3, 10.0e3, 20.0e3, 40.0e3])
#sigma0 = 10.0e3
sigma0 = float(sys.argv[1])
-#cvals = [1.0, 0.1]
-cvals = [1.0]
+cvals = [1.0, 0.1]
+#cvals = [1.0]
c_phi = 1.0
shear_strain = [[], [], []]
t@@ -34,7 +34,8 @@ sid = 'shear-sigma0=' + sys.argv[1] + '-hw'
sim = sphere.sim(sid)
sim.readlast(verbose=False)
sim.visualize('shear')
-shear_strain[0] = sim.shear_strain
+#shear_strain[0] = sim.shear_strain
+shear_strain[0] = numpy.arange(sim.status()+1)
friction[0] = sim.tau/sim.sigma_eff
dilation[0] = sim.dilation
t@@ -55,7 +56,8 @@ for c in numpy.arange(1,len(cvals)+1):
sim.readlast(verbose=False)
sim.visualize('shear')
- shear_strain[c] = sim.shear_strain
+ #shear_strain[c] = sim.shear_strain
+ shear_strain[c] = numpy.arange(sim.status()+1)
friction[c] = sim.tau/sim.sigma_eff
dilation[c] = sim.dilation
t@@ -116,6 +118,8 @@ ax1.set_ylabel('Shear friction $\\tau/\\sigma\'$ [-]')
ax2.set_ylabel('Dilation $\\Delta h/(2r)$ [-]')
ax3.set_ylabel('Fluid pressure $p_\\text{f}$ [kPa]')
+ax1.set_xlim([200,300])
+
plt.setp(ax1.get_xticklabels(), visible=False)
plt.setp(ax2.get_xticklabels(), visible=False)
diff --git a/python/shear-starter.py b/python/shear-starter.py
t@@ -27,7 +27,7 @@ sim.readlast()
if fluid:
sim.sid = 'shear-sigma0=' + str(sigma0) + '-c_phi=' + str(c_phi) + \
- '-c_grad_p=' + str(c_grad_p) + '-hi_mu-lo_visc-hw'
+ '-c_grad_p=' + str(c_grad_p) + '-hi_mu-lo_visc-hw-noshear'
else:
sim.sid = 'shear-sigma0=' + str(sigma0) + '-hw'
t@@ -39,7 +39,8 @@ sim.cleanup()
sim.adjustUpperWall()
sim.zeroKinematics()
-sim.shear(1.0/20.0)
+#sim.shear(1.0/20.0)
+sim.shear(0.0)
if fluid:
#sim.num[2] *= 2
t@@ -51,6 +52,7 @@ sim.setFluidTopFixedPressure()
sim.setDEMstepsPerCFDstep(10)
sim.setMaxIterations(2e5)
sim.initTemporal(total = 20.0, file_dt = 0.01, epsilon=0.07)
+#sim.initTemporal(total = 20.0, file_dt = 0.01, epsilon=0.05)
sim.c_phi[0] = c_phi
sim.c_grad_p[0] = c_grad_p
sim.w_devs[0] = sigma0
diff --git a/python/sphere.py b/python/sphere.py
t@@ -3604,6 +3604,60 @@ class sim:
return self.shearStrainRate() * numpy.mean(self.radius) \
* numpy.sqrt(self.rho[0]/self.w_devs[0])
+ def findOverlaps(self):
+ '''
+ Find all particle-particle overlaps by a n^2 contact search. The
+ particle pair indexes and the distance of the overlaps is saved in the
+ object itself as the ``.pairs`` and ``.overlaps`` members.
+ '''
+
+ # Allocate big arrays instead of dynamically allocating during the
+ # iterative process. Blank positions will be erased afterwards
+ max_avg_contacts_per_particle = 16
+ self.pairs = numpy.empty(self.np*max_avg_contacts_per_particle, 2)
+ self.overlaps = numpy.empty_like(self.pairs)
+
+ p = 0
+ for i in numpy.arange(self.np):
+ for j in numpy.arange(self.np):
+
+ if i < j:
+ x_ij = self.x[i,:] - self.x[j,:]
+ x_ij_length = numpy.sqrt(x_ij.dot(x_ij))
+
+ delta_n = x_ij_length - (self.radius[i] + self.radius[j])
+
+ if delta_n < 0.0:
+ self.pairs[p,:] = [i,j]
+ self.overlaps[p] = delta_n
+ p += 1
+ self.pairs = self.pairs[:p+1,:]
+ self.overlaps = self.overlaps[:p+1]
+
+
+ def forcechains2d(self, lc=200.0, uc=650.0, outformat='png', axes=[0,2]):
+ '''
+ Visualizes the force chains in the system from the magnitude of the
+ normal contact forces, and produces an image of them. The force chains
+ are orthogonally projected into a 2d plane specified by the axes
+ parameter.
+
+ :param lc: Lower cutoff of contact forces. Contacts below are not
+ visualized
+ :type lc: float
+ :param uc: Upper cutoff of contact forces. Contacts above are
+ visualized with this value
+ :type uc: float
+ :param outformat: Format of output image. Possible values are
+ 'interactive', 'png', 'epslatex', 'epslatex-color'
+ :type outformat: str
+ :param axes: The coordinate system axes in the projection plane (0:x,
+ 1:y, 2:z), default 0,2.
+ :type axes: tuple
+ '''
+
+
+
def forcechains(self, lc=200.0, uc=650.0, outformat='png', disp='2d'):
'''
Visualizes the force chains in the system from the magnitude of the
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.