예제 #1
0
def TestXdmfConversion(dataInput, fileName):
    global CleanUpGood, timer
    fileName = OutputDir + fileName
    xdmfFile = fileName + ".xmf"
    hdf5File = fileName + ".h5"
    vtkFile = fileName + ".vtk"

    xWriter = vtk.vtkXdmf3Writer()
    xWriter.SetLightDataLimit(LightDataLimit)
    xWriter.WriteAllTimeStepsOn()
    xWriter.SetFileName(xdmfFile)
    xWriter.SetInputData(dataInput)
    timer.StartTimer()
    xWriter.Write()
    timer.StopTimer()
    print "vtkXdmf3Writer took", timer.GetElapsedTime(), "seconds to write",\
      xdmfFile

    ds = vtk.vtkDataSet.SafeDownCast(dataInput)
    if ds:
        dsw = vtk.vtkDataSetWriter()
        dsw.SetFileName(vtkFile)
        dsw.SetInputData(ds)
        dsw.Write()

    if not DoFilesExist(xdmfFile, None, None, False):
        message = "Writer did not create " + xdmfFile
        raiseErrorAndExit(message)

    xReader = vtk.vtkXdmf3Reader()
    xReader.SetFileName(xdmfFile)
    timer.StartTimer()
    xReader.Update()
    timer.StopTimer()
    print "vtkXdmf3Reader took", timer.GetElapsedTime(), "seconds to read",\
      xdmfFile

    rOutput = xReader.GetOutputDataObject(0)

    fail = DoDataObjectsDiffer(dataInput, rOutput)

    if fail:
        raiseErrorAndExit("Xdmf conversion test failed")
    else:
        if ds:
            DoFilesExist(xdmfFile, hdf5File, vtkFile, CleanUpGood)
        else:
            DoFilesExist(xdmfFile, hdf5File, None, CleanUpGood)
예제 #2
0
파일: VToXLoop.py 프로젝트: aeslaughter/VTK
def TestXdmfConversion(dataInput, fileName):
  global CleanUpGood, timer
  fileName = OutputDir + fileName
  xdmfFile = fileName + ".xmf"
  hdf5File = fileName + ".h5"
  vtkFile = fileName + ".vtk"

  xWriter = vtk.vtkXdmf3Writer()
  xWriter.SetLightDataLimit(LightDataLimit)
  xWriter.WriteAllTimeStepsOn()
  xWriter.SetFileName(xdmfFile)
  xWriter.SetInputData(dataInput)
  timer.StartTimer()
  xWriter.Write()
  timer.StopTimer()
  print "vtkXdmf3Writer took", timer.GetElapsedTime(), "seconds to write",\
    xdmfFile

  ds = vtk.vtkDataSet.SafeDownCast(dataInput)
  if ds:
    dsw = vtk.vtkDataSetWriter()
    dsw.SetFileName(vtkFile)
    dsw.SetInputData(ds)
    dsw.Write()

  if not DoFilesExist(xdmfFile, None, None, False):
    message = "Writer did not create " + xdmfFile
    raiseErrorAndExit(message)

  xReader = vtk.vtkXdmf3Reader()
  xReader.SetFileName(xdmfFile)
  timer.StartTimer()
  xReader.Update()
  timer.StopTimer()
  print "vtkXdmf3Reader took", timer.GetElapsedTime(), "seconds to read",\
    xdmfFile

  rOutput = xReader.GetOutputDataObject(0)

  fail = DoDataObjectsDiffer(dataInput, rOutput)

  if fail:
    raiseErrorAndExit("Xdmf conversion test failed")
  else:
    if ds:
      DoFilesExist(xdmfFile, hdf5File, vtkFile, CleanUpGood)
    else:
      DoFilesExist(xdmfFile, hdf5File, None, CleanUpGood)
예제 #3
0
"Iron/Iron_Protein.ImageData.Collection.xmf",
"Iron/Iron_Protein.RectilinearGrid.xmf",
"Iron/Iron_Protein.RectilinearGrid.Collection.xmf",
"Iron/Iron_Protein.StructuredGrid.xmf",
"Iron/Iron_Protein.StructuredGrid.Collection.xmf",
"Big/Scenario1_p1.xmf",
]

