Introduction
Introduction Statistics Contact Development Disclaimer Help
tadded forcechainsRose visualization method - sphere - GPU-based 3D discrete el…
git clone git://src.adamsgaard.dk/sphere
Log
Files
Refs
LICENSE
---
commit e86480db55360ef61f8cb441c0160817fec8689a
parent b62c9479b44eeba854093a26b5ad4c19325ae6a8
Author: Anders Damsgaard <[email protected]>
Date: Tue, 12 Mar 2013 05:53:29 +0100
added forcechainsRose visualization method
Diffstat:
M python/sphere.py | 64 +++++++++++++++++++++++++++++…
1 file changed, 64 insertions(+), 0 deletions(-)
---
diff --git a/python/sphere.py b/python/sphere.py
t@@ -1234,6 +1234,70 @@ class Spherebin:
subprocess.call("cd .. && ./forcechains " + nd + "-f " + outformat + "…
subprocess.call("gnuplot tmp.gp && rm tmp.bin && rm tmp.gp", shell=Tru…
+ def forcechainsRose(self):
+ ''' Visualize strike- and dip angles of the strongest force chains in a
+ rose plot.
+ '''
+ self.writebin()
+
+ subprocess.call("cd .. && ./forcechains -f txt input/" + self.sid + ".…
+
+ # data will have the shape (numcontacts, 7)
+ data = numpy.loadtxt("fc-tmp.txt", skiprows=1)
+
+ # find the max. value of the normal force
+ f_n_max = numpy.amax(data[:,6])
+
+ # specify the lower limit of force chains to do statistics on
+ f_n_lim = 0.25 * f_n_max * 0.6
+
+ # find the indexes of these contacts
+ I = numpy.nonzero(data[:,6] > f_n_lim)
+
+ # loop through these contacts and find the strike and dip of the conta…
+ strikelist = [] # strike direction of the normal vector, [0:360[
+ diplist = [] # dip of the normal vector, [0:90]
+ for i in I[0]:
+
+ x1 = data[i,0]
+ y1 = data[i,1]
+ z1 = data[i,2]
+ x2 = data[i,3]
+ y2 = data[i,4]
+ z2 = data[i,5]
+
+ if (z1 < z2):
+ xlower = x1; ylower = y1; zlower = z1
+ xupper = x2; yupper = y2; zupper = z2
+ else :
+ xlower = x2; ylower = y2; zlower = z2
+ xupper = x1; yupper = y1; zupper = z1
+
+ # Vector pointing downwards
+ dx = xlower - xupper
+ dy = ylower - yupper
+ dz = zlower - zupper
+ dhoriz = numpy.sqrt(dx**2 + dy**2)
+
+ # Find dip angle
+ diplist.append(math.degrees(math.atan((zupper - zlower)/dhoriz)))
+
+ # Find strike angle
+ if (ylower >= yupper): # in first two quadrants
+ strikelist.append(math.acos(dx/dhoriz))
+ else :
+ strikelist.append(2.0*numpy.pi - math.acos(dx/dhoriz))
+
+
+ plt.figure(figsize=[4,4])
+ ax = plt.subplot(111, polar=True, axisbg="w")
+ ax.scatter(strikelist, diplist, c='k', marker='+')
+ ax.set_rmax(90)
+ ax.set_rticks([])
+ plt.savefig("fc-" + self.sid + "-rose.pdf", transparent=True)
+
+ subprocess.call("rm fc-tmp.txt", shell=True)
+
def thinsection_x1x3(self,
x2 = 'center',
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.