tUpdate hanzen-zoet experiments and results visualization - 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 ae848a4aea82c97555e701465d26bba60ba80f76
 (DIR) parent 5f03b9fa9d946daf18bb119e7c181bcfe41a31d6
 (HTM) Author: Anders Damsgaard <anders@adamsgaard.dk>
       Date:   Tue, 12 May 2020 10:24:43 +0200
       
       Update hanzen-zoet experiments and results visualization
       
       Diffstat:
         A python/hansen-zoet-plots.py         |      51 +++++++++++++++++++++++++++++++
         M python/hansen-zoet.py               |      14 +++++++++-----
       
       2 files changed, 60 insertions(+), 5 deletions(-)
       ---
 (DIR) diff --git a/python/hansen-zoet-plots.py b/python/hansen-zoet-plots.py
       t@@ -0,0 +1,51 @@
       +#!/usr/bin/env python
       +
       +# Import sphere functionality
       +import sphere
       +import numpy
       +import matplotlib.pyplot as plt
       +from sklearn.linear_model import LinearRegression
       +
       +# Number of particles
       +np = 1e4
       +
       +# Common simulation id
       +sim_id = "hz"
       +
       +# Deviatoric stress [Pa]
       +Nlist = numpy.array([51e3, 101e3, 202e3, 303e3, 404e3])
       +
       +### INITIALIZATION ###
       +
       +# New class
       +sim = sphere.sim(np = np, nd = 3, nw = 0, sid = sim_id + "-init")
       +
       +N_avg = 50
       +tau_c = []
       +
       +for N in Nlist:
       +    sim.id("{}-shear-N{}".format(sim_id, N))
       +    lastf = sim.status()
       +    #sim.readlast()
       +    #sim.sheardisp()
       +
       +    # average shear stress over last files
       +    tau_c_curr = 0.0
       +
       +    for i in range(N_avg):
       +        sim.readstep(lastf - i)
       +        tau_c_curr += sim.shearStress('effective')
       +    tau_c.append(tau_c_curr/N_avg)
       +
       +fig = plt.figure()
       +tau_c = numpy.array(tau_c)
       +tau_c /= 1e3
       +Nlist /= 1e3
       +plt.plot(Nlist, tau_c, '+')
       +mc = LinearRegression().fit(Nlist.reshape((-1, 1)), tau_c)
       +Nspace = numpy.linspace(0.0, Nlist[-1], endpoint=True)
       +plt.plot(Nspace, mc.predict(Nspace.reshape(-1,1)), '-')
       +plt.title("friction = {:.2}, cohesion = {:.2} kPa".format(mc.coef_[0], mc.intercept_))
       +plt.xlabel("Effective normal stress [kPa]")
       +plt.ylabel("Shear stress [kPa]")
       +plt.savefig("hz-mohr-coulomb.pdf")
 (DIR) diff --git a/python/hansen-zoet.py b/python/hansen-zoet.py
       t@@ -5,7 +5,7 @@ import sphere
        
        ### EXPERIMENT SETUP ###
        initialization = False
       -consolidation  = False
       +consolidation  = True
        shearing       = True
        rendering      = False
        plots          = True
       t@@ -16,8 +16,12 @@ np = 1e4
        # Common simulation id
        sim_id = "hz"
        
       +# Use specified compute device (-1 for autoselect)
       +device = 1
       +
        # Deviatoric stress [Pa]
       -Nlist = [51e3, 101e3, 202e3, 303e3, 404e3]
       +#Nlist = [51e3, 101e3, 202e3, 303e3, 404e3]
       +Nlist = [404e3]
        
        ### INITIALIZATION ###
        
       t@@ -47,7 +51,7 @@ if (initialization == True):
        
            # Run sphere
            init.run(dry = True)
       -    init.run()
       +    init.run(device=device)
        
            if (plots == True):
                # Make a graph of energies
       t@@ -97,7 +101,7 @@ for N in Nlist:
        
                # Run sphere
                cons.run(dry = True) # show values, don't run
       -        cons.run() # run
       +        cons.run(device=device) # run
        
                if (plots == True):
                    # Make a graph of energies
       t@@ -138,7 +142,7 @@ for N in Nlist:
        
                # Run sphere
                shear.run(dry = True)
       -        shear.run()
       +        shear.run(device=device)
        
                if (plots == True):
                    # Make a graph of energies