testfilenames = smallFiles

import sys
if "--do_big_files" in sys.argv:
  testfilenames = smallFiles + largeFiles

if __name__ == "__main__":
  for fname in testfilenames:
    xr = vtk.vtkXdmf3Reader()
    afname = "" + str(VTK_DATA_ROOT) + "/Data/XDMF/" + fname
    print "Trying ", afname
    xr.CanReadFile(afname)
    xr.SetFileName(afname)
    xr.UpdateInformation()
    xr.Update()
    ds = xr.GetOutputDataObject(0)
    if not ds:
      print "Got zero output from known good file"
      sys.exit(vtk.VTK_ERROR)
    #if res != vtk.VTK_OK:
    #  print "Could not read", afname
    #  sys.exit(vtk.VTK_ERROR)
예제 #4
0
"""
This test verifies that vtk's Xdmf reader will read a polyhedron sample file.
"""

import os, sys
import vtk
from vtk.util.misc import vtkGetDataRoot
VTK_DATA_ROOT = vtkGetDataRoot()

if __name__ == "__main__":
    fnameIn = "" + str(VTK_DATA_ROOT) + "/Data/XDMF/polyhedron.xmf"

    xr = vtk.vtkXdmf3Reader()
    xr.CanReadFile(fnameIn)
    xr.SetFileName(fnameIn)
    xr.UpdateInformation()
    xr.Update()
    ds = xr.GetOutputDataObject(0)
    if not ds:
        print "Got zero output from known good file"
        sys.exit(vtk.VTK_ERROR)

    print ds.GetCells()
    print ds.GetPoints()
