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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
import numpy as np
import pytest
import meshio
from . import helpers
test_set_full = [
helpers.empty_mesh,
helpers.line_mesh,
helpers.tri_mesh,
helpers.line_tri_mesh,
helpers.tri_mesh_2d,
helpers.triangle6_mesh,
helpers.quad_mesh,
helpers.quad8_mesh,
helpers.tri_quad_mesh,
helpers.tet_mesh,
helpers.tet10_mesh,
helpers.hex_mesh,
helpers.hex20_mesh,
helpers.pyramid_mesh,
helpers.wedge_mesh,
helpers.add_point_data(helpers.tri_mesh, 1),
helpers.add_cell_data(helpers.tri_mesh, [("a", (), np.float64)]),
]
test_set_reduced = [
helpers.tri_mesh,
helpers.tri_mesh_2d,
helpers.quad_mesh,
helpers.tri_quad_mesh,
helpers.tet_mesh,
helpers.hex_mesh,
helpers.add_point_data(helpers.tri_mesh, 1),
helpers.add_cell_data(helpers.tri_mesh, [("a", (), np.float64)]),
]
@pytest.mark.parametrize("mesh", test_set_full)
@pytest.mark.parametrize(
"kwargs0",
[
{"data_format": "XML"},
{"data_format": "Binary"},
{"data_format": "HDF", "compression": None},
{"data_format": "HDF", "compression": "gzip"},
],
)
def test_xdmf3(mesh, kwargs0, tmp_path):
def write(*args, **kwargs):
return meshio.xdmf.write(*args, **{**kwargs0, **kwargs})
helpers.write_read(tmp_path, write, meshio.xdmf.read, mesh, 1.0e-14)
def test_generic_io(tmp_path):
helpers.generic_io(tmp_path / "test.xdmf")
# With additional, insignificant suffix:
helpers.generic_io(tmp_path / "test.0.xdmf")
@pytest.mark.parametrize("mesh", [mesh for mesh in test_set_full if mesh != helpers.empty_mesh])
def test_time_series(mesh):
# write the data
filename = "out.xdmf"
with meshio.xdmf.TimeSeriesWriter(filename) as writer:
writer.write_points_cells(mesh.points, mesh.cells)
n = mesh.points.shape[0]
times = np.linspace(0.0, 1.0, 5)
point_data = [
{
"phi": np.full(n, t),
"u": np.full(mesh.points.shape, t),
}
for t in times
]
cell_data = [
{
"a": [np.full(c.data.shape[0], t) for c in mesh.cells],
"b": [np.full(c.data.shape[0], t) for c in mesh.cells]
}
for t in times
]
for t, pd, cd in zip(times, point_data, cell_data):
writer.write_data(
t, point_data=pd, cell_data=cd
)
# read it back in
with meshio.xdmf.TimeSeriesReader(filename) as reader:
points, cells = reader.read_points_cells()
for k in range(reader.num_steps):
t, pd, cd = reader.read_data(k)
assert np.abs(times[k] - t) < 1.0e-12
for key, value in pd.items():
assert np.all(np.abs(value - point_data[k][key]) < 1.0e-12)
# def test_information_xdmf():
# mesh_out = meshio.Mesh(
# np.array(
# [[0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [1.0, 1.0, 0.0], [0.0, 1.0, 0.0]]
# )
# / 3,
# [("triangle", np.array([[0, 1, 2], [0, 2, 3]]))],
# field_data={
# "bottom": np.array([1, 1]),
# "right": np.array([2, 1]),
# "top": np.array([3, 1]),
# "left": np.array([4, 1]),
# },
# )
# # write the data
# points, cells, field_data = mesh_out.points, mesh_out.cells, mesh_out.field_data
#
# assert cells[0].type == "triangle"
# meshio.write(
# "mesh.xdmf",
# meshio.Mesh(points=points, cells=[cells[0]], field_data=field_data),
# )
#
# # read it back in
# mesh_in = meshio.read("mesh.xdmf")
# assert len(mesh_in.field_data) == len(mesh_out.field_data)
if __name__ == "__main__":
test_time_series()
|