def test_inhomogeneous_bcs(): """ test inhomogeneous boundary conditions """ g = UnitGrid([2, 2]) data = np.ones((2, 2)) # first order bc bc_x = BCBase.from_data(g, 0, True, {"value": "y"}) assert isinstance(str(bc_x), str) assert bc_x.rank == 0 assert bc_x.get_virtual_point(data, (1, 0)) == pytest.approx(0) assert bc_x.get_virtual_point(data, (1, 1)) == pytest.approx(2) # second order bc bc_x = BCBase.from_data(g, 0, True, {"curvature": "y"}) assert isinstance(str(bc_x), str) assert bc_x.rank == 0 assert bc_x.get_virtual_point(data, (1, 0)) == pytest.approx(1.5) assert bc_x.get_virtual_point(data, (1, 1)) == pytest.approx(2.5) ev = bc_x.make_virtual_point_evaluator() assert ev(data, (1, 0)) == pytest.approx(1.5) assert ev(data, (1, 1)) == pytest.approx(2.5) ev = bc_x.make_adjacent_evaluator() assert ev(*_get_arr_1d(data, (0, 0), axis=0)) == pytest.approx(1) assert ev(*_get_arr_1d(data, (0, 1), axis=0)) == pytest.approx(1) assert ev(*_get_arr_1d(data, (1, 0), axis=0)) == pytest.approx(1.5) assert ev(*_get_arr_1d(data, (1, 1), axis=0)) == pytest.approx(2.5) # test lower bc bc_x = BCBase.from_data(g, 0, False, {"curvature": "y"}) ev = bc_x.make_adjacent_evaluator() assert ev(*_get_arr_1d(data, (1, 0), axis=0)) == pytest.approx(1) assert ev(*_get_arr_1d(data, (1, 1), axis=0)) == pytest.approx(1) assert ev(*_get_arr_1d(data, (0, 0), axis=0)) == pytest.approx(1.5) assert ev(*_get_arr_1d(data, (0, 1), axis=0)) == pytest.approx(2.5)
def test_get_arr_1d(): """ test the _get_arr_1d function """ # 1d a = np.arange(3) arr_1d, i, bc_idx = _get_arr_1d(a, [1], 0) assert i == 1 assert bc_idx == (...,) np.testing.assert_equal(arr_1d, a) # 2d a = np.arange(4).reshape(2, 2) arr_1d, i, bc_idx = _get_arr_1d(a, [0, 0], 0) assert i == 0 assert bc_idx == (..., 0) np.testing.assert_equal(arr_1d, a[:, 0]) arr_1d, i, bc_idx = _get_arr_1d(a, [1, 1], 1) assert i == 1 assert bc_idx == (..., 1) np.testing.assert_equal(arr_1d, a[1, :]) # 3d a = np.arange(8).reshape(2, 2, 2) arr_1d, i, bc_idx = _get_arr_1d(a, [0, 0, 0], 0) assert i == 0 assert bc_idx == (..., 0, 0) np.testing.assert_equal(arr_1d, a[:, 0, 0]) arr_1d, i, bc_idx = _get_arr_1d(a, [1, 1, 0], 1) assert i == 1 assert bc_idx == (..., 1, 0) np.testing.assert_equal(arr_1d, a[1, :, 0]) arr_1d, i, bc_idx = _get_arr_1d(a, [1, 1, 0], 2) assert i == 0 assert bc_idx == (..., 1, 1) np.testing.assert_equal(arr_1d, a[1, 1, :])