tadded set of missing grid corner cell-face velocity ghost nodes - 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 4bec1d18160a4daf1e13f99c585a50d82431bfab
 (DIR) parent d7d0946e7d1804947c0bde50899be9407d14d561
 (HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
       Date:   Tue, 29 Jul 2014 14:10:54 +0200
       
       added set of missing grid corner cell-face velocity ghost nodes
       
       Diffstat:
         M src/navierstokes.cuh                |      92 ++++++++++++++++++++++++++++---
       
       1 file changed, 85 insertions(+), 7 deletions(-)
       ---
 (DIR) diff --git a/src/navierstokes.cuh b/src/navierstokes.cuh
       t@@ -690,6 +690,84 @@ __global__ void setNSghostNodesFace(
                    dev_scalarfield_z[vidx(-1,y,z)] = val_z;
                }
        
       +        // z ghost nodes at x = -1 and z = nz,
       +        // equal to the ghost node at x = nx-1 and z = nz
       +        if (z == nz-1 && x == nx-1 && bc_top == 0) // Dirichlet +z
       +            dev_scalarfield_z[vidx(-1,y,nz)] = val_z;
       +
       +        if (z == nz-1 && x == nx-1 && (bc_top == 1 || bc_top == 2)) //Neumann +z
       +            dev_scalarfield_z[vidx(-1,y,nz)] = 0.0;
       +
       +        if (z == 0 && x == nx-1 && bc_top == 3) // Periodic +z
       +            dev_scalarfield_z[vidx(-1,y,nz)] = val_z;
       +
       +        // z ghost nodes at y = -1 and z = nz,
       +        // equal to the ghost node at y = ny-1 and z = nz
       +        if (z == nz-1 && y == ny-1 && bc_top == 0) // Dirichlet +z
       +            dev_scalarfield_z[vidx(x,-1,nz)] = val_z;
       +
       +        if (z == nz-1 && y == ny-1 && (bc_top == 1 || bc_top == 2)) //Neumann +z
       +            dev_scalarfield_z[vidx(x,-1,nz)] = 0.0;
       +
       +        if (z == 0 && y == ny-1 && bc_top == 3) // Periodic +z
       +            dev_scalarfield_z[vidx(x,-1,nz)] = val_z;
       +
       +
       +        // x ghost nodes at x = nx and z = -1,
       +        // equal to the ghost nodes at x = 0 and z = -1
       +        // Dirichlet, Neumann free slip or periodic -z
       +        if (z == 0 && x == 0 && (bc_bot == 0 || bc_bot == 1 || bc_bot == 3))
       +            dev_scalarfield_x[vidx(nx,y,-1)] = val_x;
       +
       +        if (z == 0 && x == 0 && bc_bot == 2) // Neumann no slip -z
       +            dev_scalarfield_x[vidx(nx,y,-1)] = -val_x;
       +
       +        // y ghost nodes at y = ny and z = -1,
       +        // equal to the ghost node at x = 0 and z = -1
       +        // Dirichlet, Neumann free slip or periodic -z
       +        if (z == 0 && y == 0 && (bc_bot == 0 || bc_bot == 1 || bc_bot == 3))
       +            dev_scalarfield_y[vidx(x,ny,-1)] = val_y;
       +
       +        if (z == 0 && y == 0 && bc_bot == 2) // Neumann no slip -z
       +            dev_scalarfield_y[vidx(x,ny,-1)] = -val_y;
       +
       +
       +        // z ghost nodes at x = nx and z = nz
       +        // equal to the ghost node at x = 0 and z = nz
       +        if (z == nz-1 && x == 0 && (bc_top == 0 || bc_top == 3)) // D. or p. +z
       +            dev_scalarfield_z[vidx(nx,y,nz)] = val_z;
       +
       +        if (z == nz-1 && x == 0 && (bc_top == 1 || bc_top == 2)) // N. +z
       +            dev_scalarfield_z[vidx(nx,y,nz)] = 0.0;
       +
       +        // z ghost nodes at y = ny and z = nz
       +        // equal to the ghost node at y = 0 and z = nz
       +        if (z == nz-1 && y == 0 && (bc_top == 0 || bc_top == 3)) // D. or p. +z
       +            dev_scalarfield_z[vidx(x,ny,nz)] = val_z;
       +
       +        if (z == nz-1 && y == 0 && (bc_top == 1 || bc_top == 2)) // N. +z
       +            dev_scalarfield_z[vidx(x,ny,nz)] = 0.0;
       +
       +
       +        // x ghost nodes at x = nx and z = nz,
       +        // equal to the ghost nodes at x = 0 and z = nz
       +        // Dirichlet, Neumann free slip or periodic -z
       +        if (z == nz-1 && x == 0 && (bc_bot == 0 || bc_bot == 1 || bc_bot == 3))
       +            dev_scalarfield_x[vidx(nx,y,nz)] = val_x;
       +
       +        if (z == nz-1 && x == 0 && bc_bot == 2) // Neumann no slip -z
       +            dev_scalarfield_x[vidx(nx,y,nz)] = -val_x;
       +
       +        // y ghost nodes at y = ny and z = nz,
       +        // equal to the ghost nodes at y = 0 and z = nz
       +        // Dirichlet, Neumann free slip or periodic -z
       +        if (z == nz-1 && y == 0 && (bc_bot == 0 || bc_bot == 1 || bc_bot == 3))
       +            dev_scalarfield_y[vidx(x,ny,nz)] = val_y;
       +
       +        if (z == nz-1 && y == 0 && bc_bot == 2) // Neumann no slip -z
       +            dev_scalarfield_y[vidx(x,ny,nz)] = -val_y;
       +
       +
                // y (periodic)
                if (y == 0) {
                    dev_scalarfield_x[vidx(x,ny,z)] = val_x;
       t@@ -712,9 +790,9 @@ __global__ void setNSghostNodesFace(
                    dev_scalarfield_z[vidx(x,y,-1)] = val_z;     // Dirichlet -z
                }
                if (z == 0 && bc_bot == 1) {
       -            //dev_scalarfield_x[vidx(x,y,-1)] = val_x;     // Neumann free slip -z
       -            //dev_scalarfield_y[vidx(x,y,-1)] = val_y;     // Neumann free slip -z
       -            //dev_scalarfield_z[vidx(x,y,-1)] = val_z;     // Neumann free slip -z
       +            //dev_scalarfield_x[vidx(x,y,-1)] = val_x;   // Neumann free slip -z
       +            //dev_scalarfield_y[vidx(x,y,-1)] = val_y;   // Neumann free slip -z
       +            //dev_scalarfield_z[vidx(x,y,-1)] = val_z;   // Neumann free slip -z
                    dev_scalarfield_x[vidx(x,y,-1)] = val_x;     // Neumann free slip -z
                    dev_scalarfield_y[vidx(x,y,-1)] = val_y;     // Neumann free slip -z
                    dev_scalarfield_z[vidx(x,y,-1)] = 0.0;       // Neumann free slip -z
       t@@ -740,10 +818,10 @@ __global__ void setNSghostNodesFace(
                    dev_scalarfield_z[vidx(x,y,nz)] = val_z;     // Dirichlet +z
                }
                if (z == nz-1 && bc_top == 1) {
       -            //dev_scalarfield_x[vidx(x,y,nz)] = val_x;     // Neumann free slip +z
       -            //dev_scalarfield_y[vidx(x,y,nz)] = val_y;     // Neumann free slip +z
       -            //dev_scalarfield_z[vidx(x,y,nz)] = val_z;     // Neumann free slip +z
       -            //dev_scalarfield_z[vidx(x,y,nz+1)] = val_z;   // Neumann free slip +z
       +            //dev_scalarfield_x[vidx(x,y,nz)] = val_x;   // Neumann free slip +z
       +            //dev_scalarfield_y[vidx(x,y,nz)] = val_y;   // Neumann free slip +z
       +            //dev_scalarfield_z[vidx(x,y,nz)] = val_z;   // Neumann free slip +z
       +            //dev_scalarfield_z[vidx(x,y,nz+1)] = val_z; // Neumann free slip +z
                    dev_scalarfield_x[vidx(x,y,nz)] = val_x;     // Neumann free slip +z
                    dev_scalarfield_y[vidx(x,y,nz)] = val_y;     // Neumann free slip +z
                    dev_scalarfield_z[vidx(x,y,nz)] = 0.0;     // Neumann free slip +z