| timprove plots, remove stray tabs - sphere - GPU-based 3D discrete element meth… | |
| git clone git://src.adamsgaard.dk/sphere | |
| Log | |
| Files | |
| Refs | |
| LICENSE | |
| --- | |
| commit b87092360b0bc18e75a6850737beb40dc60373f1 | |
| parent 57d5ce5829d8daebbb03d7ce6e164b36fec3ff88 | |
| Author: Anders Damsgaard <[email protected]> | |
| Date: Mon, 20 Oct 2014 13:29:11 +0200 | |
| improve plots, remove stray tabs | |
| Diffstat: | |
| M python/shear-results-internals.py | 58 ++++++++++++++++++-----------… | |
| M python/shear-results.py | 13 ++++++++----- | |
| M src/device.cu | 14 +++++++------- | |
| 3 files changed, 48 insertions(+), 37 deletions(-) | |
| --- | |
| diff --git a/python/shear-results-internals.py b/python/shear-results-internals… | |
| t@@ -16,8 +16,8 @@ from matplotlib.ticker import MaxNLocator | |
| #steps = [5, 10, 100] | |
| #steps = [5, 10] | |
| steps = sys.argv[3:] | |
| -nsteps_avg = 5 # no. of steps to average over | |
| -#nsteps_avg = 100 # no. of steps to average over | |
| +#nsteps_avg = 5 # no. of steps to average over | |
| +nsteps_avg = 100 # no. of steps to average over | |
| sigma0 = float(sys.argv[1]) | |
| #c_grad_p = 1.0 | |
| t@@ -72,7 +72,8 @@ dphi_bar = numpy.zeros((len(steps), sim.num[2])) | |
| xdisp_mean = numpy.zeros((len(steps), sim.num[2])) | |
| f_pf_mean = numpy.zeros((len(steps), sim.num[2])) | |
| -shear_strain = numpy.zeros(len(steps)) | |
| +shear_strain_start = numpy.zeros(len(steps)) | |
| +shear_strain_end = numpy.zeros(len(steps)) | |
| s = 0 | |
| for step_str in steps: | |
| t@@ -130,7 +131,10 @@ for step_str in steps: | |
| /nsteps_avg/sim.time_dt | |
| - shear_strain[s] += sim.shearStrain()/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]): | |
| t@@ -151,6 +155,7 @@ for step_str in steps: | |
| fig = plt.figure(figsize=(16,5*(len(steps))+1)) | |
| def color(c): | |
| + return 'black' | |
| if c == 1.0: | |
| return 'green' | |
| elif c == 0.1: | |
| t@@ -166,11 +171,11 @@ for s in numpy.arange(len(steps)): | |
| #strain_str = 'Shear strain\n $\\gamma = %.3f$' % (shear_strain[s]) | |
| if s == 0: | |
| - strain_str = 'Dilating state\n $\\gamma = %.2f$, $c = %.2f$' % \ | |
| - (shear_strain[s], c_grad_p) | |
| + strain_str = 'Dilating state\n$\\gamma = %.2f$ to $%.2f$\n$c = %.2f$' … | |
| + (shear_strain_start[s], shear_strain_end[s], c_grad_p) | |
| else: | |
| - strain_str = 'Steady state\n $\\gamma = %.2f$, $c = %.2f$' % \ | |
| - (shear_strain[s], c_grad_p) | |
| + strain_str = 'Steady state\n$\\gamma = %.2f$ to $%.2f$\n$c = %.2f$' % \ | |
| + (shear_strain_start[s], shear_strain_end[s], c_grad_p) | |
| n = 7 | |
| if s == 0: | |
| t@@ -195,7 +200,7 @@ for s in numpy.arange(len(steps)): | |
| ax.append(plt.subplot(len(steps), n-1, s*(n-1)+6, sharey=ax[s*n+0], | |
| sharex=ax[6])) # 6: v_z^f | |
| - #ax[s*n+0].plot(xdisp[s], zpos_p[s], ',', color = '#888888') | |
| + ax[s*n+0].plot(xdisp[s], zpos_p[s], ',', color = '#888888') | |
| ax[s*n+0].plot(xdisp_mean[s], zpos_c[s], color=color(c_grad_p)) | |
| #ax[s*4+2].plot(dev_p[s]/1000.0, zpos_c[s], 'k') | |
| t@@ -211,20 +216,21 @@ for s in numpy.arange(len(steps)): | |
| #ax[s*4+3].plot(dphi_bar[s,1:], zpos_c[s,1:], '-w', linewidth=2) | |
| ax[s*n+3].plot(v_z_p[s]*100.0, zpos_p[s], ',', alpha=0.5, | |
| - color=color(c_grad_p)) | |
| + color='#888888') | |
| + #color=color(c_grad_p)) | |
| ax[s*n+3].plot(v_z_p_bar[s]*100.0, zpos_c[s], color=color(c_grad_p)) | |
| #ax[s*n+0].plot([0.0,0.0], [0.0, sim.L[2]], '--', color='k') | |
| # hydrostatic pressure distribution | |
| - ax[s*n+4].plot(dev_p[s]/1000.0, zpos_c[s], color=color(c_grad_p)) | |
| - #ax[s*n+4].plot(p[s]/1000.0, zpos_c[s], color=color(c_grad_p)) | |
| - #dz = sim.L[2]/sim.num[2] | |
| - #wall0_iz = int(sim.w_x[0]/dz) | |
| - #y_top = wall0_iz*dz + 0.5*dz | |
| - #x_top = sim.p_f[0,0,-1] | |
| - #y_bot = 0.0 | |
| - #x_bot = x_top + (wall0_iz*dz - zpos_c[s][0] + 0.5*dz)*sim.rho_f*numpy.abs… | |
| - #ax[s*n+4].plot([x_top/1000.0, x_bot/1000.0], [y_top, y_bot], '--', color=… | |
| + #ax[s*n+4].plot(dev_p[s]/1000.0, zpos_c[s], color=color(c_grad_p)) | |
| + ax[s*n+4].plot(p[s]/1000.0, zpos_c[s], color=color(c_grad_p)) | |
| + dz = sim.L[2]/sim.num[2] | |
| + wall0_iz = int(sim.w_x[0]/dz) | |
| + y_top = wall0_iz*dz + 0.5*dz | |
| + x_top = sim.p_f[0,0,-1] | |
| + y_bot = 0.0 | |
| + x_bot = x_top + (wall0_iz*dz - zpos_c[s][0] + 0.5*dz)*sim.rho_f*numpy.abs(… | |
| + ax[s*n+4].plot([x_top/1000.0, x_bot/1000.0], [y_top, y_bot], '--', color='… | |
| #ax[s*n+1].set_title(strain_str) | |
| #ax[s*n+1].set_title(' ') | |
| t@@ -237,7 +243,8 @@ for s in numpy.arange(len(steps)): | |
| zpos_c_nonzero = zpos_c[s][I] | |
| ax[s*n+5].plot(f_pf_nonzero, zpos_p_nonzero, ',', alpha=0.5, | |
| - color=color(c_grad_p)) | |
| + color='#888888') | |
| + #color=color(c_grad_p)) | |
| #ax[s*4+1].plot(f_pf_mean[s][1:-2], zpos_c[s][1:-2], color = 'k') | |
| ax[s*n+5].plot(f_pf_mean_nonzero, zpos_c_nonzero, color=color(c_grad_p)) | |
| #ax[s*4+1].plot([0.0, 0.0], [0.0, sim.L[2]], '--', color='k') | |
| t@@ -276,9 +283,10 @@ for s in numpy.arange(len(steps)): | |
| #ax[s*4+1].set_xlim([0.15, 0.46]) # f_pf | |
| #ax[s*n+1].set_xlim([0.235, 0.409]) # f_pf | |
| - ax[s*n+1].set_xlim([0.33, 0.6]) # phi | |
| + ax[s*n+1].set_xlim([0.33, 0.6]) # phi | |
| ax[s*n+2].set_xlim([-0.09, 0.035]) # dphi/dt | |
| - ax[s*n+3].set_xlim([-1.50, 1.50]) # v_z_p | |
| + ax[s*n+3].set_xlim([-1.50, 1.50]) # v_z_p | |
| + ax[s*n+5].set_xlim([5.0, 8.0]) # f_z_pf | |
| #plt.plot(dpdz[c], K[c], 'o-', label='$c$ = %.2f' % (cvals[c])) | |
| t@@ -291,8 +299,8 @@ for s in numpy.arange(len(steps)): | |
| ax[s*n+1].set_xlabel('$\\bar{\\phi}$ [-] (solid)') | |
| ax[s*n+2].set_xlabel('$\\delta \\bar{\\phi}/\\delta t$ [-] (dashed)') | |
| ax[s*n+3].set_xlabel('$\\boldsymbol{v}^z_\\text{p}$ [cms$^{-1}$]') | |
| - #ax[s*n+4].set_xlabel('$\\bar{p_\\text{f}}$ [kPa]') | |
| - ax[s*n+4].set_xlabel('$\\bar{p_\\text{f}} - p_\\text{hyd}$ [kPa]') | |
| + ax[s*n+4].set_xlabel('$\\bar{p_\\text{f}}$ [kPa]') | |
| + #ax[s*n+4].set_xlabel('$\\bar{p_\\text{f}} - p_\\text{hyd}$ [kPa]') | |
| ax[s*n+5].set_xlabel('$\\boldsymbol{f}^z_\\text{pf}$ [N]') | |
| ax[s*n+6].set_xlabel('$\\bar{\\boldsymbol{v}}^z_\\text{f}$ [cms$^{-1}$]') | |
| t@@ -364,7 +372,7 @@ for s in numpy.arange(len(steps)): | |
| #fig.text(0.1, y, strain_str, horizontalalignment='left', fontsize=22) | |
| #ax[s*4+0].annotate(strain_str, xytext=(0,1.1), textcoords='figure fractio… | |
| #horizontalalignment='left', fontsize=22) | |
| - plt.text(-0.38, 1.15, strain_str, horizontalalignment='left', fontsize=22, | |
| + plt.text(-0.38, 1.10, strain_str, horizontalalignment='left', fontsize=22, | |
| transform=ax[s*n+0].transAxes) | |
| #plt.title(' ') | |
| diff --git a/python/shear-results.py b/python/shear-results.py | |
| t@@ -165,7 +165,6 @@ for c in numpy.arange(1,len(cvals)+1): | |
| p_max[c] = numpy.zeros_like(shear_strain[c]) | |
| f_n_mean[c] = numpy.zeros_like(shear_strain[c]) | |
| f_n_max[c] = numpy.zeros_like(shear_strain[c]) | |
| - v_f_z_mean[c] = numpy.zeros_like(shear_strain[c]) | |
| for i in numpy.arange(sim.status()): | |
| if pressures: | |
| sim.readstep(i, verbose=False) | |
| t@@ -179,7 +178,9 @@ for c in numpy.arange(1,len(cvals)+1): | |
| f_n_mean[c][i] = numpy.mean(sim.f_n_magn) | |
| f_n_max[c][i] = numpy.max(sim.f_n_magn) | |
| - if zflow: | |
| + if zflow: | |
| + v_f_z_mean[c] = numpy.zeros_like(shear_strain[c]) | |
| + for i in numpy.arange(sim.status()): | |
| v_f_z_mean[c][i] = numpy.mean(sim.v_f[:,:,:,2]) | |
| else: | |
| t@@ -270,7 +271,8 @@ plt.setp(ax1.get_xticklabels(), visible=False) | |
| ax1.grid() | |
| ax2.grid() | |
| -#ax3.grid() | |
| +if zflow: | |
| + ax3.grid() | |
| #ax4.grid() | |
| legend_alpha=0.5 | |
| t@@ -278,8 +280,9 @@ ax1.legend(loc='lower right', prop={'size':18}, fancybox=T… | |
| framealpha=legend_alpha) | |
| ax2.legend(loc='lower right', prop={'size':18}, fancybox=True, | |
| framealpha=legend_alpha) | |
| -#ax3.legend(loc='lower right', prop={'size':18}, fancybox=True, | |
| - #framealpha=legend_alpha) | |
| +if zflow: | |
| + ax3.legend(loc='lower right', prop={'size':18}, fancybox=True, | |
| + framealpha=legend_alpha) | |
| #ax4.legend(loc='best', prop={'size':18}, fancybox=True, | |
| #framealpha=legend_alpha) | |
| diff --git a/src/device.cu b/src/device.cu | |
| t@@ -6,8 +6,8 @@ | |
| #include <cuda.h> | |
| #include <helper_math.h> | |
| -#include "vector_arithmetic.h" // for arbitrary prec. vectors | |
| -//#include <vector_functions.h> // for single prec. vectors | |
| +#include "vector_arithmetic.h" // for arbitrary prec. vectors | |
| +//#include <vector_functions.h> // for single prec. vectors | |
| #include "thrust/device_ptr.h" | |
| #include "thrust/sort.h" | |
| t@@ -17,7 +17,7 @@ | |
| #include "constants.cuh" | |
| #include "debug.h" | |
| -#include "sorting.cuh" | |
| +#include "sorting.cuh" | |
| #include "contactmodels.cuh" | |
| #include "cohesion.cuh" | |
| #include "contactsearch.cuh" | |
| t@@ -223,7 +223,7 @@ __host__ void DEM::checkConstantMemory() | |
| // Compare values between global and constant memory | |
| // structures on the device. | |
| - int* equal = new int; // The values are equal = 0, if not = 1 | |
| + int* equal = new int; // The values are equal = 0, if not = 1 | |
| *equal = 0; | |
| int* dev_equal; | |
| cudaMalloc((void**)&dev_equal, sizeof(int)); | |
| t@@ -548,15 +548,15 @@ __host__ void DEM::transferToGlobalDeviceMemory(int stat… | |
| //cudaMemcpy(dev_time, &time, sizeof(Time), cudaMemcpyHostToDevice); | |
| // Kinematic particle values | |
| - cudaMemcpy( dev_x, k.x, | |
| + cudaMemcpy( dev_x, k.x, | |
| memSizeF4, cudaMemcpyHostToDevice); | |
| - cudaMemcpy( dev_xyzsum, k.xyzsum, | |
| + cudaMemcpy( dev_xyzsum, k.xyzsum, | |
| memSizeF4, cudaMemcpyHostToDevice); | |
| cudaMemcpy( dev_vel, k.vel, | |
| memSizeF4, cudaMemcpyHostToDevice); | |
| cudaMemcpy( dev_vel0, k.vel, | |
| memSizeF4, cudaMemcpyHostToDevice); | |
| - cudaMemcpy( dev_acc, k.acc, | |
| + cudaMemcpy( dev_acc, k.acc, | |
| memSizeF4, cudaMemcpyHostToDevice); | |
| cudaMemcpy( dev_force, k.force, | |
| memSizeF4, cudaMemcpyHostToDevice); |