예제 #5
0
def read(filetype, filename):
    import vtk
    from vtk.util import numpy_support

    def _read_data(data):
        """Extract numpy arrays from a VTK data set.
        """
        # Go through all arrays, fetch data.
        out = {}
        for k in range(data.GetNumberOfArrays()):
            array = data.GetArray(k)
            if array:
                array_name = array.GetName()
                out[array_name] = numpy.copy(
                    vtk.util.numpy_support.vtk_to_numpy(array))
        return out

    def _read_cells(vtk_mesh):
        data = numpy.copy(
            vtk.util.numpy_support.vtk_to_numpy(vtk_mesh.GetCells().GetData()))
        offsets = numpy.copy(
            vtk.util.numpy_support.vtk_to_numpy(
                vtk_mesh.GetCellLocationsArray()))
        types = numpy.copy(
            vtk.util.numpy_support.vtk_to_numpy(vtk_mesh.GetCellTypesArray()))

        # `data` is a one-dimensional vector with
        # (num_points0, p0, p1, ... ,pk, numpoints1, p10, p11, ..., p1k, ...
        # Translate it into the cells dictionary.
        cells = {}
        for vtk_type, meshio_type in vtk_to_meshio_type.items():
            # Get all offsets for vtk_type
            os = offsets[numpy.argwhere(types == vtk_type).transpose()[0]]
            num_cells = len(os)
            if num_cells > 0:
                if meshio_type == "polygon":
                    for idx_cell in range(num_cells):
                        num_pts = data[os[idx_cell]]
                        cell = data[os[idx_cell] + 1:os[idx_cell] + 1 +
                                    num_pts]
                        key = meshio_type + str(num_pts)
                        if key in cells:
                            cells[key] = numpy.vstack([cells[key], cell])
                        else:
                            cells[key] = cell
                else:
                    num_pts = data[os[0]]
                    # instantiate the array
                    arr = numpy.empty((num_cells, num_pts), dtype=int)
                    # store the num_pts entries after the offsets into the columns
                    # of arr
                    for k in range(num_pts):
                        arr[:, k] = data[os + k + 1]
                    cells[meshio_type] = arr

        return cells

    if filetype in ["vtk", "vtk-ascii", "vtk-binary"]:
        reader = vtk.vtkUnstructuredGridReader()
        reader.SetFileName(filename)
        reader.SetReadAllNormals(1)
        reader.SetReadAllScalars(1)
        reader.SetReadAllTensors(1)
        reader.SetReadAllVectors(1)
        reader.Update()
        vtk_mesh = reader.GetOutput()
    elif filetype in ["vtu", "vtu-ascii", "vtu-binary"]:
        reader = vtk.vtkXMLUnstructuredGridReader()
        reader.SetFileName(filename)
        reader.Update()
        vtk_mesh = reader.GetOutput()
    elif filetype in ["xdmf", "xdmf2"]:
        reader = vtk.vtkXdmfReader()
        reader.SetFileName(filename)
        reader.SetReadAllColorScalars(1)
        reader.SetReadAllFields(1)
        reader.SetReadAllNormals(1)
        reader.SetReadAllScalars(1)
        reader.SetReadAllTCoords(1)
        reader.SetReadAllTensors(1)
        reader.SetReadAllVectors(1)
        reader.Update()
        vtk_mesh = reader.GetOutputDataObject(0)
    elif filetype == "xdmf3":
        reader = vtk.vtkXdmf3Reader()
        reader.SetFileName(filename)
        reader.SetReadAllColorScalars(1)
        reader.SetReadAllFields(1)
        reader.SetReadAllNormals(1)
        reader.SetReadAllScalars(1)
        reader.SetReadAllTCoords(1)
        reader.SetReadAllTensors(1)
        reader.SetReadAllVectors(1)
        reader.Update()
        vtk_mesh = reader.GetOutputDataObject(0)
    else:
        assert filetype == "exodus", "Unknown file type '{}'.".format(filename)
        reader = vtk.vtkExodusIIReader()
        reader.SetFileName(filename)
        vtk_mesh = _read_exodusii_mesh(reader)

    # Explicitly extract points, cells, point data, field data
    points = numpy.copy(
        numpy_support.vtk_to_numpy(vtk_mesh.GetPoints().GetData()))
    cells = _read_cells(vtk_mesh)

    point_data = _read_data(vtk_mesh.GetPointData())
    field_data = _read_data(vtk_mesh.GetFieldData())

    cell_data = _read_data(vtk_mesh.GetCellData())
    # split cell_data by the cell type
    cd = {}
    index = 0
    for cell_type in cells:
        num_cells = len(cells[cell_type])
        cd[cell_type] = {}
        for name, array in cell_data.items():
            cd[cell_type][name] = array[index:index + num_cells]
        index += num_cells
    cell_data = cd

    return Mesh(points,
                cells,
                point_data=point_data,
                cell_data=cell_data,
                field_data=field_data)
