trevert to previous logic - 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 b0e5f3b5ebb17b6639a2464a9deea444dee67e50
(DIR) parent c24a98931ae68aaabf77055f855b50ef0c118be1
(HTM) Author: Anders Damsgaard Christensen <adc@geo.au.dk>
Date: Wed, 15 Jun 2016 15:41:19 -0700
revert to previous logic
Diffstat:
M src/contactsearch.cuh | 80 -------------------------------
M src/darcy.cuh | 12 ++++++++++--
2 files changed, 10 insertions(+), 82 deletions(-)
---
(DIR) diff --git a/src/contactsearch.cuh b/src/contactsearch.cuh
t@@ -80,86 +80,6 @@ __device__ int findDistMod(int3* targetCell, Float3* distmod)
return 0;
}
-/* Copy of findDistMod, but modified for mirror BC at frictionless boundaries
- during porosity esimation */
-__device__ int findDistModPorosity(int3* targetCell, Float3* distmod)
-{
- // Check whether x- and y boundaries are to be treated as periodic
- // 1: x- and y boundaries periodic
- // 2: x boundaries periodic
- if (devC_grid.periodic == 1) {
-
- // Periodic x-boundary
- if (targetCell->x < 0) {
- //targetCell->x = devC_grid.num[0] - 1;
- targetCell->x += devC_grid.num[0];
- *distmod += MAKE_FLOAT3(devC_grid.L[0], 0.0, 0.0);
- }
- if (targetCell->x >= devC_grid.num[0]) {
- //targetCell->x = 0;
- targetCell->x -= devC_grid.num[0];
- *distmod -= MAKE_FLOAT3(devC_grid.L[0], 0.0, 0.0);
- }
-
- // Periodic y-boundary
- if (targetCell->y < 0) {
- //targetCell->y = devC_grid.num[1] - 1;
- targetCell->y += devC_grid.num[1];
- *distmod += MAKE_FLOAT3(0.0, devC_grid.L[1], 0.0);
- }
- if (targetCell->y >= devC_grid.num[1]) {
- //targetCell->y = 0;
- targetCell->y -= devC_grid.num[1];
- *distmod -= MAKE_FLOAT3(0.0, devC_grid.L[1], 0.0);
- }
-
-
- // Only x-boundaries are periodic
- } else if (devC_grid.periodic == 2) {
-
- // Periodic x-boundary
- if (targetCell->x < 0) {
- //targetCell->x = devC_grid.num[0] - 1;
- targetCell->x += devC_grid.num[0];
- *distmod += MAKE_FLOAT3(devC_grid.L[0], 0.0, 0.0);
- }
- if (targetCell->x >= devC_grid.num[0]) {
- //targetCell->x = 0;
- targetCell->x -= devC_grid.num[0];
- *distmod -= MAKE_FLOAT3(devC_grid.L[0], 0.0, 0.0);
- }
-
- // Hande out-of grid cases on y-axis by mirroring the grid
- if (targetCell->y < 0) {
- targetCell->y += 2;
- //*distmod += MAKE_FLOAT3(devC_grid.L[0], 0.0, 0.0);
- }
- if (targetCell->y >= devC_grid.num[1]) {
- targetCell->y -= 2;
- //*distmod += MAKE_FLOAT3(devC_grid.L[0], 0.0, 0.0);
- }
-
-
- // No periodic boundaries
- } else {
-
- // Don't modify targetCell or distmod.
-
- // Hande out-of grid cases on x- and y-axes
- if (targetCell->x < 0 || targetCell->x >= devC_grid.num[0])
- return -1;
- if (targetCell->y < 0 || targetCell->y >= devC_grid.num[1])
- return -1;
- }
-
- // Handle out-of-grid cases on z-axis
- if (targetCell->z < 0 || targetCell->z >= devC_grid.num[2])
- return -1;
- else
- return 0;
-}
-
-
// Find overlaps between particle no. 'idx' and particles in cell 'gridpos'.
// Contacts are processed as soon as they are identified.
(DIR) diff --git a/src/darcy.cuh b/src/darcy.cuh
t@@ -463,10 +463,18 @@ __global__ void findDarcyPorositiesLinear(
if (targetCell.z == -1)
targetCell.z = 1;
+ // Mirror particle grid at frictionless boundaries
+ /*if (devC_grid.periodic == 2) {
+ if (targetCell.y == -1)
+ targetCell.y = 1;
+ else if (targetCell.y == devC_grid.num[1])
+ targetCell.y = devC_grid.num[1] - 2;
+ }*/
+
// Get distance modifier for interparticle
// vector, if it crosses a periodic boundary
distmod = MAKE_FLOAT3(0.0, 0.0, 0.0);
- if (findDistModPorosity(&targetCell, &distmod) != -1) {
+ if (findDistMod(&targetCell, &distmod) != -1) {
// Calculate linear cell ID
cellID = targetCell.x
t@@ -767,7 +775,7 @@ __global__ void findDarcyPorosities(
// Get distance modifier for interparticle
// vector, if it crosses a periodic boundary
distmod = MAKE_FLOAT3(0.0, 0.0, 0.0);
- if (findDistModPorosity(&targetCell, &distmod) != -1) {
+ if (findDistMod(&targetCell, &distmod) != -1) {
// Calculate linear cell ID
cellID = targetCell.x