Introduction
Introduction Statistics Contact Development Disclaimer Help
tAdded python script for uniaxial compression experiment - sphere - GPU-based 3…
git clone git://src.adamsgaard.dk/sphere
Log
Files
Refs
LICENSE
---
commit c6de88dc953fd288dbc1556b2b6b1427263a3aa0
parent fd4911c71e33e2676faec3512d6fea2fba47a120
Author: Anders Damsgaard <[email protected]>
Date: Wed, 29 Aug 2012 14:16:05 +0200
Added python script for uniaxial compression experiment
Diffstat:
A python/1e4-largesize-uniaxial.py | 136 +++++++++++++++++++++++++++++…
1 file changed, 136 insertions(+), 0 deletions(-)
---
diff --git a/python/1e4-largesize-uniaxial.py b/python/1e4-largesize-uniaxial.py
t@@ -0,0 +1,136 @@
+#!/usr/bin/env python
+
+# Import sphere functionality
+from sphere import *
+import subprocess
+
+# Determine system hostname
+import os;
+hostname = os.uname()[1]
+
+# Simulation ID
+sid = "1e4-largesize-uniaxial"
+
+# Delete previous output
+subprocess.call("rm ../{img_out,output}/" + sid + "*", shell=True);
+
+
+#### GRAVITATIONAL CONSOLIDATION
+
+# New class
+init = Spherebin(np = 1e4)
+
+# Generate random radii
+init.generateRadii(psd = 'logn', histogram = 1, radius_mean = 0.02)
+
+# Initialize particle parameters
+# Values from Yohannes et al. 2012
+init.defaultParams(ang_s = 28,
+ ang_d = 28,
+ ang_r = 0,
+ rho = 2600,
+ k_n = 1.16e9,
+ k_t = 1.16e9,
+ gamma_n = 0.0,
+ gamma_t = 0.0,
+ gamma_r = 0.0)
+
+# Place particles in grid-like arrangement
+# periodic: 0 = frictional x- and y-walls
+# periodic: 1 = periodic x- and y-boundaries
+# periodic: 2 = periodic x boundaries, frictional y-walls
+# shearmodel: 1 = viscous, frictional shear force model
+# shearmodel: 2 = elastic, frictional shear force model
+init.initRandomGridPos(gridnum = numpy.array([20,10,600]), periodic = 1, shear…
+
+# Initialize temporal parameters
+init.initTemporal(total = 5.0, file_dt = 0.10)
+
+# Write output binary for sphere
+init.writebin("../input/" + sid + "-initgrid.bin".format(sid))
+
+# Render start configuration
+render("../input/" + sid + "-initgrid.bin", out = sid + "-initgrid")
+
+# Run simulation
+subprocess.call("cd ..; ./sphere_*_X86_64 " + sid + "-initgrid", shell=True)
+
+# Plot energy
+visualize(sid + "-initgrid", "energy", savefig=True, outformat='png')
+
+
+#### CONSOLIDATION UNDER DEVIATORIC STRESS
+
+# New class
+cons = Spherebin(np = init.np, nd = init.nd)
+
+# Find out which output file was the last generated during gravitational conso…
+lastfile = status(sid + "-initgrid", verbose = False)
+filename = "../output" + sid + "-initgrid.output{0}.bin".format(lastfile)
+
+
+## Uniaxial compression loop:
+# 1. Read last experiment binary
+# 2. Set new devs and zero current time
+# 3. Run sphere
+# 4. Visualize wall data and find void ratio (e)
+# 5. Save name of last binary written
+
+# Define deviatoric stresses to test
+stresses = numpy.array([10e3, 20e3, 40e3])
+voidratio = numpy.zeros(1, length(stresses))
+
+i = 0
+for devs in stresses:
+
+ # Simulation ID for consolidation run
+ cid = sid + "-uniaxial-{0}Pa".format(devs)
+
+ # Read the last output file of from the gravitational consolidation experime…
+ cons.readbin(filename)
+
+ # Setup consolidation experiment
+ cons.consolidate(deviatoric_stress = devs, periodic = init.periodic)
+
+ # Zero time variables and set new total time
+ cons.initTemporal(total = 3.0, file_dt = 0.03)
+
+ # Write output binary for sphere
+ cons.writebin("../input/" + cid + ".bin")
+
+ # Run simulation
+ subprocess.call("cd ..; ./sphere_*_X86_64 " + cid, shell=True)
+
+ # Plot energy and wall data
+ visualize(cid, "energy", savefig=True, outformat='png')
+ visualize(cid, "walls", savefig=True, outformat='png')
+
+ # Find void ratio
+ lastfile = status(cid, verbose = False)
+ cons.readbin(cid)
+ voidratio[i] = voidRatio()
+ i = i+1
+
+ # Name of last output file
+ filename = "../output" + cid + ".output{0}.bin".format(lastfile)
+
+
+# Save plot of measured compression curve
+fig = plt.figure(figsize(15,10),dpi=300)
+figtitle = "{0}, measured compression curve".format(sid)
+fig.text(0.5,0.95,figtitle,horizontalalignment='center',fontproperties=FontPro…
+ax1 = plt.subplot2grid((1,1),(0,0))
+ax1.set_xlabel('Stress [kPa]')
+ax1.set_ylabel('Void ratio')
+ax1.semilogx(stresses, voidratio, '+-')
+
+# Save values to text file
+fh = None
+try:
+ fh = open(sid + "-uniaxial.txt", "w")
+ for i in range(length(stresses)):
+ fh.write("{0}\t{1}\n".format(stresses[i], voidratio[i]))
+ finally:
+ if fh is not None:
+ fh.close()
+
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.