File: test_pyvista.py

package info (click to toggle)
io4dolfinx 1.1.2-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 832 kB
  • sloc: python: 8,419; sh: 29; makefile: 3
file content (50 lines) | stat: -rw-r--r-- 1,750 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from mpi4py import MPI

import dolfinx
import numpy as np
import pytest
import ufl

import io4dolfinx

pyvista = pytest.importorskip("pyvista")


def test_read_mesh_and_cell_data(tmp_path):
    tmp_path = MPI.COMM_WORLD.bcast(tmp_path, root=0)
    filename = tmp_path / "grid.vtu"
    grid = pyvista.examples.load_hexbeam()
    if MPI.COMM_WORLD.rank == 0:
        grid.save(filename)
    MPI.COMM_WORLD.barrier()

    mesh = io4dolfinx.read_mesh(filename, MPI.COMM_WORLD, backend="pyvista")

    vol = dolfinx.fem.form(1 * ufl.dx(domain=mesh))
    surf = dolfinx.fem.form(1 * ufl.ds(domain=mesh))

    vol_ref = 5 * 1 * 1
    surf_ref = 5 * 4 + 2

    vol_glob = mesh.comm.allreduce(dolfinx.fem.assemble_scalar(vol), op=MPI.SUM)
    surf_glob = mesh.comm.allreduce(dolfinx.fem.assemble_scalar(surf), op=MPI.SUM)
    assert np.isclose(vol_glob, vol_ref)
    assert np.isclose(surf_glob, surf_ref)

    names = io4dolfinx.read_function_names(filename, MPI.COMM_WORLD, backend="pyvista")
    for name in grid.cell_data.keys():
        assert name in names
    for name in grid.point_data.keys():
        assert name in names

    for name in names:
        if name in grid.cell_data.keys():
            cd = io4dolfinx.read_cell_data(filename, name, mesh, backend="pyvista")
            oci = mesh.topology.original_cell_index
            np.testing.assert_allclose(cd.x.array[:], grid.cell_data[name][oci])
        elif name in grid.point_data.keys():
            pd = io4dolfinx.read_point_data(filename, name, mesh, backend="pyvista")
            igi = mesh.geometry.input_global_indices
            np.testing.assert_allclose(pd.x.array[:], grid.point_data[name][igi])
        else:
            raise RuntimeError(f"Could not find {name} in grid")