예제 #6
0
def RunTest():
    fail = False

    print "TEST SET 1 - verify reader/writer work for range of canonical datasets"
    print MemUsage("Before starting TEST SET 1")
    dog = vtk.vtkDataObjectGenerator()
    i = 0
    for testObject in testObjects:
        fileName = "xdmfIOtest_" + str(i)
        print "Test vtk object", testObject
        dog.SetProgram(testObject)
        dog.Update()
        TestXdmfConversion(dog.GetOutput(), fileName)
        i += 1

    print "TEST SET 2 - verify reader/writer work for Graphs"
    print MemUsage("Before starting TEST SET 2")
    print "Test Graph data"
    gsrc = vtk.vtkRandomGraphSource()
    gsrc.DirectedOn()
    gsrc.Update()
    gFilePrefix = "xdmfIOtest_Graph"
    gFileName = OutputDir + gFilePrefix + ".xdmf"
    ghFileName = OutputDir + gFilePrefix + ".h5"
    xWriter = vtk.vtkXdmf3Writer()
    xWriter.SetLightDataLimit(LightDataLimit)
    xWriter.SetFileName(gFileName)
    xWriter.SetInputConnection(0, gsrc.GetOutputPort(0))
    timer.StartTimer()
    xWriter.Write()
    timer.StopTimer()
    print "vtkXdmf3Writer took", timer.GetElapsedTime(), "seconds to write",\
      gFileName
    xReader = vtk.vtkXdmf3Reader()
    xReader.SetFileName(gFileName)
    xReader.Update()
    rOutput = xReader.GetOutputDataObject(0)
    fail = DoDataObjectsDiffer(gsrc.GetOutputDataObject(0),
                               xReader.GetOutputDataObject(0))
    if fail:
        raiseErrorAndExit("Failed graph conversion test")
    if not DoFilesExist(gFileName, ghFileName, None, CleanUpGood):
        raiseErrorAndExit("Failed to write Graph file")

    print "TEST SET 3 - verify reader/writer handle time varying data"
    print MemUsage("Before starting TEST SET 3")
    print "Test temporal data"
    tsrc = vtk.vtkTimeSourceExample()
    tsrc.GrowingOn()
    tsrc.SetXAmplitude(2.0)
    tFilePrefix = "xdmfIOTest_Temporal"
    tFileName = OutputDir + tFilePrefix + ".xdmf"
    thFileName = OutputDir + tFilePrefix + ".h5"
    xWriter = vtk.vtkXdmf3Writer()
    xWriter.SetLightDataLimit(LightDataLimit)
    xWriter.WriteAllTimeStepsOn()
    xWriter.SetFileName(tFileName)
    xWriter.SetInputConnection(0, tsrc.GetOutputPort(0))
    timer.StartTimer()
    xWriter.Write()
    timer.StopTimer()
    print "vtkXdmf3Writer took", timer.GetElapsedTime(), "seconds to write",\
      tFileName
    xReader = vtk.vtkXdmf3Reader()
    xReader.SetFileName(tFileName)
    xReader.UpdateInformation()
    oi = xReader.GetOutputInformation(0)
    timerange = oi.Get(vtk.vtkCompositeDataPipeline.TIME_STEPS())
    ii = tsrc.GetOutputInformation(0)
    correcttimes = ii.Get(vtk.vtkCompositeDataPipeline.TIME_STEPS())

    #compare number of and values for temporal range
    if len(timerange) != len(correcttimes):
        print "timesteps failed"
        print timerange, "!=", correcttimes
        raiseErrorAndExit("Failed to get same times")
    for i in xrange(0, len(correcttimes)):
        if abs(abs(timerange[i]) - abs(correcttimes[i])) > 0.000001:
            print "time result failed"
            print timerange, "!=", correcttimes
            raiseErrorAndExit("Failed to get same times")

    #exercise temporal processing and compare geometric bounds at each tstep
    indices = range(0, len(timerange)) + range(len(timerange) - 2, -1, -1)
    for x in indices:
        xReader.GetExecutive().SetUpdateTimeStep(0, timerange[x])
        xReader.Update()
        obds = xReader.GetOutputDataObject(0).GetBounds()
        tsrc.GetExecutive().SetUpdateTimeStep(
            0, timerange[x] + 0.0001)  #workaround a precision bug in TSE
        tsrc.Update()
        ibds = tsrc.GetOutputDataObject(0).GetBounds()
        print timerange[x], obds
        for i in (0, 1, 2, 3, 4, 5):
            if abs(abs(obds[i]) - abs(ibds[i])) > 0.000001:
                print "time result failed"
                print obds, "!=", ibds
                raiseErrorAndExit("Failed to get same data for this timestep")
    fail = DoFilesExist(tFileName, thFileName, None, CleanUpGood)
    if not fail:
        raiseErrorAndExit("Failed Temporal Test")

    print MemUsage("End of Testing")
