Introduction
Introduction Statistics Contact Development Disclaimer Help
timprove internals plot - sphere - GPU-based 3D discrete element method algorit…
git clone git://src.adamsgaard.dk/sphere
Log
Files
Refs
LICENSE
---
commit fd4eb344b8af1b8de25c5a2c587c01f94fd9adb4
parent 9d9e5ba4f59c0dbafc66116261bd5766e48f380f
Author: Anders Damsgaard <[email protected]>
Date: Thu, 16 Apr 2015 11:48:55 +0200
improve internals plot
Diffstat:
M python/halfshear-darcy-internals.py | 373 +++++++++++++++++------------…
M python/sphere.py | 9 +++++++--
2 files changed, 207 insertions(+), 175 deletions(-)
---
diff --git a/python/halfshear-darcy-internals.py b/python/halfshear-darcy-inter…
t@@ -13,213 +13,240 @@ from permeabilitycalculator import *
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
+import seaborn as sns
+#sns.set(style='ticks', palette='Set2')
+#sns.set(style='ticks', palette='colorblind')
+#sns.set(style='ticks', palette='Set2')
+sns.set(style='ticks', palette='Blues')
+
#sigma0 = float(sys.argv[1])
sigma0 = 20000.0
#k_c = 3.5e-13
-k_c = float(sys.argv[1])
-
-if k_c == 3.5e-15:
- steps = [1232, 1332, 1433, 1534, 1635]
-elif k_c == 3.5e-13:
- steps = [100, 200, 300, 410, 515]
-else:
- steps = [10, 50, 100, 1000, 1999]
+#k_c = float(sys.argv[1])
+k_c_list = [3.5e-13, 3.5e-14, 3.5e-15]
+
+#if k_c == 3.5e-15:
+# steps = [1232, 1332, 1433, 1534, 1635]
+#elif k_c == 3.5e-13:
+# steps = [100, 200, 300, 410, 515]
+#else:
+# steps = [10, 50, 100, 1000, 1999]
nsteps_avg = 1 # no. of steps to average over
#nsteps_avg = 100 # no. of steps to average over
+steps = [1, 50, 100, 150, 200]
-sid = 'halfshear-darcy-sigma0=' + str(sigma0) + '-k_c=' + str(k_c) + \
- '-mu=1.797e-06-velfac=1.0-shear'
-sim = sphere.sim(sid, fluid=True)
-sim.readfirst(verbose=False)
+for k_c in k_c_list:
-# particle z positions
-zpos_p = numpy.zeros((len(steps), sim.np))
+ sid = 'halfshear-darcy-sigma0=' + str(sigma0) + '-k_c=' + str(k_c) + \
+ '-mu=1.797e-06-velfac=1.0-shear'
+ sim = sphere.sim(sid, fluid=True)
+ sim.readfirst(verbose=False)
-# 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 z positions
+ zpos_p = numpy.zeros((len(steps), sim.np))
-# particle x displacements
-xdisp = 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 z velocity
-v_z_p = numpy.zeros((len(steps), sim.np))
+ # particle x displacements
+ xdisp = numpy.zeros((len(steps), sim.np))
-# fluid permeability
-k = numpy.zeros((len(steps), sim.num[0], sim.num[1], sim.num[2]))
-k_bar = numpy.zeros((len(steps), sim.num[2]))
+ # particle z velocity
+ v_z_p = numpy.zeros((len(steps), sim.np))
-# pressure
-p = numpy.zeros((len(steps), sim.num[2]))
+ # fluid permeability
+ k = numpy.zeros((len(steps), sim.num[0], sim.num[1], sim.num[2]))
+ k_bar = numpy.zeros((len(steps), sim.num[2]))
-# mean per-particle values
-v_z_p_bar = numpy.zeros((len(steps), sim.num[2]))
-v_z_f_bar = numpy.zeros((len(steps), sim.num[2]))
+ # pressure
+ p = numpy.zeros((len(steps), sim.num[2]))
-# particle-fluid force per particle
-f_pf = numpy.zeros_like(xdisp)
+ # mean per-particle values
+ v_z_p_bar = numpy.zeros((len(steps), sim.num[2]))
+ v_z_f_bar = numpy.zeros((len(steps), sim.num[2]))
-# pressure - hydrostatic pressure
-#dev_p = numpy.zeros((len(steps), sim.num[2]))
+ # particle-fluid force per particle
+ f_pf = numpy.zeros_like(xdisp)
-# mean porosity
-phi_bar = numpy.zeros((len(steps), sim.num[2]))
+ # pressure - hydrostatic pressure
+ #dev_p = numpy.zeros((len(steps), sim.num[2]))
-# mean porosity change
-dphi_bar = numpy.zeros((len(steps), sim.num[2]))
+ # mean porosity
+ phi_bar = numpy.zeros((len(steps), sim.num[2]))
-# mean per-particle values
-xdisp_mean = numpy.zeros((len(steps), sim.num[2]))
-f_pf_mean = numpy.zeros((len(steps), sim.num[2]))
+ # mean porosity change
+ dphi_bar = numpy.zeros((len(steps), sim.num[2]))
-shear_strain_start = numpy.zeros(len(steps))
-shear_strain_end = numpy.zeros(len(steps))
+ # mean per-particle values
+ xdisp_mean = numpy.zeros((len(steps), sim.num[2]))
+ f_pf_mean = numpy.zeros((len(steps), sim.num[2]))
-#fig = plt.figure(figsize=(8,4*(len(steps))+1))
-fig = plt.figure(figsize=(8,4.5))
-ax = []
-n = 4
-ax.append(plt.subplot(1, n, 1)) # 0: xdisp
-ax.append(plt.subplot(1, n, 2, sharey=ax[0])) # 3: k
-ax.append(plt.subplot(1, n, 3, sharey=ax[0])) # 5: p_f
-ax.append(plt.subplot(1, n, 4, sharey=ax[0])) # 6: f_pf_z
+ shear_strain_start = numpy.zeros(len(steps))
+ shear_strain_end = numpy.zeros(len(steps))
-s = 0
-for step_str in steps:
+ #fig = plt.figure(figsize=(8,4*(len(steps))+1))
+ #fig = plt.figure(figsize=(8,4.5))
+ fig = plt.figure(figsize=(3.74*2,4.5))
+ ax = []
+ n = 4
+ ax.append(plt.subplot(1, n, 1)) # 0: xdisp
+ ax.append(plt.subplot(1, n, 2, sharey=ax[0])) # 3: k
+ ax.append(plt.subplot(1, n, 3, sharey=ax[0])) # 5: p_f
+ ax.append(plt.subplot(1, n, 4, sharey=ax[0])) # 6: f_pf_z
- step = int(step_str)
+ s = 0
+ for step_str in steps:
- if os.path.isfile('../output/' + sid + '.status.dat'):
+ step = int(step_str)
- for substep in numpy.arange(nsteps_avg):
+ if os.path.isfile('../output/' + sid + '.status.dat'):
- if step + substep > sim.status():
- raise Exception(
- 'Simulation step %d not available (sim.status = %d).'
- % (step + substep, sim.status()))
+ for substep in numpy.arange(nsteps_avg):
- sim.readstep(step + substep, verbose=False)
+ if step + substep > sim.status():
+ raise Exception(
+ 'Simulation step %d not available (sim.status = %d…
+ % (step + substep, sim.status()))
- zpos_p[s,:] += sim.x[:,2]/nsteps_avg
+ sim.readstep(step + substep, verbose=False)
- xdisp[s,:] += sim.xyzsum[:,0]/nsteps_avg
+ zpos_p[s,:] += sim.x[:,2]/nsteps_avg
- '''
- for i in numpy.arange(sim.np):
- f_pf[s,i] += \
- sim.f_sum[i].dot(sim.f_sum[i])/nsteps_avg
- '''
- f_pf[s,:] += sim.f_p[:,2]
+ xdisp[s,:] += sim.xyzsum[:,0]/nsteps_avg
- dz = sim.L[2]/sim.num[2]
- wall0_iz = int(sim.w_x[0]/dz)
+ '''
+ for i in numpy.arange(sim.np):
+ f_pf[s,i] += \
+ sim.f_sum[i].dot(sim.f_sum[i])/nsteps_avg
+ '''
+ f_pf[s,:] += sim.f_p[:,2]
- p[s,:] += numpy.average(numpy.average(sim.p_f[:,:,:], axis=0),\
- axis=0)/nsteps_avg
+ dz = sim.L[2]/sim.num[2]
+ wall0_iz = int(sim.w_x[0]/dz)
- sim.findPermeabilities()
- k[s,:] += sim.k[:,:,:]/nsteps_avg
+ p[s,:] += numpy.average(numpy.average(sim.p_f[:,:,:], axis=0),\
+ axis=0)/nsteps_avg
- k_bar[s,:] += \
- numpy.average(numpy.average(sim.k[:,:,:], axis=0), axis=0)\
- /nsteps_avg
+ sim.findPermeabilities()
+ k[s,:] += sim.k[:,:,:]/nsteps_avg
- if substep == 0:
- shear_strain_start[s] = sim.shearStrain()
- else:
- shear_strain_end[s] = sim.shearStrain()
-
- # calculate mean values of xdisp and f_pf
- for iz in numpy.arange(sim.num[2]):
- z_bot = iz*dz
- z_top = (iz+1)*dz
- I = numpy.nonzero((zpos_p[s,:] >= z_bot) & (zpos_p[s,:] < z_top))
- if len(I) > 0:
- xdisp_mean[s,iz] = numpy.mean(xdisp[s,I])
- f_pf_mean[s,iz] = numpy.mean(f_pf[s,I])
+ k_bar[s,:] += \
+ numpy.average(numpy.average(sim.k[:,:,:], axis=0), axi…
+ /nsteps_avg
- #ax[0].plot(xdisp[s], zpos_p[s], ',', color = '#888888')
- ax[0].plot(xdisp_mean[s], zpos_c[s], label='$\gamma$ = %.2f' %
- (shear_strain_start[s]))
+ if substep == 0:
+ shear_strain_start[s] = sim.shearStrain()
+ else:
+ shear_strain_end[s] = sim.shearStrain()
+
+ # calculate mean values of xdisp and f_pf
+ for iz in numpy.arange(sim.num[2]):
+ z_bot = iz*dz
+ z_top = (iz+1)*dz
+ I = numpy.nonzero((zpos_p[s,:] >= z_bot) & (zpos_p[s,:] < z_to…
+ if len(I) > 0:
+ xdisp_mean[s,iz] = numpy.mean(xdisp[s,I])
+ f_pf_mean[s,iz] = numpy.mean(f_pf[s,I])
- ax[1].semilogx(k_bar[s], zpos_c[s], label='$\gamma$ = %.2f' %
- (shear_strain_start[s]))
-
- ax[2].plot(p[s]/1000.0, zpos_c[s], label='$\gamma$ = %.2f' %
- (shear_strain_start[s]))
-
- # remove particles with 0.0 pressure force
- I = numpy.nonzero(numpy.abs(f_pf[s]) > .01)
- f_pf_nonzero = f_pf[s][I]
- zpos_p_nonzero = zpos_p[s][I]
- I = numpy.nonzero(numpy.abs(f_pf_mean[s]) > .01)
- f_pf_mean_nonzero = f_pf_mean[s][I]
- zpos_c_nonzero = zpos_c[s][I]
-
- #ax[3].plot(f_pf_nonzero, zpos_p_nonzero, ',', alpha=0.5,
- #color='#888888')
- ax[3].plot(f_pf_mean_nonzero, zpos_c_nonzero, label='$\gamma$ = %.2f' %
- (shear_strain_start[s]))
-
- else:
- print(sid + ' not found')
- s += 1
-
-
-
-max_z = numpy.max(zpos_p)
-ax[0].set_ylim([0, max_z])
-ax[0].set_xlim([0, 0.5])
-
-if k_c == 3.5e-15:
- #ax[1].set_xlim([1e-14, 1e-12])
- ax[1].set_xlim([1e-16, 1e-14])
-elif k_c == 3.5e-13:
- #ax[1].set_xlim([1e-12, 1e-10])
- ax[1].set_xlim([1e-14, 1e-12])
-
-ax[0].set_ylabel('Vertical position $z$ [m]')
-ax[0].set_xlabel('$\\bar{\\boldsymbol{x}}^x_\\text{p}$ [m]')
-ax[1].set_xlabel('$\\bar{k}$ [m$^{2}$]')
-ax[2].set_xlabel('$\\bar{p_\\text{f}}$ [kPa]')
-ax[3].set_xlabel('$\\boldsymbol{f}^z_\\text{i}$ [N]')
-
-# align x labels
-labely = -0.3
-ax[0].xaxis.set_label_coords(0.5, labely)
-ax[1].xaxis.set_label_coords(0.5, labely)
-ax[2].xaxis.set_label_coords(0.5, labely)
-ax[3].xaxis.set_label_coords(0.5, labely)
-
-plt.setp(ax[1].get_yticklabels(), visible=False)
-plt.setp(ax[2].get_yticklabels(), visible=False)
-plt.setp(ax[3].get_yticklabels(), visible=False)
-
-plt.setp(ax[0].xaxis.get_majorticklabels(), rotation=90)
-plt.setp(ax[1].xaxis.get_majorticklabels(), rotation=90)
-plt.setp(ax[2].xaxis.get_majorticklabels(), rotation=90)
-plt.setp(ax[3].xaxis.get_majorticklabels(), rotation=90)
-
-ax[0].grid()
-ax[1].grid()
-ax[2].grid()
-ax[3].grid()
-
-legend_alpha=0.5
-ax[0].legend(loc='lower center', prop={'size':12}, fancybox=True,
- framealpha=legend_alpha)
-
-#plt.subplots_adjust(wspace = .05) # doesn't work with tight_layout()
-plt.tight_layout()
-#plt.MaxNLocator(nbins=1) # doesn't work?
-ax[0].locator_params(nbins=3)
-ax[2].locator_params(nbins=3)
-ax[3].locator_params(nbins=3)
-
-filename = 'halfshear-darcy-internals-k_c=%.0e.pdf' % (k_c)
-plt.savefig(filename)
-shutil.copyfile(filename, '/home/adc/articles/own/2/graphics/' + filename)
-print(filename)
+ k_bar[s][0] = k_bar[s][1]
+
+
+
+ #ax[0].plot(xdisp[s], zpos_p[s], ',', color = '#888888')
+ ax[0].plot(xdisp_mean[s], zpos_c[s], label='$\gamma$ = %.2f' %
+ (shear_strain_start[s]))
+
+ ax[1].semilogx(k_bar[s], zpos_c[s], label='$\gamma$ = %.2f' %
+ (shear_strain_start[s]))
+
+ ax[2].plot(p[s]/1000.0, zpos_c[s], label='$\gamma$ = %.2f' %
+ (shear_strain_start[s]))
+
+ # remove particles with 0.0 pressure force
+ I = numpy.nonzero(numpy.abs(f_pf[s]) > .01)
+ f_pf_nonzero = f_pf[s][I]
+ zpos_p_nonzero = zpos_p[s][I]
+ I = numpy.nonzero(numpy.abs(f_pf_mean[s]) > .01)
+ f_pf_mean_nonzero = f_pf_mean[s][I]
+ zpos_c_nonzero = zpos_c[s][I]
+
+ #ax[3].plot(f_pf_nonzero, zpos_p_nonzero, ',', alpha=0.5,
+ #color='#888888')
+ ax[3].plot(f_pf_mean_nonzero, zpos_c_nonzero, label='$\gamma$ = %.…
+ (shear_strain_start[s]))
+
+ else:
+ print(sid + ' not found')
+ s += 1
+
+
+ max_z = numpy.max(zpos_p)
+ ax[0].set_ylim([0, max_z])
+ #ax[0].set_xlim([0, 0.5])
+ ax[0].set_xlim([0, 0.05])
+
+ if k_c == 3.5e-15:
+ #ax[1].set_xlim([1e-14, 1e-12])
+ ax[1].set_xlim([1e-16, 1e-14])
+ elif k_c == 3.5e-14:
+ ax[1].set_xlim([1e-15, 1e-13])
+ elif k_c == 3.5e-13:
+ #ax[1].set_xlim([1e-12, 1e-10])
+ ax[1].set_xlim([1e-14, 1e-12])
+
+ ax[0].set_ylabel('Vertical position $z$ [m]')
+ ax[0].set_xlabel('$\\bar{\\boldsymbol{x}}^x_\\text{p}$ [m]')
+ ax[1].set_xlabel('$\\bar{k}$ [m$^{2}$]')
+ ax[2].set_xlabel('$\\bar{p_\\text{f}}$ [kPa]')
+ ax[3].set_xlabel('$\\boldsymbol{f}^z_\\text{i}$ [N]')
+
+ # align x labels
+ labely = -0.3
+ ax[0].xaxis.set_label_coords(0.5, labely)
+ ax[1].xaxis.set_label_coords(0.5, labely)
+ ax[2].xaxis.set_label_coords(0.5, labely)
+ ax[3].xaxis.set_label_coords(0.5, labely)
+
+ plt.setp(ax[1].get_yticklabels(), visible=False)
+ plt.setp(ax[2].get_yticklabels(), visible=False)
+ plt.setp(ax[3].get_yticklabels(), visible=False)
+
+ plt.setp(ax[0].xaxis.get_majorticklabels(), rotation=90)
+ plt.setp(ax[1].xaxis.get_majorticklabels(), rotation=90)
+ plt.setp(ax[2].xaxis.get_majorticklabels(), rotation=90)
+ plt.setp(ax[3].xaxis.get_majorticklabels(), rotation=90)
+
+ '''
+ ax[0].grid()
+ ax[1].grid()
+ ax[2].grid()
+ ax[3].grid()
+ '''
+
+ for i in range(4):
+ # vertical grid lines
+ ax[i].get_xaxis().grid(True, linestyle=':', linewidth=0.5)
+ # horizontal grid lines
+ ax[i].get_yaxis().grid(True, linestyle=':', linewidth=0.5)
+
+ legend_alpha=0.5
+ ax[0].legend(loc='lower center', prop={'size':12}, fancybox=True,
+ framealpha=legend_alpha)
+
+ #plt.subplots_adjust(wspace = .05) # doesn't work with tight_layout()
+ plt.tight_layout()
+ #plt.MaxNLocator(nbins=1) # doesn't work?
+ ax[0].locator_params(nbins=5)
+ ax[2].locator_params(nbins=5)
+ ax[3].locator_params(nbins=5)
+
+ sns.despine() # remove chartjunk
+
+ filename = 'halfshear-darcy-internals-k_c=%.0e.pdf' % (k_c)
+ plt.savefig(filename)
+ shutil.copyfile(filename, '/home/adc/articles/own/2/graphics/' + filename)
+ print(filename)
diff --git a/python/sphere.py b/python/sphere.py
t@@ -6785,7 +6785,8 @@ class sim:
i_max = sb.status()
# use largest difference in p from 0 as +/- limit on colormap
#print i_min, i_max
- p_ext = numpy.max(numpy.abs(pres))
+ #p_ext = numpy.max(numpy.abs(pres))
+ p_ext = numpy.max(numpy.abs(pres[0:9,:])) # for article2
if sb.wmode[0] == 3:
x = t
t@@ -6803,7 +6804,8 @@ class sim:
else:
im1 = ax.pcolormesh(
x, zpos_c, pres,
- cmap=matplotlib.cm.get_cmap('bwr'),
+ #cmap=matplotlib.cm.get_cmap('bwr'),
+ cmap=matplotlib.cm.get_cmap('RdBu_r'),
#cmap=matplotlib.cm.get_cmap('coolwarm'),
vmin=-p_ext, vmax=p_ext,
rasterized=True)
t@@ -6824,6 +6826,9 @@ class sim:
if xlim:
ax.set_xlim([x[0], x[-1]])
+ # for article2
+ ax.set_ylim([zpos_c[0], zpos_c[9]])
+
cb = plt.colorbar(im1)
cb.set_label('$p_\\text{f}$ [kPa]')
cb.solids.set_rasterized(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.