tadded shortening experiment scripts - sphere - GPU-based 3D discrete element m… | |
git clone git://src.adamsgaard.dk/sphere | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit 1125a45ce5ac8b6a68c1331db973d914cbd4a11c | |
parent bfea4af578bc5b51504c5f51256ed9aa8a031662 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Wed, 18 Jun 2014 16:11:24 +0200 | |
added shortening experiment scripts | |
Diffstat: | |
A python/cube-init.py | 31 +++++++++++++++++++++++++++++… | |
A python/shortening.py | 101 +++++++++++++++++++++++++++++… | |
2 files changed, 132 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/python/cube-init.py b/python/cube-init.py | |
t@@ -0,0 +1,31 @@ | |
+#!/usr/bin/env python | |
+import sphere | |
+ | |
+init = sphere.sim('cube-init', np=1e2) | |
+ | |
+init.generateRadii(psd='uni', radius_mean=0.01, radius_variance=0.002) | |
+ | |
+# Initialize positions in random grid (also sets world size) | |
+init.initRandomGridPos(gridnum=(6, 6, 1e12)) | |
+ | |
+# Disable friction to dissipate energy fast | |
+init.k_n[0] = 1.0e8 | |
+init.mu_s[0] = 0.0 | |
+init.mu_d[0] = 0.0 | |
+ | |
+# Choose the tangential contact model | |
+# 1) Visco-frictional (somewhat incorrect, fast computations) | |
+# 2) Elastic-viscous-frictional (more correct, slow computations in dense | |
+# packings) | |
+init.contactmodel[0] = 1 | |
+ | |
+# Add gravitational acceleration | |
+init.g[2] = -10.0 | |
+ | |
+# Set duration of simulation, automatically determine timestep, etc. | |
+init.initTemporal(total=6.0, file_dt=0.2) | |
+print(init.num) | |
+ | |
+init.run(dry = True) | |
+init.run() | |
+init.writeVTKall() | |
diff --git a/python/shortening.py b/python/shortening.py | |
t@@ -0,0 +1,101 @@ | |
+#!/usr/bin/env python | |
+import sphere | |
+import numpy | |
+ | |
+cube = sphere.sim('cube-init') | |
+cube.readlast() | |
+cube.adjustUpperWall(z_adjust=1.0) | |
+ | |
+# Fill out grid with cubic packages | |
+grid = numpy.array(( | |
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], | |
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], | |
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], | |
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], | |
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], | |
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], | |
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], | |
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1], | |
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1], | |
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], | |
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], | |
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], | |
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], | |
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], | |
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], | |
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] | |
+ )) | |
+ | |
+# World dimensions and cube grid | |
+nx = 1 # horizontal (thickness) cubes | |
+ny = grid.shape[1] # horizontal cubes | |
+nz = grid.shape[0] # vertical cubes | |
+dx = cube.L[0] | |
+dy = cube.L[1] | |
+dz = cube.L[2] | |
+Lx = dx*nx | |
+Ly = dy*ny | |
+Lz = dz*nz | |
+ | |
+sim = sphere.sim('shortening', nw=1) | |
+ | |
+# insert particles into each cube in 90 degree CCW rotated coordinate system | |
+# around y | |
+for z in range(nz): | |
+ for y in range(ny): | |
+ for x in range(nx): | |
+ | |
+ if (grid[z,y] == 0): | |
+ continue # skip to next iteration | |
+ | |
+ for i in range(cube.np): | |
+ # x=x, y=Ly-z, z=y | |
+ pos = [ cube.x[i,0] + x*dx, | |
+ Ly - ((dz - cube.x[i,2]) + z*dz), | |
+ cube.x[i,1] + y*dy ] | |
+ sim.addParticle(pos, radius=cube.radius[i]) | |
+ | |
+sim.defineWorldBoundaries(L=[Lx, Lz*3, Ly]) | |
+ | |
+sim.k_t[0] = 2.0/3.0*sim.k_n[0] | |
+ | |
+sim.writeVTK() | |
+print(sim.np[0]) | |
+ | |
+ | |
+''' | |
+## Relaxation | |
+# Choose the tangential contact model | |
+# 1) Visco-frictional (somewhat incorrect, fast computations) | |
+# 2) Elastic-viscous-frictional (more correct, slow computations in dense | |
+# packings) | |
+sim.contactmodel[0] = 2 | |
+ | |
+# Add gravitational acceleration | |
+# Flip geometry so the upper wall pushes downwards | |
+sim.g[1] = -9.81 | |
+ | |
+sim.periodicBoundariesX() | |
+ | |
+# Set duration of simulation, automatically determine timestep, etc. | |
+sim.initTemporal(total=3.0, file_dt = 0.1) | |
+ | |
+sim.zeroKinematics() | |
+sim.run(dry=True) | |
+sim.run() | |
+sim.writeVTKall() | |
+''' | |
+ | |
+''' | |
+## Shortening | |
+sim.readlast() | |
+sim.initTemporal(current=0.0, total=5.0, file_dt = 0.01) | |
+ | |
+# push down upper wall | |
+compressional_strain = 0.5 | |
+sim.uniaxialStrainRate(wvel = compressional_strain*Lx/sim.time_total[0]) | |
+ | |
+sim.run(dry=True) | |
+sim.run() | |
+sim.writeVTKall() | |
+''' |