예제 #7
0
def read(filetype, filename):
    # pylint: disable=import-error
    import vtk
    from vtk.util import numpy_support

    def _read_data(data):
        '''Extract numpy arrays from a VTK data set.
        '''
        # Go through all arrays, fetch data.
        out = {}
        for k in range(data.GetNumberOfArrays()):
            array = data.GetArray(k)
            if array:
                array_name = array.GetName()
                out[array_name] = numpy.copy(
                    vtk.util.numpy_support.vtk_to_numpy(array)
                    )
        return out

    def _read_cells(vtk_mesh):
        data = numpy.copy(vtk.util.numpy_support.vtk_to_numpy(
                vtk_mesh.GetCells().GetData()
                ))
        offsets = numpy.copy(vtk.util.numpy_support.vtk_to_numpy(
                vtk_mesh.GetCellLocationsArray()
                ))
        types = numpy.copy(vtk.util.numpy_support.vtk_to_numpy(
                vtk_mesh.GetCellTypesArray()
                ))

        vtk_to_meshio_type = {
            vtk.VTK_VERTEX: 'vertex',
            vtk.VTK_LINE: 'line',
            vtk.VTK_TRIANGLE: 'triangle',
            vtk.VTK_QUAD: 'quad',
            vtk.VTK_TETRA: 'tetra',
            vtk.VTK_HEXAHEDRON: 'hexahedron',
            vtk.VTK_WEDGE: 'wedge',
            vtk.VTK_PYRAMID: 'pyramid'
            }

        # `data` is a one-dimensional vector with
        # (num_points0, p0, p1, ... ,pk, numpoints1, p10, p11, ..., p1k, ...
        # Translate it into the cells dictionary.
        cells = {}
        for vtk_type, meshio_type in vtk_to_meshio_type.items():
            # Get all offsets for vtk_type
            os = offsets[numpy.argwhere(types == vtk_type).transpose()[0]]
            num_cells = len(os)
            if num_cells > 0:
                num_pts = data[os[0]]
                # instantiate the array
                arr = numpy.empty((num_cells, num_pts), dtype=int)
                # sort the num_pts entries after the offsets into the columns
                # of arr
                for k in range(num_pts):
                    arr[:, k] = data[os+k+1]
                cells[meshio_type] = arr

        return cells

    if filetype in ['vtk', 'vtk-ascii', 'vtk-binary']:
        reader = vtk.vtkUnstructuredGridReader()
        reader.SetFileName(filename)
        reader.Update()
        vtk_mesh = reader.GetOutput()
    elif filetype in ['vtu', 'vtu-ascii', 'vtu-binary']:
        reader = vtk.vtkXMLUnstructuredGridReader()
        reader.SetFileName(filename)
        reader.Update()
        vtk_mesh = reader.GetOutput()
    elif filetype in ['xdmf', 'xdmf2']:
        reader = vtk.vtkXdmfReader()
        reader.SetFileName(filename)
        reader.Update()
        vtk_mesh = reader.GetOutputDataObject(0)
    elif filetype == 'xdmf3':
        reader = vtk.vtkXdmf3Reader()
        reader.SetFileName(filename)
        reader.Update()
        vtk_mesh = reader.GetOutputDataObject(0)
    else:
        assert filetype == 'exodus', \
            'Unknown file type \'{}\'.'.format(filename)
        reader = vtk.vtkExodusIIReader()
        reader.SetFileName(filename)
        vtk_mesh = _read_exodusii_mesh(reader)

    # Explicitly extract points, cells, point data, field data
    points = numpy.copy(numpy_support.vtk_to_numpy(
            vtk_mesh.GetPoints().GetData()
            ))
    cells = _read_cells(vtk_mesh)

    point_data = _read_data(vtk_mesh.GetPointData())
    field_data = _read_data(vtk_mesh.GetFieldData())

    cell_data = _read_data(vtk_mesh.GetCellData())
    # split cell_data by the cell type
    cd = {}
    index = 0
    for cell_type in cells:
        num_cells = len(cells[cell_type])
        cd[cell_type] = {}
        for name, array in cell_data.items():
            cd[cell_type][name] = array[index:index+num_cells]
        index += num_cells
    cell_data = cd

    return points, cells, point_data, cell_data, field_data
