tcollapse.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
       ---
       tcollapse.py (2587B)
       ---
            1 #!/usr/bin/env python
            2 
            3 # Import sphere functionality
            4 import sphere
            5 
            6 ### EXPERIMENT SETUP ###
            7 initialization = True
            8 collapse       = True
            9 rendering      = True
           10 plots          = True
           11 
           12 # Number of particles
           13 np = 1e4
           14 
           15 # Common simulation id
           16 sim_id = 'collapse'
           17 
           18 ### INITIALIZATION ###
           19 
           20 # New class
           21 init = sphere.sim(np = np, nd = 3, nw = 0, sid = sim_id + '-init')
           22 
           23 # Set radii
           24 init.generateRadii(mean = 0.1)
           25 
           26 # Use default params
           27 init.defaultParams(
           28         k_n = 1.0e6, k_t = 1.0e6,           # normal and tangential stiffnesses
           29         gamma_n = 100.0, gamma_t = 100.0,   # normal and tangential viscosities
           30         mu_s = 0.3, mu_d = 0.3)             # static and dynamic frictions
           31 
           32 # Initialize positions in random grid (also sets world size)
           33 hcells = np**(1.0/3.0)
           34 init.initRandomGridPos(gridnum = numpy.array([hcells, hcells, 1e9]))
           35 
           36 # Choose the tangential contact model
           37 # 1) Visco-frictional (somewhat incorrect, fast computations)
           38 # 2) Elastic-viscous-frictional (more correct, slow computations in dense
           39 # packings)
           40 init.contactmodel[0] = 1
           41 
           42 # Add gravitational acceleration
           43 init.g[2] = -10.0
           44 
           45 # Set duration of simulation, automatically determine timestep, etc.
           46 init.initTemporal(total = 10.0)
           47 
           48 if (initialization == True):
           49 
           50     # Run sphere
           51     init.run(dry = True)
           52     init.run()
           53 
           54     if (plots == True):
           55         # Make a graph of energies
           56         init.visualize('energy', savefig=True, outformat='png')
           57 
           58 ### COLLAPSE ###
           59 
           60 # New class
           61 coll = sphere.sim(np = init.np, nw = init.nw, sid = sim_id)
           62 
           63 # Read last output file of initialization step
           64 lastf = status(sim_id + '-init')
           65 coll.readbin('../output/' + sim_id + '-init.output{:0=5}.bin'.format(lastf),
           66         verbose = False)
           67 
           68 # Setup collapse experiment by moving the +x boundary and resizing the grid
           69 resizefactor = 3
           70 coll.L[0] = coll.L[0]*resizefactor # world length in x-direction (0)
           71 coll.num[0] = coll.num[0]*resizefactor # neighbor search grid in x (0)
           72 
           73 # Reduce the height of the world and grid
           74 coll.adjustUpperWall()
           75 
           76 # Set duration of simulation, automatically determine timestep, set the output
           77 # file interval.
           78 coll.initTemporal(total = 5.0, file_dt = 0.10)
           79 
           80 if (collapse == True):
           81 
           82     # Run sphere
           83     coll.run(dry = True)
           84     coll.run()
           85 
           86     if (plots == True):
           87         # Make a graph of the energies
           88         init.visualize('energy', savefig=True, outformat='png')
           89 
           90     if (rendering == True):
           91         # Render images with raytracer with linear velocity as the color code
           92         print('Rendering images with raytracer')
           93         coll.render(method = 'vel', max_val = 1.0, verbose = False)
           94         coll.video()