From 6d9fc282cda71aa61daeeb5505b29327563f931a Mon Sep 17 00:00:00 2001 From: Frederik Hennig <frederik.hennig@fau.de> Date: Wed, 7 Oct 2020 10:54:05 +0200 Subject: [PATCH] Fix: Replaced accidental `continue` by `break` in boundaries/createindexlist.py --- pystencils/boundaries/createindexlist.py | 2 +- .../test_boundary_indexlist_creation.py | 77 +++++++++++++++++++ 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 pystencils_tests/test_boundary_indexlist_creation.py diff --git a/pystencils/boundaries/createindexlist.py b/pystencils/boundaries/createindexlist.py index a0ee87f3b..51bd5464f 100644 --- a/pystencils/boundaries/createindexlist.py +++ b/pystencils/boundaries/createindexlist.py @@ -51,7 +51,7 @@ def _create_boundary_neighbor_index_list_python(flag_field_arr, nr_of_ghost_laye if flag_field_arr[neighbor_cell] & boundary_mask: result.append(cell + (dir_idx,)) if single_link: - continue + break return np.array(result, dtype=index_arr_dtype) diff --git a/pystencils_tests/test_boundary_indexlist_creation.py b/pystencils_tests/test_boundary_indexlist_creation.py new file mode 100644 index 000000000..58c6a18f6 --- /dev/null +++ b/pystencils_tests/test_boundary_indexlist_creation.py @@ -0,0 +1,77 @@ +import numpy as np +from itertools import product +import pystencils.boundaries.createindexlist as cil + +import pytest + +@pytest.mark.parametrize('single_link', [False, True]) +@pytest.mark.skipif(not cil.cython_funcs_available, reason='Cython functions are not available') +def test_equivalence_cython_python_version(single_link): + # D2Q9 + stencil_2d = tuple((x,y) for x,y in product([-1, 0, 1], [-1, 0, 1])) + # D3Q19 + stencil_3d = tuple((x,y,z) for x,y,z in product([-1, 0, 1], [-1, 0, 1], [-1, 0, 1]) if abs(x) + abs(y) + abs(z) < 3) + + for dtype in [int, np.int16, np.uint32]: + fluid_mask = dtype(1) + mask = dtype(2) + flag_field_2d = np.ones([15, 16], dtype=dtype) * fluid_mask + flag_field_3d = np.ones([15, 16, 17], dtype=dtype) * fluid_mask + + flag_field_2d[0, :] = mask + flag_field_2d[-1, :] = mask + flag_field_2d[7, 7] = mask + + flag_field_3d[0, :, :] = mask + flag_field_3d[-1, :, :] = mask + flag_field_3d[7, 7, 7] = mask + + result_python_2d = cil._create_boundary_neighbor_index_list_python(flag_field_2d, 1, mask, fluid_mask, + stencil_2d, single_link) + + result_python_3d = cil._create_boundary_neighbor_index_list_python(flag_field_3d, 1, mask, fluid_mask, + stencil_3d, single_link) + + result_cython_2d = cil.create_boundary_index_list(flag_field_2d, stencil_2d, mask, + fluid_mask, 1, True, single_link) + result_cython_3d = cil.create_boundary_index_list(flag_field_3d, stencil_3d, mask, + fluid_mask, 1, True, single_link) + + np.testing.assert_equal(result_python_2d, result_cython_2d) + np.testing.assert_equal(result_python_3d, result_cython_3d) + +@pytest.mark.parametrize('single_link', [False, True]) +@pytest.mark.skipif(not cil.cython_funcs_available, reason='Cython functions are not available') +def test_equivalence_cell_idx_list_cython_python_version(single_link): + # D2Q9 + stencil_2d = tuple((x,y) for x,y in product([-1, 0, 1], [-1, 0, 1])) + # D3Q19 + stencil_3d = tuple((x,y,z) for x,y,z in product([-1, 0, 1], [-1, 0, 1], [-1, 0, 1]) if abs(x) + abs(y) + abs(z) < 3) + + for dtype in [int, np.int16, np.uint32]: + fluid_mask = dtype(1) + mask = dtype(2) + flag_field_2d = np.ones([15, 16], dtype=dtype) * fluid_mask + flag_field_3d = np.ones([15, 16, 17], dtype=dtype) * fluid_mask + + flag_field_2d[0, :] = mask + flag_field_2d[-1, :] = mask + flag_field_2d[7, 7] = mask + + flag_field_3d[0, :, :] = mask + flag_field_3d[-1, :, :] = mask + flag_field_3d[7, 7, 7] = mask + + result_python_2d = cil._create_boundary_cell_index_list_python(flag_field_2d, mask, fluid_mask, + stencil_2d, single_link) + + result_python_3d = cil._create_boundary_cell_index_list_python(flag_field_3d, mask, fluid_mask, + stencil_3d, single_link) + + result_cython_2d = cil.create_boundary_index_list(flag_field_2d, stencil_2d, mask, fluid_mask, None, + False, single_link) + result_cython_3d = cil.create_boundary_index_list(flag_field_3d, stencil_3d, mask, fluid_mask, None, + False, single_link) + + np.testing.assert_equal(result_python_2d, result_cython_2d) + np.testing.assert_equal(result_python_3d, result_cython_3d) -- GitLab