XDMF2Writer: Source and Target Spaces specify different sizes for path: /Block_0_t000000/Topology
When writing an XDMF2 file with enough cells to trigger a heavy data file, e.g.,
import meshzoo
import numpy
import vtk
from vtk.util import numpy_support
points, cells = meshzoo.rectangle(
xmin=0.0, xmax=1.0,
ymin=0.0, ymax=1.0,
nx=6, ny=6
)
# Generate VTK mesh
mesh = vtk.vtkUnstructuredGrid()
# set points
vtk_points = vtk.vtkPoints()
# Not using a deep copy here results in a segfault.
vtk_array = numpy_support.numpy_to_vtk(points, deep=True)
vtk_points.SetData(vtk_array)
mesh.SetPoints(vtk_points)
# create cell_array. It's a one-dimensional vector with
# (num_points2, p0, p1, ... ,pk, numpoints1, p10, p11, ..., p1k, ...
numcells, num_local_nodes = cells.shape
# add cell types
cell_types = numpy.full(numcells, vtk.VTK_TRIANGLE, dtype=numpy.ubyte)
# add cell offsets
cell_offsets = numpy.arange(
0,
numcells * (num_local_nodes + 1),
num_local_nodes + 1,
dtype=numpy.int64
)
cell_connectivity = numpy.c_[
num_local_nodes * numpy.ones(numcells, dtype=cells.dtype),
cells
].flatten()
connectivity = vtk.util.numpy_support.numpy_to_vtkIdTypeArray(
cell_connectivity.astype(numpy.int64),
deep=1
)
# wrap the data into a vtkCellArray
cell_array = vtk.vtkCellArray()
cell_array.SetCells(len(cell_types), connectivity)
# Add cell data to the mesh
mesh.SetCells(
numpy_support.numpy_to_vtk(
cell_types,
deep=1,
array_type=vtk.vtkUnsignedCharArray().GetDataType()
),
numpy_support.numpy_to_vtk(
cell_offsets,
deep=1,
array_type=vtk.vtkIdTypeArray().GetDataType()
),
cell_array
)
writer = vtk.vtkXdmfWriter()
writer.SetFileName('test2.xdmf')
writer.SetInputData(mesh)
writer.Write()
the writer will error out with the message
XDMF Error in /build/vtk7-mPdZCv/vtk7-7.1.1-3cf5df73/ThirdParty/xdmf2/vtkxdmf2/libsrc/XdmfHDF.cxx line 606 (Source and Target Spaces specify different sizes for path: /Block_0_t000000/Topology)
XDMF Error in /build/vtk7-mPdZCv/vtk7-7.1.1-3cf5df73/ThirdParty/xdmf2/vtkxdmf2/libsrc/XdmfHDF.cxx line 607 (Source = 60000 items)
XDMF Error in /build/vtk7-mPdZCv/vtk7-7.1.1-3cf5df73/ThirdParty/xdmf2/vtkxdmf2/libsrc/XdmfHDF.cxx line 608 (Target = 150 items)
XDMF Error in /build/vtk7-mPdZCv/vtk7-7.1.1-3cf5df73/ThirdParty/xdmf2/vtkxdmf2/libsrc/XdmfValuesHDF.cxx line 178 (Error Writing test2.h5:/Block_0_t000000/Topology)
XDMF Error in /build/vtk7-mPdZCv/vtk7-7.1.1-3cf5df73/ThirdParty/xdmf2/vtkxdmf2/libsrc/XdmfDataItem.cxx line 793 (Writing Values Failed)
XDMF Error in /build/vtk7-mPdZCv/vtk7-7.1.1-3cf5df73/ThirdParty/xdmf2/vtkxdmf2/libsrc/XdmfHDF.cxx line 606 (Source and Target Spaces specify different sizes for path: /Block_0_t000000/Geometry/Points)
XDMF Error in /build/vtk7-mPdZCv/vtk7-7.1.1-3cf5df73/ThirdParty/xdmf2/vtkxdmf2/libsrc/XdmfHDF.cxx line 607 (Source = 30000 items)
XDMF Error in /build/vtk7-mPdZCv/vtk7-7.1.1-3cf5df73/ThirdParty/xdmf2/vtkxdmf2/libsrc/XdmfHDF.cxx line 608 (Target = 108 items)
XDMF Error in /build/vtk7-mPdZCv/vtk7-7.1.1-3cf5df73/ThirdParty/xdmf2/vtkxdmf2/libsrc/XdmfValuesHDF.cxx line 178 (Error Writing test2.h5:/Block_0_t000000/Geometry/Points)
XDMF Error in /build/vtk7-mPdZCv/vtk7-7.1.1-3cf5df73/ThirdParty/xdmf2/vtkxdmf2/libsrc/XdmfDataItem.cxx line 793 (Writing Values Failed)
There are no problems with any other output file format I've tested (in particular XDMF3).