tadded capillary model from Richefeu 2008, untested, unused - 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 f1f2215f38c14179d726466ae0d3790b9bc7011e
 (DIR) parent 42c93360b3a79ad65eb8e72511ccf7b7d677bbf8
 (HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
       Date:   Mon,  1 Sep 2014 13:21:53 +0200
       
       added capillary model from Richefeu 2008, untested, unused
       
       Diffstat:
         M src/cohesion.cuh                    |      33 +++++++++++++++++++++++++++++++
         M src/contactsearch.cuh               |       3 ++-
       
       2 files changed, 35 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/src/cohesion.cuh b/src/cohesion.cuh
       t@@ -277,5 +277,38 @@ __device__ void capillaryCohesion_exp(
        } // End of capillaryCohesion_exp
        
        
       +// Capillary cohesion after Richefeu et al. (2008)
       +__device__ void capillaryCohesion2_exp(
       +    Float3* N,
       +    const Float radius_a, 
       +    const Float radius_b,
       +    const Float delta_ab,
       +    const Float3 x_ab,
       +    const Float x_ab_length, 
       +    const Float kappa)
       +{
       +
       +    // Normal vector 
       +    const Float3 n_ab = x_ab/x_ab_length;
       +
       +    // Determine the ratio; r = max{Ri/Rj;Rj/Ri}
       +    Float r;
       +    if ((radius_a/radius_b) > (radius_b/radius_a))
       +        r = radius_a/radius_b;
       +    else
       +        r = radius_b/radius_a;
       +
       +    const Float lambda = 0.9/1.4142135623730951 * pow(devC_params.V_b, 2.0) * pow(r, -0.5)
       +        * pow(1.0/radius_a + 1.0/radius_b, 0.5);
       +
       +    // Calculate cohesional force
       +    const Float3 f_c =
       +        -kappa * sqrtf(radius_a*radius_b) * expf(-delta_ab/lambda) * n_ab;
       +
       +    // Add force components from this collision to total force for particle
       +    *N += f_c;
       +
       +}
       +
        #endif
        // vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
 (DIR) diff --git a/src/contactsearch.cuh b/src/contactsearch.cuh
       t@@ -160,7 +160,8 @@ __device__ void findAndProcessContactsInCell(
                                                     x_ab, x_ab_length,
                                                     delta_ab, kappa);
                            } else if (delta_ab < devC_params.db) { 
       -                        // Check wether particle distance satisfies the capillary bond distance
       +                        // Check wether particle distance satisfies the
       +                        // capillary bond distance
                                capillaryCohesion_exp(F, radius_a, radius_b, delta_ab, 
                                                      x_ab, x_ab_length, kappa);
                            }