tghost node fix underway - 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 5fe93e0a63a2a3aee9ca74a41995943f8410b055
 (DIR) parent c78588fb16a62ac83d795931b11eb627e3301f87
 (HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
       Date:   Tue, 17 Jun 2014 09:49:57 +0200
       
       ghost node fix underway
       
       Diffstat:
         M src/navierstokes.cuh                |      10 ++++++----
         M tests/cfd_tests_neumann.py          |       2 +-
       
       2 files changed, 7 insertions(+), 5 deletions(-)
       ---
 (DIR) diff --git a/src/navierstokes.cuh b/src/navierstokes.cuh
       t@@ -645,6 +645,7 @@ __global__ void setNSghostNodes(
        // Update a field in the ghost nodes from their parent cell values. The edge
        // (diagonal) cells are not written since they are not read.
        // Launch per face.
       +// According to Griebel et al. 1998 "Numerical Simulation in Fluid Dynamics"
        template<typename T>
        __global__ void setNSghostNodesFace(
                T* dev_scalarfield_x,
       t@@ -671,7 +672,7 @@ __global__ void setNSghostNodesFace(
                const T val_y = dev_scalarfield_y[vidx(x,y,z)];
                const T val_z = dev_scalarfield_z[vidx(x,y,z)];
        
       -        // x
       +        // x (periodic)
                if (x == 0) {
                    dev_scalarfield_x[vidx(nx,y,z)] = val_x;
                    dev_scalarfield_y[vidx(nx,y,z)] = val_y;
       t@@ -686,7 +687,7 @@ __global__ void setNSghostNodesFace(
                    dev_scalarfield_z[vidx(-1,y,z)] = val_z;
                }
        
       -        // y
       +        // y (periodic)
                if (y == 0) {
                    dev_scalarfield_x[vidx(x,ny,z)] = val_x;
                    dev_scalarfield_y[vidx(x,ny,z)] = val_y;
       t@@ -707,7 +708,7 @@ __global__ void setNSghostNodesFace(
                    dev_scalarfield_y[vidx(x,y,-1)] = val_x;     // Dirichlet -z
                    dev_scalarfield_z[vidx(x,y,-1)] = val_z;     // Dirichlet -z
                }
       -        if (z == 1 && bc_bot == 1) {
       +        if (z == 0 && bc_bot == 1) {
                    dev_scalarfield_x[vidx(x,y,-1)] = val_x;     // Neumann -z
                    dev_scalarfield_y[vidx(x,y,-1)] = val_y;     // Neumann -z
                    dev_scalarfield_z[vidx(x,y,-1)] = val_z;     // Neumann -z
       t@@ -724,10 +725,11 @@ __global__ void setNSghostNodesFace(
                if (z == nz-1 && bc_top == 0) {
                    dev_scalarfield_z[vidx(x,y,nz)] = val_z;     // Dirichlet +z
                }
       -        if (z == nz-2 && bc_top == 1) {
       +        if (z == nz-1 && bc_top == 1) {
                    dev_scalarfield_x[vidx(x,y,nz)] = val_x;     // Neumann +z
                    dev_scalarfield_y[vidx(x,y,nz)] = val_y;     // Neumann +z
                    dev_scalarfield_z[vidx(x,y,nz)] = val_z;     // Neumann +z
       +            dev_scalarfield_z[vidx(x,y,nz+1)] = val_z;     // Neumann +z
                }
                if (z == nz-1 && bc_top == 2) {
                    dev_scalarfield_x[vidx(x,y,-1)] = val_x;     // Periodic +z
 (DIR) diff --git a/tests/cfd_tests_neumann.py b/tests/cfd_tests_neumann.py
       t@@ -62,4 +62,4 @@ else:
            print("Flow field:\t\t" + failed())
            raise Exception("Failed")
        
       -orig.cleanup()
       +#orig.cleanup()