tfixed findDistMod function to allow search across periodic boundaries of more than 1 cell - 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 aed17f7c9168b1125b0334b6039383407f843718
 (DIR) parent 57d9c42669af9eb387f3053f3176a5ea9c3e4db4
 (HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
       Date:   Wed, 30 Apr 2014 11:47:53 +0200
       
       fixed findDistMod function to allow search across periodic boundaries of more than 1 cell
       
       Diffstat:
         M CMakeLists.txt                      |      10 +++++-----
         M src/contactsearch.cuh               |      31 ++++++++++++++++++-------------
         M src/navierstokes.cuh                |       1 +
       
       3 files changed, 24 insertions(+), 18 deletions(-)
       ---
 (DIR) diff --git a/CMakeLists.txt b/CMakeLists.txt
       t@@ -29,13 +29,13 @@ find_package(OpenMP)
        enable_testing()
        
        # Set build type = Debug
       -#set(CMAKE_BUILD_TYPE Debug)
       -#if (CUDA_FOUND)
       -#    set(CUDA_NVCC_FLAGS -g;-G)
       -#endif()
       +set(CMAKE_BUILD_TYPE Debug)
       +if (CUDA_FOUND)
       +    set(CUDA_NVCC_FLAGS -g;-G)
       +endif()
        
        # Set build type = Release
       -set(CMAKE_BUILD_TYPE Release)
       +#set(CMAKE_BUILD_TYPE Release)
        
        # Add source directory to project.
        add_subdirectory(src)
 (DIR) diff --git a/src/contactsearch.cuh b/src/contactsearch.cuh
       t@@ -18,21 +18,25 @@ __device__ int findDistMod(int3* targetCell, Float3* distmod)
        
                // Periodic x-boundary
                if (targetCell->x < 0) {
       -            targetCell->x = devC_grid.num[0] - 1;
       +            //targetCell->x = devC_grid.num[0] - 1;
       +            targetCell->x += devC_grid.num[0];
                    *distmod += MAKE_FLOAT3(devC_grid.L[0], 0.0f, 0.0f);
                }
       -        if (targetCell->x == devC_grid.num[0]) {
       -            targetCell->x = 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.0f, 0.0f);
                }
        
                // Periodic y-boundary
                if (targetCell->y < 0) {
       -            targetCell->y = devC_grid.num[1] - 1;
       +            //targetCell->y = devC_grid.num[1] - 1;
       +            targetCell->y += devC_grid.num[0];
                    *distmod += MAKE_FLOAT3(0.0f, devC_grid.L[1], 0.0f);
                }
       -        if (targetCell->y == devC_grid.num[1]) {
       -            targetCell->y = 0;
       +        if (targetCell->y >= devC_grid.num[1]) {
       +            //targetCell->y = 0;
       +            targetCell->y -= devC_grid.num[1];
                    *distmod -= MAKE_FLOAT3(0.0f, devC_grid.L[1], 0.0f);
                }
        
       t@@ -42,11 +46,13 @@ __device__ int findDistMod(int3* targetCell, Float3* distmod)
        
                // Periodic x-boundary
                if (targetCell->x < 0) {
       -            targetCell->x = devC_grid.num[0] - 1;
       +            //targetCell->x = devC_grid.num[0] - 1;
       +            targetCell->x += devC_grid.num[0];
                    *distmod += MAKE_FLOAT3(devC_grid.L[0], 0.0f, 0.0f);
                }
       -        if (targetCell->x == devC_grid.num[0]) {
       -            targetCell->x = 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.0f, 0.0f);
                }
        
       t@@ -66,11 +72,10 @@ __device__ int findDistMod(int3* targetCell, Float3* distmod)
            }
        
            // Handle out-of-grid cases on z-axis
       -    if (targetCell->z < 0 || targetCell->z == devC_grid.num[2])
       +    if (targetCell->z < 0 || targetCell->z >= devC_grid.num[2])
                return -1;
       -
       -    // Return successfully
       -    return 0;
       +    else
       +        return 0;
        }
        
        
 (DIR) diff --git a/src/navierstokes.cuh b/src/navierstokes.cuh
       t@@ -922,6 +922,7 @@ __global__ void findPorositiesVelocitiesDiametersSpherical(
        
                    // Iterate over 27 neighbor cells, R = 2*cell width
                    for (int z_dim=-2; z_dim<3; ++z_dim) { // z-axis
       +            //for (int z_dim=-1; z_dim<2; ++z_dim) { // z-axis
                        for (int y_dim=-2; y_dim<3; ++y_dim) { // y-axis
                            for (int x_dim=-2; x_dim<3; ++x_dim) { // x-axis