Introduction
Introduction Statistics Contact Development Disclaimer Help
tupdate histogram to log, plot creep snapshots in loop - sphere - GPU-based 3D …
git clone git://src.adamsgaard.dk/sphere
Log
Files
Refs
LICENSE
---
commit df5ef21559c8d9f76c721a15950a144290b3e4f8
parent 14fb2bf075a6836438322eb5cfb2b70536a5c045
Author: Anders Damsgaard <[email protected]>
Date: Mon, 18 May 2015 13:17:31 +0200
update histogram to log, plot creep snapshots in loop
Diffstat:
M python/halfshear-darcy-creep-dynam… | 475 +++++++++------------------…
M python/sphere.py | 1 +
2 files changed, 139 insertions(+), 337 deletions(-)
---
diff --git a/python/halfshear-darcy-creep-dynamics.py b/python/halfshear-darcy-…
t@@ -29,6 +29,7 @@ matplotlib.rc('grid', linestyle=':', linewidth=0.2)
outformat='pdf'
+plotContacts=False
#sids = ['halfshear-darcy-sigma0=10000.0-k_c=2e-16-mu=2.08e-07-ss=2000.0-A=400…
sids = ['halfshear-darcy-sigma0=10000.0-k_c=2e-16-mu=2.08e-07-ss=2000.0-A=4375…
t@@ -59,6 +60,20 @@ f_n_max = 50 # for force chain plots
N = numpy.zeros_like(steps, dtype=numpy.float64)
t = numpy.zeros_like(steps, dtype=numpy.float64)
+scatter=False
+
+# insert plot positions
+Lx=[.17, .37, .65]
+Ly=[.3, .7, .4]
+dx=.23; dy=.23
+xytext_x=[Lx[0]+.15*dx, Lx[1]+.6*dx, Lx[2]+1.15*dx]
+xytext_y=[Ly[0]+dy+.07, Ly[1]+.15, .2]
+fc_x = [Lx[0]-.007, Lx[1]+dx+.08, Lx[2]-.007]
+fc_y = [Ly[0]-.07*dy, Ly[1]+.035, Ly[2]-.7*dy]
+fc_dx = [dx, dx, dx]
+fc_dy = [dy*.7, dy*.7, dy*.7]
+
+
s=0
for sid in sids:
t@@ -77,15 +92,14 @@ for sid in sids:
N[i] = sim.currentNormalStress('defined')
t[i] = sim.currentTime()
- '''
- outfolder='../img_out/' + sim.id() + '/'
- if not os.path.exists(outfolder):
- os.makedirs(outfolder)
- sim.plotContacts(outfolder=outfolder,
- alpha=0.9,
- lower_limit=lower_limit,
- upper_limit=upper_limit)
- '''
+ if plotContacts:
+ outfolder='../img_out/' + sim.id() + '/'
+ if not os.path.exists(outfolder):
+ os.makedirs(outfolder)
+ sim.plotContacts(outfolder=outfolder,
+ alpha=0.9,
+ lower_limit=lower_limit,
+ upper_limit=upper_limit)
if (step == plotsteps).any():
#contactdata.append(sim.plotContacts(return_data=True))
t@@ -150,338 +164,125 @@ for sid in sids:
ax1.locator_params(axis='y', nbins=4)
## Contact scatter plots
- dx=.23; dy=.23
# Scatter plot 1
- sc=0
- Lx=.17; Ly=.3;
- #xytext=(Lx+.5*dx, Ly+.5*dy)
- xytext=(Lx+.15*dx, Ly+dy+.07)
- xy=(ts[0]*scalingfactor, Ns[0]/1000.)
- #print xytext
- #print xy
- ax1.annotate('',
- xytext=xytext, textcoords='axes fraction',
- xy=xy, xycoords='data',
- arrowprops=dict(arrowstyle='->', connectionstyle='arc3'))
-
- axsc1 = fig.add_axes([Lx, Ly, dx, dy], polar=True)
- cs = axsc1.scatter(strikelists[sc], 90. - diplists[sc], marker='o',
- c=forcemagnitudes[sc],
- s=forcemagnitudes[sc]/f_n_maxs[sc]*5.,
- alpha=alphas[sc],
- edgecolors='none',
- vmin=f_n_maxs[sc]*lower_limit,
- vmax=f_n_maxs[sc]*upper_limit,
- cmap=matplotlib.cm.get_cmap('afmhot_r'))#,
- #norm=matplotlib.colors.LogNorm())
- # tick locations
- #thetaticks = numpy.arange(0,360,90)
- # set ticklabels location at 1.3 times the axes' radius
- #ax.set_thetagrids(thetaticks, frac=1.3)
- axsc1.set_xticklabels([])
- axsc1.set_yticklabels([])
-
- axsc1.set_title('\\textbf{1. Slow creep}', fontsize=7)
- if upper_limit < 1.0:
- cbar = plt.colorbar(cs, extend='max', fraction=0.035, pad=0.04)
- else:
- cbar = plt.colorbar(cs, fraction=0.045, pad=0.04)
- #cbar.set_label('$||\\boldsymbol{f}_n||$')
- cbar.set_label('$\\boldsymbol{f}_\\text{n}$ [N]')
- cbar.locator = matplotlib.ticker.MaxNLocator(nbins=4)
- cbar.update_ticks()
-
- # plot defined max compressive stress from tau/N ratio
- axsc1.scatter(0., numpy.degrees(numpy.arctan(taus[sc]/Ns[sc])),
- marker='+', c='none', edgecolor='red', s=100)
- axsc1.scatter(0., numpy.degrees(numpy.arctan(taus[sc]/Ns[sc])),
- marker='o', c='none', edgecolor='red', s=100)
- '''
- ax.sc1scatter(0., # actual stress
- numpy.degrees(numpy.arctan(
- self.shearStress('effective')/
- self.currentNormalStress('effective'))),
- marker='+', color='blue', s=300)
- '''
-
- axsc1.set_rmax(90)
- axsc1.set_rticks([])
- #axsc1.grid(False)
-
- # force chain plot
-
- axfc1 = fig.add_axes([Lx-0.007, Ly-0.7*dy, dx, dy*0.7])
-
- data = datalists[sc]
-
- # 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 = lower_limit * f_n_max
-
- # find the indexes of these contacts
- I = numpy.nonzero(data[:,6] >= f_n_lim)
-
- #color = matplotlib.cm.spectral(data[:,6]/f_n_max)
- 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]
- f_n = data[i,6]
-
- lw_max = 1.0
- if f_n >= f_n_max:
- lw = lw_max
- else:
- lw = (f_n - f_n_lim)/(f_n_max - f_n_lim)*lw_max
-
- #print lw
- axfc1.plot([x1,x2], [z1,z2], '-k', linewidth=lw)
- #axfc1.plot([x1,x2], [z1,z2], '-', linewidth=lw, color=forcemagnitudes…
- #axfc1.plot([x1,x2], [z1,z2], '-', linewidth=lw, color=color)
+ for sc in range(len(Lx)):
+ xy=(ts[sc]*scalingfactor, Ns[sc]/1000.)
+ #print xytext
+ #print xy
+ ax1.annotate('',
+ xytext=(xytext_x[sc], xytext_y[sc]), textcoords='axes fra…
+ xy=xy, xycoords='data',
+ arrowprops=dict(arrowstyle='->', connectionstyle='arc3'))
+
+ if scatter:
+ axsc1 = fig.add_axes([Lx[sc], Ly[sc], dx, dy], polar=True)
+ cs = axsc1.scatter(strikelists[sc], 90. - diplists[sc], marker='o',
+ c=forcemagnitudes[sc],
+ s=forcemagnitudes[sc]/f_n_maxs[sc]*5.,
+ alpha=alphas[sc],
+ edgecolors='none',
+ vmin=f_n_maxs[sc]*lower_limit,
+ vmax=f_n_maxs[sc]*upper_limit,
+ cmap=matplotlib.cm.get_cmap('afmhot_r'))#,
+ #norm=matplotlib.colors.LogNorm())
+ # tick locations
+ #thetaticks = numpy.arange(0,360,90)
+ # set ticklabels location at 1.3 times the axes' radius
+ #ax.set_thetagrids(thetaticks, frac=1.3)
+ axsc1.set_xticklabels([])
+ axsc1.set_yticklabels([])
+
+ if sc == 0:
+ title = '1. Slow creep'
+ elif sc == 1:
+ title = '2. Fast creep'
+ elif sc == 2:
+ title = '3. Slip'
+ else:
+ title = 'Unknown'
+ axsc1.set_title('\\textbf{' + title + '}', fontsize=7)
+ if upper_limit < 1.0:
+ cbar = plt.colorbar(cs, extend='max', fraction=0.035, pad=0.04)
+ else:
+ cbar = plt.colorbar(cs, fraction=0.045, pad=0.04)
+ #cbar.set_label('$||\\boldsymbol{f}_n||$')
+ cbar.set_label('$\\boldsymbol{f}_\\text{n}$ [N]')
+ cbar.locator = matplotlib.ticker.MaxNLocator(nbins=4)
+ cbar.update_ticks()
+
+ # plot defined max compressive stress from tau/N ratio
+ axsc1.scatter(0., numpy.degrees(numpy.arctan(taus[sc]/Ns[sc])),
+ marker='+', c='none', edgecolor='red', s=100)
+ axsc1.scatter(0., numpy.degrees(numpy.arctan(taus[sc]/Ns[sc])),
+ marker='o', c='none', edgecolor='red', s=100)
+ '''
+ ax.sc1scatter(0., # actual stress
+ numpy.degrees(numpy.arctan(
+ self.shearStress('effective')/
+ self.currentNormalStress('effective'))),
+ marker='+', color='blue', s=300)
+ '''
+
+ axsc1.set_rmax(90)
+ axsc1.set_rticks([])
+ #axsc1.grid(False)
- axfc1.spines['right'].set_visible(False)
- axfc1.spines['left'].set_visible(False)
- # Only show ticks on the left and bottom spines
- axfc1.xaxis.set_ticks_position('none')
- axfc1.yaxis.set_ticks_position('none')
- axfc1.set_xticklabels([])
- axfc1.set_yticklabels([])
- axfc1.set_xlim([numpy.min(data[I[0],0]), numpy.max(data[I[0],0])])
- axfc1.set_ylim([numpy.min(data[I[0],2]), numpy.max(data[I[0],2])])
- axfc1.set_aspect('equal')
-
-
-
- # Scatter plot 2
- sc=1
- Lx=.37; Ly=.7;
- #xytext=(Lx+.5*dx, Ly+.5*dy)
- #xytext=(Lx+.5*dx, Ly+.05)
- xytext=(Lx+.6*dx, Ly+.15)
- xy=(ts[sc]*scalingfactor, Ns[sc]/1000.)
- #print xytext
- #print xy
- ax1.annotate('',
- xytext=xytext, textcoords='axes fraction',
- xy=xy, xycoords='data',
- arrowprops=dict(arrowstyle='->', connectionstyle='arc3'))
-
- axsc2 = fig.add_axes([Lx, Ly, dx, dy], polar=True)
-
- cs = axsc2.scatter(strikelists[sc], 90. - diplists[sc], marker='o',
- c=forcemagnitudes[sc],
- s=forcemagnitudes[sc]/f_n_max*5.,
- alpha=alphas[sc],
- edgecolors='none',
- vmin=f_n_maxs[sc]*lower_limit,
- vmax=f_n_maxs[sc]*upper_limit,
- cmap=matplotlib.cm.get_cmap('afmhot_r'))#,
- #norm=matplotlib.colors.LogNorm())
- # tick locations
- #thetaticks = numpy.arange(0,360,90)
- # set ticklabels location at 1.3 times the axes' radius
- #ax.set_thetagrids(thetaticks, frac=1.3)
- axsc2.set_xticklabels([])
- axsc2.set_yticklabels([])
-
- axsc2.set_title('\\textbf{2. Fast creep}', fontsize=7)
- if upper_limit < 1.0:
- cbar = plt.colorbar(cs, extend='max', fraction=0.035, pad=0.04)
- else:
- cbar = plt.colorbar(cs, fraction=0.045, pad=0.04)
- cbar.set_label('$\\boldsymbol{f}_\\text{n}$ [N]')
- #cbar.set_label('Contact force [N]')
- cbar.locator = matplotlib.ticker.MaxNLocator(nbins=4)
- cbar.update_ticks()
-
- # plot defined max compressive stress from tau/N ratio
- axsc2.scatter(0., numpy.degrees(numpy.arctan(taus[sc]/Ns[sc])),
- marker='+', c='none', edgecolor='red', s=100)
- axsc2.scatter(0., numpy.degrees(numpy.arctan(taus[sc]/Ns[sc])),
- marker='o', c='none', edgecolor='red', s=100)
- '''
- ax.sc2scatter(0., # actual stress
- numpy.degrees(numpy.arctan(
- self.shearStress('effective')/
- self.currentNormalStress('effective'))),
- marker='+', color='blue', s=300)
- '''
-
- axsc2.set_rmax(90)
- axsc2.set_rticks([])
- #axsc2.grid(False)
-
- # force chain plot
-
- #axfc2 = fig.add_axes([Lx+dx+0.05, Ly+0.03, dx, dy*0.7])
- axfc2 = fig.add_axes([Lx+dx+0.08, Ly+0.035, dx, dy*0.7])
-
- data = datalists[sc]
-
- # 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 = lower_limit * f_n_max
-
- # find the indexes of these contacts
- I = numpy.nonzero(data[:,6] >= f_n_lim)
-
- #color = matplotlib.cm.spectral(data[:,6]/f_n_max)
- 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]
- f_n = data[i,6]
-
- lw_max = 1.0
- if f_n >= f_n_max:
- lw = lw_max
else:
- lw = (f_n - f_n_lim)/(f_n_max - f_n_lim)*lw_max
-
- #print lw
- axfc2.plot([x1,x2], [z1,z2], '-k', linewidth=lw)
- #axfc2.plot([x1,x2], [z1,z2], '-', linewidth=lw, color=forcemagnitudes…
- #axfc2.plot([x1,x2], [z1,z2], '-', linewidth=lw, color=color)
-
- axfc2.spines['right'].set_visible(False)
- axfc2.spines['left'].set_visible(False)
- # Only show ticks on the left and bottom spines
- axfc2.xaxis.set_ticks_position('none')
- axfc2.yaxis.set_ticks_position('none')
- axfc2.set_xticklabels([])
- axfc2.set_yticklabels([])
- axfc2.set_xlim([numpy.min(data[I[0],0]), numpy.max(data[I[0],0])])
- axfc2.set_ylim([numpy.min(data[I[0],2]), numpy.max(data[I[0],2])])
- axfc2.set_aspect('equal')
-
-
-
-
- # Scatter plot 3
- sc=2
- #Lx=.50; Ly=.40;
- Lx=.65; Ly=.40;
- #xytext=(Lx+.5*dx, Ly+.5*dy)
- #xytext=(Lx+1.75*dx, Ly+0.01)
- xytext=(Lx+1.15*dx, 0.2)
- xy=(ts[sc]*scalingfactor, Ns[sc]/1000.)
- #print xytext
- #print xy
- ax1.annotate('',
- xytext=xytext, textcoords='axes fraction',
- xy=xy, xycoords='data',
- arrowprops=dict(arrowstyle='->', connectionstyle='arc3'))
-
- axsc2 = fig.add_axes([Lx, Ly, dx, dy], polar=True)
-
- cs = axsc2.scatter(strikelists[sc], 90. - diplists[sc], marker='o',
- c=forcemagnitudes[sc],
- s=forcemagnitudes[sc]/f_n_max*5.,
- alpha=alphas[sc],
- edgecolors='none',
- vmin=f_n_maxs[sc]*lower_limit,
- vmax=f_n_maxs[sc]*upper_limit,
- cmap=matplotlib.cm.get_cmap('afmhot_r'))#,
- #norm=matplotlib.colors.LogNorm())
- # tick locations
- #thetaticks = numpy.arange(0,360,90)
- # set ticklabels location at 1.3 times the axes' radius
- #ax.set_thetagrids(thetaticks, frac=1.3)
- axsc2.set_xticklabels([])
- axsc2.set_yticklabels([])
-
- axsc2.set_title('\\textbf{3. Slip}', fontsize=7)
- if upper_limit < 1.0:
- cbar = plt.colorbar(cs, extend='max', fraction=0.035, pad=0.04)
- else:
- cbar = plt.colorbar(cs, fraction=0.045, pad=0.04)
- cbar.set_label('$\\boldsymbol{f}_\\text{n}$ [N]')
- #cbar.set_label('Contact force [N]')
- cbar.locator = matplotlib.ticker.MaxNLocator(nbins=4)
- cbar.update_ticks()
-
- # plot defined max compressive stress from tau/N ratio
- axsc2.scatter(0., numpy.degrees(numpy.arctan(taus[sc]/Ns[sc])),
- marker='+', c='none', edgecolor='red', s=100)
- axsc2.scatter(0., numpy.degrees(numpy.arctan(taus[sc]/Ns[sc])),
- marker='o', c='none', edgecolor='red', s=100)
- '''
- ax.sc2scatter(0., # actual stress
- numpy.degrees(numpy.arctan(
- self.shearStress('effective')/
- self.currentNormalStress('effective'))),
- marker='+', color='blue', s=300)
- '''
-
- axsc2.set_rmax(90)
- axsc2.set_rticks([])
- #axsc2.grid(False)
-
- # force chain plot
-
- axfc2 = fig.add_axes([Lx-0.007, Ly-0.7*dy, dx, dy*0.7])
- #axfc2 = fig.add_axes([Lx+dx+0.05, Ly+0.03, dx, dy*0.7])
-
- data = datalists[sc]
-
- # 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 = lower_limit * f_n_max
-
- # find the indexes of these contacts
- I = numpy.nonzero(data[:,6] >= f_n_lim)
-
- #color = matplotlib.cm.spectral(data[:,6]/f_n_max)
- 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]
- f_n = data[i,6]
-
- lw_max = 1.0
- if f_n >= f_n_max:
- lw = lw_max
- else:
- lw = (f_n - f_n_lim)/(f_n_max - f_n_lim)*lw_max
-
- #print lw
- axfc2.plot([x1,x2], [z1,z2], '-k', linewidth=lw)
- #axfc2.plot([x1,x2], [z1,z2], '-', linewidth=lw, color=forcemagnitudes…
- #axfc2.plot([x1,x2], [z1,z2], '-', linewidth=lw, color=color)
-
- axfc2.spines['right'].set_visible(False)
- axfc2.spines['left'].set_visible(False)
- # Only show ticks on the left and bottom spines
- axfc2.xaxis.set_ticks_position('none')
- axfc2.yaxis.set_ticks_position('none')
- axfc2.set_xticklabels([])
- axfc2.set_yticklabels([])
- axfc2.set_xlim([numpy.min(data[:,0]), numpy.max(data[:,0])])
- axfc2.set_ylim([numpy.min(data[:,2]), numpy.max(data[:,2])])
- axfc2.set_aspect('equal')
-
-
-
-
+ axhistload1 = fig.add_axes([Lx[sc], Ly[sc], dx, dy])
+ axhistload1.hist(datalists[sc][:,6], alpha=0.75, facecolor='gray',…
+ #plt.yscale('log', nonposy='clip')
+ axhistload1.set_xlim([0,50.])
+ axhistload1.set_xlabel('Contact load [N]')
+ axhistload1.set_ylabel('Count')
+
+ # force chain plot
+
+ axfc1 = fig.add_axes([fc_x[sc], fc_y[sc], fc_dx[sc], fc_dy[sc]])
+
+ data = datalists[sc]
+
+ # 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 = lower_limit * f_n_max
+
+ # find the indexes of these contacts
+ I = numpy.nonzero(data[:,6] >= f_n_lim)
+
+ #color = matplotlib.cm.spectral(data[:,6]/f_n_max)
+ 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]
+ f_n = data[i,6]
+
+ lw_max = 1.0
+ if f_n >= f_n_max:
+ lw = lw_max
+ else:
+ lw = (f_n - f_n_lim)/(f_n_max - f_n_lim)*lw_max
+
+ #print lw
+ axfc1.plot([x1,x2], [z1,z2], '-k', linewidth=lw)
+ #axfc1.plot([x1,x2], [z1,z2], '-', linewidth=lw, color=forcemagnit…
+ #axfc1.plot([x1,x2], [z1,z2], '-', linewidth=lw, color=color)
+
+ axfc1.spines['right'].set_visible(False)
+ axfc1.spines['left'].set_visible(False)
+ # Only show ticks on the left and bottom spines
+ axfc1.xaxis.set_ticks_position('none')
+ axfc1.yaxis.set_ticks_position('none')
+ axfc1.set_xticklabels([])
+ axfc1.set_yticklabels([])
+ axfc1.set_xlim([numpy.min(data[I[0],0]), numpy.max(data[I[0],0])])
+ axfc1.set_ylim([numpy.min(data[I[0],2]), numpy.max(data[I[0],2])])
+ axfc1.set_aspect('equal')
diff --git a/python/sphere.py b/python/sphere.py
t@@ -5372,6 +5372,7 @@ class sim:
#hist, bins = numpy.histogram(datadata[:,6], bins=10)
n, bins, patches = plt.hist(data[:,6], alpha=0.75, facecolor='gray…
#plt.xlabel('$\\boldsymbol{f}_\text{n}$ [N]')
+ plt.yscale('log', nonposy='clip')
plt.xlabel('Contact load [N]')
plt.ylabel('Count $N$')
plt.grid(True)
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.