talejandro-init-cons.py - 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
       ---
       talejandro-init-cons.py (1968B)
       ---
            1 #!/usr/bin/env python
            2 
            3 # Import sphere functionality
            4 import sphere
            5 
            6 # EXPERIMENT SETUP #
            7 initialization = True
            8 consolidation = True
            9 plots = True
           10 
           11 # CUDA device to use
           12 device = 0
           13 
           14 # Number of particles
           15 np = 6634
           16 
           17 # Common simulation id
           18 sim_id = "alejandro"
           19 
           20 # Consolidation stress [Pa]
           21 N = 10e3
           22 
           23 # INITIALIZATION #
           24 
           25 # New class
           26 init = sphere.sim(np=np, nd=3, nw=0, sid=sim_id + "-init")
           27 
           28 # Save radii
           29 init.generateRadii(mean=0.01)
           30 
           31 # Add viscous damping to quickly dissipate kinetic energy
           32 init.defaultParams(k_n=1.16e7, k_t=1.16e7, gamma_n=100.0, mu_s=0.5, mu_d=0.5)
           33 init.gamma_wn[0] = 10000.0
           34 
           35 # Add gravity
           36 init.g[2] = -9.81
           37 
           38 # Periodic x and y boundaries
           39 init.periodicBoundariesX()
           40 
           41 # Initialize positions in random grid (also sets world size)
           42 init.initRandomGridPos(gridnum=[24, 24, 1e9])
           43 
           44 # Set duration of simulation
           45 init.initTemporal(total=10.0, epsilon=0.07)
           46 
           47 if (initialization):
           48 
           49     # Run sphere
           50     init.run(dry=True)
           51     init.run(device=device)
           52 
           53     if (plots):
           54         # Make a graph of energies
           55         init.visualize('energy')
           56 
           57     init.writeVTKall()
           58 
           59 
           60 # CONSOLIDATION #
           61 
           62 # New class
           63 cons = sphere.sim(
           64     np=init.np,
           65     nw=1,
           66     sid=sim_id +
           67     "-cons-N={}".format(N))
           68 
           69 # Read last output file of initialization step
           70 lastf = sphere.status(sim_id + "-init")
           71 cons.readbin(
           72     "../output/" +
           73     sim_id +
           74     "-init.output{:0=5}.bin".format(lastf),
           75     verbose=False)
           76 
           77 cons.periodicBoundariesX()
           78 
           79 # Setup consolidation experiment
           80 cons.consolidate(normal_stress=N)
           81 cons.w_m[0] = cons.totalMass()
           82 
           83 # Disable all viscosities
           84 cons.gamma_n[0] = 0.0
           85 cons.gamma_t[0] = 0.0
           86 cons.gamma_wn[0] = 0.0
           87 cons.gamma_wt[0] = 0.0
           88 
           89 # Set duration of simulation
           90 cons.initTemporal(total=5.0, epsilon=0.07)
           91 
           92 if (consolidation):
           93 
           94     # Run sphere
           95     cons.run(dry=True)  # show values, don't run
           96     cons.run(device=device)  # run
           97 
           98     if (plots):
           99         # Make a graph of energies
          100         cons.visualize('energy')
          101         cons.visualize('walls')
          102 
          103     cons.writeVTKall()