Skip to content
Snippets Groups Projects
Commit d3a1c41a authored by Martin Bauer's avatar Martin Bauer
Browse files

Added pystencils boundary condition test + bug fix in boundary code

parent eb52e10d
No related merge requests found
from pystencils.boundaries.boundaryhandling import BoundaryHandling from pystencils.boundaries.boundaryhandling import BoundaryHandling
from pystencils.boundaries.boundaryconditions import Neumann
from pystencils.boundaries.inkernel import add_neumann_boundary
...@@ -29,7 +29,7 @@ class Boundary(object): ...@@ -29,7 +29,7 @@ class Boundary(object):
"""Return a list of (name, type) tuples for additional data items required in this boundary """Return a list of (name, type) tuples for additional data items required in this boundary
These data items can either be initialized in separate kernel see additional_data_kernel_init or by These data items can either be initialized in separate kernel see additional_data_kernel_init or by
Python callbacks - see additional_data_callback """ Python callbacks - see additional_data_callback """
return [] return ()
@property @property
def additional_data_init_callback(self): def additional_data_init_callback(self):
......
...@@ -28,7 +28,7 @@ def create_boundary_index_list_2d(object[IntegerType, ndim=2] flag_field, ...@@ -28,7 +28,7 @@ def create_boundary_index_list_2d(object[IntegerType, ndim=2] flag_field,
for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers): for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers): for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
if flag_field[x, y] & fluid_mask: if flag_field[x, y] & fluid_mask:
for dirIdx in range(1, num_directions): for dirIdx in range(num_directions):
dx = stencil[dirIdx,0] dx = stencil[dirIdx,0]
dy = stencil[dirIdx,1] dy = stencil[dirIdx,1]
if flag_field[x + dx, y + dy] & boundary_mask: if flag_field[x + dx, y + dy] & boundary_mask:
...@@ -38,25 +38,25 @@ def create_boundary_index_list_2d(object[IntegerType, ndim=2] flag_field, ...@@ -38,25 +38,25 @@ def create_boundary_index_list_2d(object[IntegerType, ndim=2] flag_field,
@cython.boundscheck(False) # turn off bounds-checking for entire function @cython.boundscheck(False) # turn off bounds-checking for entire function
@cython.wraparound(False) # turn off negative index wrapping for entire function @cython.wraparound(False) # turn off negative index wrapping for entire function
def create_boundary_index_list_3d(object[IntegerType, ndim=3] flagField, def create_boundary_index_list_3d(object[IntegerType, ndim=3] flag_field,
int nrOfGhostLayers, IntegerType boundaryMask, IntegerType fluidMask, int nr_of_ghost_layers, IntegerType boundary_mask, IntegerType fluid_mask,
object[int, ndim=2] stencil): object[int, ndim=2] stencil):
cdef int xs, ys, zs, x, y, z cdef int xs, ys, zs, x, y, z
cdef int dirIdx, num_directions, dx, dy, dz cdef int dirIdx, num_directions, dx, dy, dz
xs, ys, zs = flagField.shape xs, ys, zs = flag_field.shape
boundary_index_list = [] boundary_index_list = []
num_directions = stencil.shape[0] num_directions = stencil.shape[0]
for z in range(nrOfGhostLayers, zs-nrOfGhostLayers): for z in range(nr_of_ghost_layers, zs - nr_of_ghost_layers):
for y in range(nrOfGhostLayers,ys-nrOfGhostLayers): for y in range(nr_of_ghost_layers, ys - nr_of_ghost_layers):
for x in range(nrOfGhostLayers,xs-nrOfGhostLayers): for x in range(nr_of_ghost_layers, xs - nr_of_ghost_layers):
if flagField[x, y, z] & fluidMask: if flag_field[x, y, z] & fluid_mask:
for dirIdx in range(1, num_directions): for dirIdx in range(num_directions):
dx = stencil[dirIdx,0] dx = stencil[dirIdx,0]
dy = stencil[dirIdx,1] dy = stencil[dirIdx,1]
dz = stencil[dirIdx,2] dz = stencil[dirIdx,2]
if flagField[x + dx, y + dy, z + dz] & boundaryMask: if flag_field[x + dx, y + dy, z + dz] & boundary_mask:
boundary_index_list.append((x,y,z, dirIdx)) boundary_index_list.append((x,y,z, dirIdx))
return boundary_index_list return boundary_index_list
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment