tbegin implementation of non-periodic x/y boundaries - sphere - GPU-based 3D di… | |
git clone git://src.adamsgaard.dk/sphere | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit e53e2d38e92b46fc474ba331ad568026b3ee1cd2 | |
parent bf598ca922f970507d22b8e7af93fc08c32b5299 | |
Author: Anders Damsgaard Christensen <[email protected]> | |
Date: Thu, 11 Aug 2016 10:56:21 -0700 | |
begin implementation of non-periodic x/y boundaries | |
Diffstat: | |
M python/sphere.py | 15 ++++++++++++--- | |
M src/darcy.cuh | 34 +++++++++++++++++++++++------… | |
M src/version.h | 2 +- | |
3 files changed, 39 insertions(+), 12 deletions(-) | |
--- | |
diff --git a/python/sphere.py b/python/sphere.py | |
t@@ -23,8 +23,8 @@ else: | |
numpy.seterr(all='warn', over='raise') | |
# Sphere version number. This field should correspond to the value in | |
-# `../src/constants.h`. | |
-VERSION = 2.11 | |
+# `../src/version.h`. | |
+VERSION = 2.12 | |
# Transparency on plot legends | |
legend_alpha = 0.5 | |
t@@ -330,7 +330,7 @@ class sim: | |
self.p_mod_phi = numpy.zeros(1, dtype=numpy.float64) # Shift [rad] | |
# Boundary conditions at the top and bottom of the fluid grid | |
- # 0: Dirichlet | |
+ # 0: Dirichlet (default) | |
# 1: Neumann free slip | |
# 2: Neumann no slip | |
# 3: Periodic | |
t@@ -345,6 +345,15 @@ class sim: | |
self.bc_bot_flux = numpy.zeros(1, dtype=numpy.float64) | |
self.bc_top_flux = numpy.zeros(1, dtype=numpy.float64) | |
+ # Boundary conditions at the top and bottom of the fluid grid | |
+ # 0: Dirichlet | |
+ # 1: Neumann | |
+ # 2: Periodic (default) | |
+ # 3: Constant flux (Darcy solver only) | |
+ self.bc_xn = numpy.zeros(1, dtype=numpy.int32)*2 # Neg. x boundary | |
+ self.bc_xp = numpy.zeros(1, dtype=numpy.int32)*2 # Pos. x boundary | |
+ self.bc_yn = numpy.zeros(1, dtype=numpy.int32)*2 # Neg. y boundary | |
+ self.bc_yp = numpy.zeros(1, dtype=numpy.int32)*2 # Pos. y boundary | |
## Solver parameters | |
diff --git a/src/darcy.cuh b/src/darcy.cuh | |
t@@ -223,16 +223,34 @@ __global__ void setDarcyGhostNodes( | |
const T val = dev_scalarfield[d_idx(x,y,z)]; | |
// x | |
- if (x == 0) | |
- dev_scalarfield[idx(nx,y,z)] = val; | |
- if (x == nx-1) | |
- dev_scalarfield[idx(-1,y,z)] = val; | |
+ if (x == 0 && bc_xn == 0) | |
+ dev_scalarfield[idx(-1,y,z)] = val; // Dirichlet | |
+ if (x == 1 && bc_xn == 1) | |
+ dev_scalarfield[idx(-1,y,z)] = val; // Neumann | |
+ if (x == 0 && bc_xn == 2) | |
+ dev_scalarfield[idx(nx,y,z)] = val; // Periodic -y | |
+ | |
+ if (x == nx-1 && bc_xp == 0) | |
+ dev_scalarfield[idx(nx,y,z)] = val; // Dirichlet | |
+ if (x == nx-2 && bc_xp == 1) | |
+ dev_scalarfield[idx(nx,y,z)] = val; // Neumann | |
+ if (x == nx-1 && bc_xp == 2) | |
+ dev_scalarfield[idx(-1,y,z)] = val; // Periodic +x | |
// y | |
- if (y == 0) | |
- dev_scalarfield[idx(x,ny,z)] = val; | |
- if (y == ny-1) | |
- dev_scalarfield[idx(x,-1,z)] = val; | |
+ if (y == 0 && bc_yn == 0) | |
+ dev_scalarfield[idx(x,-1,z)] = val; // Dirichlet | |
+ if (y == 1 && bc_yn == 1) | |
+ dev_scalarfield[idx(x,-1,z)] = val; // Neumann | |
+ if (y == 0 && bc_yn == 2) | |
+ dev_scalarfield[idx(x,ny,z)] = val; // Periodic -y | |
+ | |
+ if (y == ny-1 && bc_yp == 0) | |
+ dev_scalarfield[idx(x,ny,z)] = val; // Dirichlet | |
+ if (y == ny-2 && bc_yp == 1) | |
+ dev_scalarfield[idx(x,ny,z)] = val; // Neumann | |
+ if (y == ny-1 && bc_yp == 2) | |
+ dev_scalarfield[idx(x,-1,z)] = val; // Periodic +y | |
// z | |
if (z == 0 && bc_bot == 0) | |
diff --git a/src/version.h b/src/version.h | |
t@@ -2,6 +2,6 @@ | |
#define VERSION_H_ | |
// Define source code version | |
-const double VERSION = 2.11; | |
+const double VERSION = 2.12; | |
#endif |