Пример #1
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)
Пример #2
0
def test_poisson_solver_1d():
    """ test the poisson solver on 1d grids """
    # solve Laplace's equation
    grid = UnitGrid([4])
    field = ScalarField(grid)
    res = field.solve_poisson([{"value": -1}, {"value": 3}])
    np.testing.assert_allclose(res.data, grid.axes_coords[0] - 1)

    res = field.solve_poisson([{"value": -1}, {"derivative": 1}])
    np.testing.assert_allclose(res.data, grid.axes_coords[0] - 1)

    # test Poisson equation with 2nd Order BC
    res = field.solve_poisson([{"value": -1}, "extrapolate"])

    # solve Poisson's equation
    grid = CartesianGrid([[0, 1]], 4)
    field = ScalarField(grid, data=1)

    res = field.copy()
    field.solve_poisson([{"value": 1}, {"derivative": 1}], out=res)
    xs = grid.axes_coords[0]
    np.testing.assert_allclose(res.data, 1 + 0.5 * xs**2, rtol=1e-2)

    # test inconsistent problem
    field.data = 1
    with pytest.raises(RuntimeError, match="Neumann"):
        field.solve_poisson({"derivative": 0})
Пример #3
0
def test_insert_scalar(example_grid):
    """test the `insert` method"""
    f = ScalarField(example_grid)
    a = np.random.random()

    c = tuple(example_grid.point_to_cell(example_grid.get_random_point()))
    p = example_grid.cell_to_point(c, cartesian=False)
    f.insert(p, a)
    assert f.data[c] == pytest.approx(a / example_grid.cell_volumes[c])

    f.insert(example_grid.get_random_point(cartesian=False), a)
    assert f.integral == pytest.approx(2 * a)

    f.data = 0  # reset
    insert = example_grid.make_inserter_compiled()
    c = tuple(example_grid.point_to_cell(example_grid.get_random_point()))
    p = example_grid.cell_to_point(c, cartesian=False)
    insert(f.data, p, a)
    assert f.data[c] == pytest.approx(a / example_grid.cell_volumes[c])

    insert(f.data, example_grid.get_random_point(cartesian=False), a)
    assert f.integral == pytest.approx(2 * a)
Пример #4
0
def test_insert_scalar(grid):
    """test the `insert` method"""
    f = ScalarField(grid)
    a = np.random.random()

    c = tuple(grid.get_random_point(coords="cell"))
    p = grid.transform(c, "cell", "grid")
    f.insert(p, a)
    assert f.data[c] == pytest.approx(a / grid.cell_volumes[c])

    f.insert(grid.get_random_point(coords="grid"), a)
    assert f.integral == pytest.approx(2 * a)

    f.data = 0  # reset
    insert = grid.make_inserter_compiled()
    c = tuple(grid.get_random_point(coords="cell"))
    p = grid.transform(c, "cell", "grid")
    insert(f.data, p, a)
    assert f.data[c] == pytest.approx(a / grid.cell_volumes[c])

    insert(f.data, grid.get_random_point(coords="grid"), a)
    assert f.integral == pytest.approx(2 * a)