Пример #1
0
def test_interpolation_singular():
    """ test interpolation on singular dimensions """
    grid = UnitGrid([1])
    field = ScalarField(grid, data=3)

    # test constant boundary conditions
    bc = [{"type": "value", "value": 1}, {"type": "value", "value": 5}]
    x = np.linspace(0, 1, 7).reshape((7, 1))
    y = field.interpolate(x, method="numba", bc=bc)
    np.testing.assert_allclose(y, 1 + 4 * x.ravel())

    # test derivative boundary conditions
    bc = [{
        "type": "derivative",
        "value": -2
    }, {
        "type": "derivative",
        "value": 2
    }]
    x = np.linspace(0, 1, 7).reshape((7, 1))
    y = field.interpolate(x, method="numba", bc=bc)
    np.testing.assert_allclose(y, 2 + 2 * x.ravel())

    # test boundary interpolation
    for upper in [True, False]:
        val = field.get_boundary_values(axis=0, upper=upper, bc=[{"value": 1}])
        assert val == pytest.approx(1)
Пример #2
0
def test_corner_interpolation():
    """test whether the field can also be interpolated up to the corner of the grid"""
    grid = UnitGrid([1, 1], periodic=False)
    field = ScalarField(grid)
    field.set_ghost_cells({"value": 1})

    assert field.interpolate(np.array([0.5, 0.5])) == pytest.approx(0.0)
    assert field.interpolate(np.array([0.0, 0.5])) == pytest.approx(0.0)
    assert field.interpolate(np.array([0.5, 0.0])) == pytest.approx(0.0)
    assert field.interpolate(np.array([0.0, 0.0])) == pytest.approx(0.0)
Пример #3
0
def test_interpolation_mutable():
    """test interpolation on mutable fields"""
    grid = UnitGrid([2], periodic=True)
    field = ScalarField(grid)

    for backend in ["numba", "scipy"]:
        field.data = 1
        np.testing.assert_allclose(field.interpolate([0.5], backend=backend), 1)
        field.data = 2
        np.testing.assert_allclose(field.interpolate([0.5], backend=backend), 2)

    # test overwriting field values
    data = np.full_like(field.data, 3)
    intp = field.make_interpolator(backend="numba")
    np.testing.assert_allclose(intp(np.array([0.5]), data), 3)
Пример #4
0
def test_interpolation_inhomogeneous_bc():
    """test field interpolation with inhomogeneous boundary condition"""
    sf = ScalarField(UnitGrid([3, 3], periodic=False))
    x = 1 + np.random.random()
    bc = ["natural", {"type": "value", "value": "x"}]
    v = sf.interpolate([x, 0], backend="numba", bc=bc)
    assert x == pytest.approx(v)
Пример #5
0
def test_interpolation_singular():
    """test interpolation on singular dimensions"""
    grid = UnitGrid([1])
    field = ScalarField(grid, data=3)

    # test constant boundary conditions
    x = np.linspace(0, 1, 7).reshape((7, 1))
    y = field.interpolate(x, backend="numba")
    np.testing.assert_allclose(y, 3)
Пример #6
0
def test_complex_methods():
    """test special methods for complex data type"""
    grid = UnitGrid([2, 2])
    f = ScalarField(grid, 1j)
    for backend in ["scipy", "numba"]:
        val = f.interpolate([1, 1], backend=backend)
        np.testing.assert_allclose(val, np.array([1j, 1j]))

    f = ScalarField(grid, 1 + 2j)
    np.testing.assert_allclose(f.project("x").data, np.full((2,), 2 + 4j))
    np.testing.assert_allclose(f.slice({"x": 1}).data, np.full((2,), 1 + 2j))
Пример #7
0
def test_interpolation_singular():
    """test interpolation on singular dimensions"""
    grid = UnitGrid([1])
    field = ScalarField(grid, data=3)

    # test constant boundary conditions
    x = np.linspace(0, 1, 7).reshape((7, 1))
    y = field.interpolate(x, backend="numba")
    np.testing.assert_allclose(y, 3)

    # # test boundary interpolation
    for upper in [True, False]:
        val = field.get_boundary_values(axis=0, upper=upper, bc=[{"value": 1}])
        assert val == pytest.approx(1)