tHertzian nonlinear contact model added. Untested. - sphere - GPU-based 3D disc… | |
git clone git://src.adamsgaard.dk/sphere | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit f9a48cab2eecf0dcce6e2e6ddf1ca837a14a41cc | |
parent 1569cbad46a0701483843304614911364464542a | |
Author: Anders Damsgaard <[email protected]> | |
Date: Tue, 16 Oct 2012 16:26:30 +0200 | |
Hertzian nonlinear contact model added. Untested. | |
Diffstat: | |
M src/contactsearch.cuh | 45 ++++++++++++++++++-----------… | |
M src/device.cu | 4 ++-- | |
2 files changed, 28 insertions(+), 21 deletions(-) | |
--- | |
diff --git a/src/contactsearch.cuh b/src/contactsearch.cuh | |
t@@ -426,7 +426,7 @@ __global__ void interact(unsigned int* dev_gridParticleInd… | |
Float3 T = MAKE_FLOAT3(0.0f, 0.0f, 0.0f); | |
// Apply linear elastic, frictional contact model to registered contacts | |
- if (devC_shearmodel == 2) { | |
+ if (devC_shearmodel == 2 || devC_shearmodel == 3) { | |
unsigned int idx_b_orig, mempos; | |
Float delta_n, x_ab_length, radius_b; | |
Float3 x_ab; | |
t@@ -458,24 +458,31 @@ __global__ void interact(unsigned int* dev_gridParticleI… | |
// Process collision if the particles are overlapping | |
if (delta_n < 0.0f) { | |
- /*contactLinearViscous(&F, &T, &es_dot, &ev_dot, &p, | |
- idx_a_orig, idx_b_orig, | |
- dev_vel, | |
- dev_angvel, | |
- radius_a, radius_b, | |
- x_ab, x_ab_length, | |
- delta_n, devC_kappa);*/ | |
- contactLinear(&F, &T, &es_dot, &ev_dot, &p, | |
- idx_a_orig, | |
- idx_b_orig, | |
- vel_a, | |
- dev_vel, | |
- angvel_a, | |
- dev_angvel, | |
- radius_a, radius_b, | |
- x_ab, x_ab_length, | |
- delta_n, dev_delta_t, | |
- mempos); | |
+ if (devC_shearmodel == 2) { | |
+ contactLinear(&F, &T, &es_dot, &ev_dot, &p, | |
+ idx_a_orig, | |
+ idx_b_orig, | |
+ vel_a, | |
+ dev_vel, | |
+ angvel_a, | |
+ dev_angvel, | |
+ radius_a, radius_b, | |
+ x_ab, x_ab_length, | |
+ delta_n, dev_delta_t, | |
+ mempos); | |
+ } else if (devC_shearmodel == 3) { | |
+ contactHertz(&F, &T, &es_dot, &ev_dot, &p, | |
+ idx_a_orig, | |
+ idx_b_orig, | |
+ vel_a, | |
+ dev_vel, | |
+ angvel_a, | |
+ dev_angvel, | |
+ radius_a, radius_b, | |
+ x_ab, x_ab_length, | |
+ delta_n, dev_delta_t, | |
+ mempos); | |
+ } | |
} else { | |
__syncthreads(); | |
// Remove this contact (there is no particle with index=np) | |
diff --git a/src/device.cu b/src/device.cu | |
t@@ -486,8 +486,8 @@ __host__ void gpuMain(Float4* host_x, | |
// The contact search in topology() is only necessary for determining | |
// the accumulated shear distance needed in the linear elastic | |
- // shear force model | |
- if (params->shearmodel == 2) { | |
+ // and nonlinear contact force model | |
+ if (params->shearmodel == 2 || params->shearmodel == 3) { | |
// For each particle: Search contacts in neighbor cells | |
if (PROFILING == 1) | |
startTimer(&kernel_tic); |