tghost node fix underway - sphere - GPU-based 3D discrete element method algori… | |
git clone git://src.adamsgaard.dk/sphere | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit 5fe93e0a63a2a3aee9ca74a41995943f8410b055 | |
parent c78588fb16a62ac83d795931b11eb627e3301f87 | |
Author: Anders Damsgaard <[email protected]> | |
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(-) | |
--- | |
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 | |
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() |