| 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() | |
| + |