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