tadd new rate-state generation script - sphere - GPU-based 3D discrete element method algorithm with optional fluid coupling
 (HTM) git clone git://src.adamsgaard.dk/sphere
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit f643ec5f6e9db8a8ea620826a84ae46b7f781f7e
 (DIR) parent 4bdd7a266ce53438a5caa8f2b12d460dfbbda278
 (HTM) Author: Anders Damsgaard Christensen <adc@geo.au.dk>
       Date:   Tue, 14 Jun 2016 07:45:44 -0700
       
       add new rate-state generation script
       
       Diffstat:
         A python/generate-rate-state-scripts… |     172 ++++++++++++++++++++++++++++++
       
       1 file changed, 172 insertions(+), 0 deletions(-)
       ---
 (DIR) diff --git a/python/generate-rate-state-scripts-comet-rs1.py b/python/generate-rate-state-scripts-comet-rs1.py
       t@@ -0,0 +1,172 @@
       +#!/usr/bin/env python
       +
       +# rs1: relative to rs0 set top wall mass to equal total particle mass, disable
       +# wall viscosity
       +
       +# Account and cluster information
       +# https://portal.xsede.org/sdsc-comet
       +# https://www.sdsc.edu/support/user_guides/comet.html
       +account = 'csd492'  # from `show_accounts`
       +jobname_prefix = 'rs1-'
       +walltime = '2-0'   # hours:minutes:seconds or days-hours
       +partition = 'gpu-shared'
       +no_gpus = 1
       +no_nodes = 1
       +ntasks_per_node = 1
       +folder = '~/code/sphere/python'
       +
       +
       +# Simulation parameter values
       +effective_stresses = [10e3, 20e3, 100e3, 200e3, 1000e3, 2000e3]
       +velfacs = [0.1, 1.0, 10.0]
       +mu_s_vals = [0.5]
       +mu_d_vals = [0.5]
       +
       +
       +# Script generating functions
       +
       +def generate_slurm_script(jobname):
       +
       +    script = '''#!/bin/bash
       +#SBATCH -A {account}
       +#SBATCH --job-name="{jobname}"
       +#SBATCH --output="{jobname}.%j.%N.out"
       +#SBATCH --time={walltime}
       +#SBATCH --partition={partition}
       +#SBATCH --gres=gpu:{no_gpus}
       +#SBATCH --nodes={no_nodes}
       +#SBATCH --ntasks-per-node={ntasks_per_node}
       +#SBATCH --export=ALL
       +
       +echo Job start `whoami`@`hostname`, `date`
       +module load cmake
       +module load cuda/7.0
       +module load python
       +module load scipy
       +
       +cd {folder}
       +python ./{jobname}.py
       +
       +echo Job end `whoami`@`hostname`, `date`
       +'''.format(account=account,
       +           jobname=jobname,
       +           walltime=walltime,
       +           partition=partition,
       +           no_gpus=no_gpus,
       +           no_nodes=no_nodes,
       +           ntasks_per_node=ntasks_per_node,
       +           folder=folder)
       +    with open(jobname + '.sh', 'w') as file:
       +        file.write(script)
       +
       +
       +def generate_slurm_continue_script(jobname):
       +
       +    script = '''#!/bin/bash
       +#SBATCH -A {account}
       +#SBATCH --job-name="{jobname}"
       +#SBATCH --output="{jobname}.%j.%N.out"
       +#SBATCH --time={walltime}
       +#SBATCH --partition={partition}
       +#SBATCH --gres=gpu:{no_gpus}
       +#SBATCH --nodes={no_nodes}
       +#SBATCH --ntasks-per-node={ntasks_per_node}
       +#SBATCH --export=ALL
       +
       +echo Job start `whoami`@`hostname`, `date`
       +module load cmake
       +module load cuda/7.0
       +module load python
       +module load scipy
       +
       +cd {folder}
       +python ./continue_sim.py {jobname} 0
       +
       +echo Job end `whoami`@`hostname`, `date`
       +'''.format(account=account,
       +           jobname=jobname,
       +           walltime=walltime,
       +           partition=partition,
       +           no_gpus=no_gpus,
       +           no_nodes=no_nodes,
       +           ntasks_per_node=ntasks_per_node,
       +           folder=folder)
       +    with open(jobname + '-cont.sh', 'w') as file:
       +        file.write(script)
       +
       +
       +# Generate scripts for sphere
       +def generate_simulation_script(jobname, effective_stress, velfac, mu_s, mu_d):
       +
       +    script = '''#!/usr/bin/env python
       +import sphere
       +import numpy
       +
       +# load consolidated granular assemblage
       +sim = sphere.sim(fluid=False)
       +cons_jobname = 'cons-1e4-' + '{{}}Pa'.format({effective_stress})
       +sim = sphere.sim(cons_jobname, fluid=False)
       +sim.readlast()
       +sim.id('{jobname}')
       +
       +sim.checkerboardColors(nx=6, ny=6, nz=6)
       +sim.cleanup()
       +sim.adjustUpperWall()
       +sim.zeroKinematics()
       +
       +sim.shear(1.0/20.0 * {velfac})
       +
       +sim.setStiffnessNormal(1.16e7)
       +sim.setStiffnessTangential(1.16e7)
       +sim.setStaticFriction({mu_s})
       +sim.setDynamicFriction({mu_d})
       +sim.setDampingNormal(0.0)
       +sim.setDampingTangential(0.0)
       +
       +sim.w_sigma0[0] = {effective_stress}
       +sim.w_m[0] = sim.totalMass()
       +sim.gamma_wn[0] = 0.0
       +
       +sim.initTemporal(total = 20.0, file_dt = 0.01, epsilon=0.07)
       +
       +I = numpy.nonzero(sim.fixvel > 0)
       +sim.fixvel[I] = 8.0 # step-wise velocity change when fixvel in ]5.0; 10.0[
       +
       +sim.run(dry=True)
       +sim.run(device=0)
       +sim.writeVTKall()
       +sim.visualize('shear')
       +'''.format(jobname=jobname,
       +           effective_stress=effective_stress,
       +           velfac=velfac,
       +           mu_s=mu_s,
       +           mu_d=mu_d)
       +
       +    with open(jobname + '.py', 'w') as file:
       +        file.write(script)
       +
       +
       +# Generate scripts
       +for effective_stress in effective_stresses:
       +    for velfac in velfacs:
       +        for mu_s in mu_s_vals:
       +            for mu_d in mu_s_vals:
       +
       +                jobname = 'rs0-{}Pa-v={}-mu_s={}-mu_d={}'.format(
       +                    effective_stress,
       +                    velfac,
       +                    mu_s,
       +                    mu_d)
       +
       +                print(jobname)
       +
       +                # Generate scripts for slurm, submit with `sbatch <script>`
       +                generate_slurm_script(jobname)
       +
       +                generate_slurm_continue_script(jobname)
       +
       +                generate_simulation_script(jobname,
       +                                           effective_stress,
       +                                           velfac,
       +                                           mu_s,
       +                                           mu_d)