예제 #8
0
파일: VToXLoop.py 프로젝트: aeslaughter/VTK
def RunTest():
  fail = False

  print "TEST SET 1 - verify reader/writer work for range of canonical datasets"
  print MemUsage("Before starting TEST SET 1")
  dog = vtk.vtkDataObjectGenerator()
  i = 0
  for testObject in testObjects:
    fileName = "xdmfIOtest_" + str(i)
    print "Test vtk object", testObject
    dog.SetProgram(testObject)
    dog.Update()
    TestXdmfConversion(dog.GetOutput(), fileName)
    i += 1

  print "TEST SET 2 - verify reader/writer work for Graphs"
  print MemUsage("Before starting TEST SET 2")
  print "Test Graph data"
  gsrc = vtk.vtkRandomGraphSource()
  gsrc.DirectedOn()
  gsrc.Update()
  gFilePrefix = "xdmfIOtest_Graph"
  gFileName = OutputDir + gFilePrefix + ".xdmf"
  ghFileName = OutputDir + gFilePrefix + ".h5"
  xWriter = vtk.vtkXdmf3Writer()
  xWriter.SetLightDataLimit(LightDataLimit)
  xWriter.SetFileName(gFileName)
  xWriter.SetInputConnection(0, gsrc.GetOutputPort(0))
  timer.StartTimer()
  xWriter.Write()
  timer.StopTimer()
  print "vtkXdmf3Writer took", timer.GetElapsedTime(), "seconds to write",\
    gFileName
  xReader = vtk.vtkXdmf3Reader()
  xReader.SetFileName(gFileName)
  xReader.Update()
  rOutput = xReader.GetOutputDataObject(0)
  fail = DoDataObjectsDiffer(gsrc.GetOutputDataObject(0), xReader.GetOutputDataObject(0))
  if fail:
    raiseErrorAndExit("Failed graph conversion test")
  if not DoFilesExist(gFileName, ghFileName, None, CleanUpGood):
    raiseErrorAndExit("Failed to write Graph file")

  print "TEST SET 3 - verify reader/writer handle time varying data"
  print MemUsage("Before starting TEST SET 3")
  print "Test temporal data"
  tsrc = vtk.vtkTimeSourceExample()
  tsrc.GrowingOn()
  tsrc.SetXAmplitude(2.0)
  tFilePrefix = "xdmfIOTest_Temporal"
  tFileName = OutputDir + tFilePrefix + ".xdmf"
  thFileName = OutputDir + tFilePrefix + ".h5"
  xWriter = vtk.vtkXdmf3Writer()
  xWriter.SetLightDataLimit(LightDataLimit)
  xWriter.WriteAllTimeStepsOn()
  xWriter.SetFileName(tFileName)
  xWriter.SetInputConnection(0, tsrc.GetOutputPort(0))
  timer.StartTimer()
  xWriter.Write()
  timer.StopTimer()
  print "vtkXdmf3Writer took", timer.GetElapsedTime(), "seconds to write",\
    tFileName
  xReader = vtk.vtkXdmf3Reader()
  xReader.SetFileName(tFileName)
  xReader.UpdateInformation()
  oi = xReader.GetOutputInformation(0)
  timerange = oi.Get(vtk.vtkCompositeDataPipeline.TIME_STEPS())
  ii = tsrc.GetOutputInformation(0)
  correcttimes = ii.Get(vtk.vtkCompositeDataPipeline.TIME_STEPS())

  #compare number of and values for temporal range
  if len(timerange) != len(correcttimes):
    print "timesteps failed"
    print timerange, "!=", correcttimes
    raiseErrorAndExit("Failed to get same times")
  for i in xrange(0, len(correcttimes)):
    if abs(abs(timerange[i])-abs(correcttimes[i])) > 0.000001:
      print "time result failed"
      print timerange, "!=", correcttimes
      raiseErrorAndExit("Failed to get same times")

  #exercise temporal processing and compare geometric bounds at each tstep
  indices = range(0,len(timerange)) + range(len(timerange)-2,-1,-1)
  for x in indices:
      xReader.UpdateTimeStep(timerange[x])
      obds = xReader.GetOutputDataObject(0).GetBounds()
      tsrc.Update(timerange[x]+0.0001) #workaround a precision bug in TSE
      ibds = tsrc.GetOutputDataObject(0).GetBounds()
      print timerange[x], obds
      for i in (0,1,2,3,4,5):
        if abs(abs(obds[i])-abs(ibds[i])) > 0.000001:
          print "time result failed"
          print obds, "!=", ibds
          raiseErrorAndExit("Failed to get same data for this timestep")
  fail = DoFilesExist(tFileName, thFileName, None, CleanUpGood)
  if not fail:
    raiseErrorAndExit("Failed Temporal Test")

  print MemUsage("End of Testing")