tMerge branch 'master' of github.com:anders-dc/sphere - sphere - GPU-based 3D d… | |
git clone git://src.adamsgaard.dk/sphere | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit 5374a230e300340aededef87773a555e87243559 | |
parent e8e839893bdaf652fcc6ecec92ecefc7bd1e7885 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Sat, 5 Mar 2016 18:21:50 +0100 | |
Merge branch 'master' of github.com:anders-dc/sphere | |
Diffstat: | |
M README.rst | 7 +++---- | |
A python/sigma-sideways-dry.sh | 15 +++++++++++++++ | |
A python/sigma-sideways-starter.py | 183 +++++++++++++++++++++++++++++… | |
M python/sphere.py | 2 +- | |
4 files changed, 202 insertions(+), 5 deletions(-) | |
--- | |
diff --git a/README.rst b/README.rst | |
t@@ -92,7 +92,7 @@ publications and presentations: | |
- Damsgaard, A., D.L. Egholm, J.A. Piotrowski, S. Tulaczyk, N.K. Larsen, and | |
C.F. Brædstrup (2015), A new methodology to simulate subglacial deformation… | |
- water saturated granular material, The Cryosphere, 9, 2183-2200, | |
+ water-saturated granular material, The Cryosphere, 9, 2183-2200, | |
`doi:10.5194/tc-9-2183-2015 <http://dx.doi.org/10.5194/tc-9-2183-2015>`_. | |
- Damsgaard, A., D.L. Egholm, J.A. Piotrowski, S. Tulaczyk, N.K. Larsen, and | |
C.F. Brædstrup (2014), Numerical modeling of particle-fluid mixtures in a | |
t@@ -125,7 +125,6 @@ publications and presentations: | |
Author | |
------ | |
-Anders Damsgaard, `[email protected] <mailto:[email protected].… | |
-`blog <http://anders-dc.github.io>`_, | |
-`more contact information <https://cs.au.dk/~adc>`_. | |
+Anders Damsgaard, `[email protected] <mailto:[email protected]>`_, | |
+`webpage <https://cs.au.dk/~adc>`_. | |
diff --git a/python/sigma-sideways-dry.sh b/python/sigma-sideways-dry.sh | |
t@@ -0,0 +1,15 @@ | |
+#!/bin/bash | |
+ | |
+#SBATCH -o sigma-sideways-dry.%j.%N.out | |
+#SBATCH -p longq | |
+#SBATCH --nodes=1 | |
+#SBATCH --gres=gpu:1 | |
+#SBATCH -J sigma-sideways-dry | |
+#SBATCH --time=48:00:00 | |
+ | |
+module load gcc/4.8.5 | |
+module load cuda75 | |
+ | |
+cd ~/code/sphere/python/ | |
+python sigma-sideways-starter.py 0 0 1.0 2.0e-16 10000.0 2.080e-7 1.0 | |
+ | |
diff --git a/python/sigma-sideways-starter.py b/python/sigma-sideways-starter.py | |
t@@ -0,0 +1,183 @@ | |
+#!/usr/bin/env python | |
+import sphere | |
+import numpy | |
+import sys | |
+ | |
+# launch with: | |
+# $ ipython sigma-sideways-starter.py <device> <fluid> <c_phi> <k_c> <sigma_0> | |
+# <mu> <velfac> | |
+ | |
+# start with | |
+# ipython sigma-sideways-starter.py 0 1 1.0 2.0e-16 10000.0 2.080e-7 1.0 | |
+ | |
+device = int(sys.argv[1]) | |
+wet = int(sys.argv[2]) | |
+c_phi = float(sys.argv[3]) | |
+k_c = float(sys.argv[4]) | |
+sigma0 = float(sys.argv[5]) | |
+mu = float(sys.argv[6]) | |
+velfac = float(sys.argv[7]) | |
+ | |
+if wet == 1: | |
+ fluid = True | |
+else: | |
+ fluid = False | |
+ | |
+#sim = sphere.sim('halfshear-sigma0=' + str(sigma0), fluid=False) | |
+sim = sphere.sim('shear-sigma0=' + str(sigma0), fluid=False) | |
+sim.readlast() | |
+#sim.readbin('../input/shear-sigma0=10000.0-new.bin') | |
+#sim.scaleSize(0.01) # from 1 cm to 0.01 cm = 100 micro m (fine sand) | |
+ | |
+sim.fluid = fluid | |
+if fluid: | |
+ #sim.id('halfshear-darcy-sigma0=' + str(sigma0) + '-k_c=' + str(k_c) + \ | |
+ #'-mu=' + str(mu) + '-velfac=' + str(velfac) + '-shear') | |
+ sim.id('sw-darcy-sigma0=' + str(sigma0) + '-k_c=' + str(k_c) + \ | |
+ '-mu=' + str(mu) + '-velfac=' + str(velfac) + '-noflux-shear') | |
+else: | |
+ sim.id('sw-darcy-sigma0=' + str(sigma0) + '-velfac=' + str(velfac) + \ | |
+ '-noflux-shear') | |
+ | |
+#sim.checkerboardColors(nx=6,ny=3,nz=6) | |
+sim.checkerboardColors(nx=6,ny=6,nz=6) | |
+sim.cleanup() | |
+sim.adjustUpperWall() | |
+sim.zeroKinematics() | |
+ | |
+# customized shear function for sidewards shear | |
+def shearVelocitySideways(sim, shear_strain_rate = 1.0, shear_stress = False): | |
+ ''' | |
+ Setup shear experiment either by a constant shear rate or a constant | |
+ shear stress. The shear strain rate is the shear velocity divided by | |
+ the initial height per second. The shear movement is along the positive | |
+ x axis. The function zeroes the tangential wall viscosity (gamma_wt) and | |
+ the wall friction coefficients (mu_ws, mu_wn). | |
+ | |
+ :param shear_strain_rate: The shear strain rate [-] to use if | |
+ shear_stress isn't False. | |
+ :type shear_strain_rate: float | |
+ :param shear_stress: The shear stress value to use [Pa]. | |
+ :type shear_stress: float or bool | |
+ ''' | |
+ | |
+ sim.nw[0] = 1 | |
+ | |
+ # Find lowest and heighest point | |
+ z_min = numpy.min(sim.x[:,2] - sim.radius) | |
+ z_max = numpy.max(sim.x[:,2] + sim.radius) | |
+ | |
+ # the grid cell size is equal to the max. particle diameter | |
+ cellsize = sim.L[0] / sim.num[0] | |
+ | |
+ # make grid one cell heigher to allow dilation | |
+ sim.num[2] += 1 | |
+ sim.L[2] = sim.num[2] * cellsize | |
+ | |
+ # zero kinematics | |
+ sim.zeroKinematics() | |
+ | |
+ # Adjust grid and placement of upper wall | |
+ sim.wmode = numpy.array([1]) | |
+ | |
+ # Fix horizontal velocity to 0.0 of -x particles | |
+ d_max_below = numpy.max(sim.radius[numpy.nonzero(sim.x[:,1] < | |
+ (z_max-z_min)*0.3)])*2.0 | |
+ I = numpy.nonzero(sim.x[:,2] < (z_min + d_max_below)) | |
+ sim.fixvel[I] = 1 | |
+ sim.angvel[I,0] = 0.0 | |
+ sim.angvel[I,1] = 0.0 | |
+ sim.angvel[I,2] = 0.0 | |
+ sim.vel[I,0] = 0.0 # x-dim | |
+ sim.vel[I,1] = 0.0 # y-dim | |
+ sim.color[I] = -1 | |
+ | |
+ # Fix horizontal velocity to specific value of +x particles | |
+ d_max_top = numpy.max(sim.radius[numpy.nonzero(sim.x[:,1] > | |
+ (z_max-z_min)*0.7)])*2.0 | |
+ I = numpy.nonzero(sim.x[:,1] > (z_max - d_max_top)) | |
+ sim.fixvel[I] = 1 | |
+ sim.angvel[I,0] = 0.0 | |
+ sim.angvel[I,1] = 0.0 | |
+ sim.angvel[I,2] = 0.0 | |
+ if shear_stress == False: | |
+ prefactor = sim.x[I,1]/sim.L[1] | |
+ sim.vel[I,0] = prefactor*(z_max-z_min)*shear_strain_rate | |
+ else: | |
+ sim.vel[I,0] = 0.0 | |
+ sim.wmode[0] = 3 | |
+ sim.w_tau_x[0] = float(shear_stress) | |
+ sim.vel[I,1] = 0.0 # y-dim | |
+ sim.color[I] = -1 | |
+ | |
+ # Set wall tangential viscosity to zero | |
+ sim.gamma_wt[0] = 0.0 | |
+ | |
+ # Set wall friction coefficients to zero | |
+ sim.mu_ws[0] = 0.0 | |
+ sim.mu_wd[0] = 0.0 | |
+ return sim | |
+ | |
+sim = shearVelocitySideways(sim, 1.0/20.0 * velfac) | |
+K_q_real = 36.4e9 | |
+K_w_real = 2.2e9 | |
+ | |
+ | |
+#K_q_sim = 1.16e9 | |
+K_q_sim = 1.16e6 | |
+sim.setStiffnessNormal(K_q_sim) | |
+sim.setStiffnessTangential(K_q_sim) | |
+K_w_sim = K_w_real/K_q_real * K_q_sim | |
+ | |
+ | |
+if fluid: | |
+ #sim.num[2] *= 2 | |
+ sim.num[:] /= 2 | |
+ #sim.L[2] *= 2.0 | |
+ #sim.initFluid(mu = 1.787e-6, p = 600.0e3, cfd_solver = 1) | |
+ sim.initFluid(mu = mu, p = 0.0, cfd_solver = 1) | |
+ sim.setFluidTopFixedPressure() | |
+ #sim.setFluidTopFixedFlow() | |
+ sim.setFluidBottomNoFlow() | |
+ #sim.setFluidBottomFixedPressure() | |
+ #sim.setDEMstepsPerCFDstep(10) | |
+ sim.setMaxIterations(2e5) | |
+ sim.setPermeabilityPrefactor(k_c) | |
+ sim.setFluidCompressibility(1.0/K_w_sim) | |
+ | |
+ | |
+# frictionless side boundaries | |
+sim.periodicBoundariesX() | |
+ | |
+# rearrange particle assemblage to accomodate frictionless side boundaries | |
+sim.x[:,1] += numpy.abs(numpy.min(sim.x[:,1] - sim.radius[:])) | |
+sim.L[1] = numpy.max(sim.x[:,1] + sim.radius[:]) | |
+ | |
+ | |
+sim.w_sigma0[0] = sigma0 | |
+sim.w_m[0] = numpy.abs(sigma0*sim.L[0]*sim.L[1]/sim.g[2]) | |
+ | |
+#sim.setStiffnessNormal(36.4e9 * 0.1 / 2.0) | |
+#sim.setStiffnessTangential(36.4e9/3.0 * 0.1 / 2.0) | |
+sim.setStiffnessNormal(K_q_sim) | |
+sim.setStiffnessTangential(K_q_sim) | |
+sim.mu_s[0] = 0.5 | |
+sim.mu_d[0] = 0.5 | |
+sim.setDampingNormal(0.0) | |
+sim.setDampingTangential(0.0) | |
+#sim.deleteAllParticles() | |
+#sim.fixvel[:] = -1.0 | |
+ | |
+sim.initTemporal(total = 20.0/velfac, file_dt = 0.01/velfac, epsilon=0.07) | |
+#sim.time_dt[0] *= 1.0e-2 | |
+#sim.initTemporal(total = 1.0e-4, file_dt = 1.0e-5, epsilon=0.07) | |
+ | |
+# Fix lowermost particles | |
+#dz = sim.L[2]/sim.num[2] | |
+#I = numpy.nonzero(sim.x[:,2] < 1.5*dz) | |
+#sim.fixvel[I] = 1 | |
+ | |
+sim.run(dry=True) | |
+ | |
+sim.run(device=device) | |
+sim.writeVTKall() | |
diff --git a/python/sphere.py b/python/sphere.py | |
t@@ -3234,7 +3234,7 @@ class sim: | |
def wet(self): | |
''' | |
- Set the simulation to be dry (no fluids). | |
+ Set the simulation to be wet (total fluid saturation). | |
See also :func:`dry()` | |
''' |