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);
}