vtkExodusIIWriter: vtk int array converted to double
This issue was created automatically from an original Mantis Issue. Further discussion may take place here.
Writing an Int array to an exodus file, the data is incorrectly stored as double in the file. An MWE
import numpy
import vtk
from vtk.util import numpy_support
points = [
[0.0, 0.0, 0.0],
[1.0, 0.0, 0.0],
[1.0, 1.0, 0.0],
[0.0, 1.0, 0.0]
]
mesh = vtk.vtkUnstructuredGrid()
# set points
vtk_points = vtk.vtkPoints()
# Not using a deep copy here results in a segfault.
vtk_array = vtk.util.numpy_support.numpy_to_vtk(points)
vtk_points.SetData(vtk_array)
mesh.SetPoints(vtk_points)
# TODO use numpy_support here, avoid the copying
c = numpy.array([
3,
0, 1, 2,
3,
0, 2, 3
], dtype=int)
a = vtk.util.numpy_support.numpy_to_vtkIdTypeArray(c)
cell_array = vtk.vtkCellArray()
cell_array.SetCells(2, a)
mesh.SetCells(vtk.VTK_TRIANGLE, cell_array)
# add int point data
X = numpy.array([7, 8, 3, -2], dtype=int)
array = vtk.util.numpy_support.numpy_to_vtk(X)
array.SetName('X')
pd = mesh.GetPointData()
pd.AddArray(array)
writer = vtk.vtkExodusIIWriter()
writer.SetFileName('test.e')
writer.SetInput(mesh)
writer.Write()
The array X
is stored as double
in test.e
.
Edited by Mathieu Westphal (Kitware)