コード例 #1
0
ファイル: legacy_writer.py プロジェクト: gdmcbain/meshio
def _get_writer(filetype, filename):
    import vtk

    if filetype in "vtk-ascii":
        logging.warning("VTK ASCII files are only meant for debugging.")
        writer = vtk.vtkUnstructuredGridWriter()
        writer.SetFileTypeToASCII()
    elif filetype == "vtk-binary":
        writer = vtk.vtkUnstructuredGridWriter()
        writer.SetFileTypeToBinary()
    elif filetype == "vtu-ascii":
        logging.warning("VTU ASCII files are only meant for debugging.")
        writer = vtk.vtkXMLUnstructuredGridWriter()
        writer.SetDataModeToAscii()
    elif filetype == "vtu-binary":
        writer = vtk.vtkXMLUnstructuredGridWriter()
        writer.SetDataModeToBinary()
    elif filetype == "xdmf2":
        writer = vtk.vtkXdmfWriter()
    elif filetype == "xdmf3":
        writer = vtk.vtkXdmf3Writer()
    else:
        assert filetype == "exodus", "Unknown file type '{}'.".format(filename)
        writer = vtk.vtkExodusIIWriter()
        # if the mesh contains vtkmodeldata information, make use of it
        # and write out all time steps.
        writer.WriteAllTimeStepsOn()

    return writer
コード例 #2
0
def _get_writer(filetype, filename):
    import vtk

    if filetype in "vtk-ascii":
        logging.warning("VTK ASCII files are only meant for debugging.")
        writer = vtk.vtkUnstructuredGridWriter()
        writer.SetFileTypeToASCII()
    elif filetype == "vtk-binary":
        writer = vtk.vtkUnstructuredGridWriter()
        writer.SetFileTypeToBinary()
    elif filetype == "vtu-ascii":
        logging.warning("VTU ASCII files are only meant for debugging.")
        writer = vtk.vtkXMLUnstructuredGridWriter()
        writer.SetDataModeToAscii()
    elif filetype == "vtu-binary":
        writer = vtk.vtkXMLUnstructuredGridWriter()
        writer.SetDataModeToBinary()
    elif filetype == "xdmf2":
        writer = vtk.vtkXdmfWriter()
    elif filetype == "xdmf3":
        writer = vtk.vtkXdmf3Writer()
    else:
        assert filetype == "exodus", "Unknown file type '{}'.".format(filename)
        writer = vtk.vtkExodusIIWriter()
        # if the mesh contains vtkmodeldata information, make use of it
        # and write out all time steps.
        writer.WriteAllTimeStepsOn()

    return writer
コード例 #3
0
ファイル: VTK_routines.py プロジェクト: mndjinga/CDMATH
def Slice_VTK_data_to_VTK(inputFileName,
                             outputFileName,
                                 point, normal,
                                 resolution
                                           ):
    reader = vtk.vtkXMLUnstructuredGridReader()
    reader.SetFileName(inputFileName)
    reader.Update()
    
    plane = vtk.vtkPlane()
    plane.SetOrigin(point)
    plane.SetNormal(normal)

    cutter = vtk.vtkFiltersCorePython.vtkCutter()
    cutter.SetCutFunction(plane)
    cutter.SetInputConnection(reader.GetOutputPort())
    cutter.Update()

    #Convert tht polydata structure générated by cutter into unstructured grid by triangulation
    triFilter = vtk.vtkDataSetTriangleFilter()
    triFilter.SetInputConnection(cutter.GetOutputPort())
    triFilter.Update()
    
    writer = vtk.vtkXMLUnstructuredGridWriter()
    writer.SetInputData(triFilter.GetOutput())
    writer.SetFileName(outputFileName)
    writer.Write()
コード例 #4
0
    def writeVTKsurface(self, filename):
        "Create data in VTK format to compute isocontour"

        # Conteneur du nouveau maillage
        data = vtk.vtkUnstructuredGrid()
        pts = vtk.vtkPoints()
        for i in range(self.nbDof):
            pts.InsertPoint(i, self.meshNode[i, 0], self.meshNode[i, 1],
                            self.meshNode[i, 2])
        data.SetPoints(pts)
        for i in range(self.nbElem):
            Tri3 = vtk.vtkTriangle()
            for j, inode in enumerate(self.meshTable[i, :]):
                Tri3.GetPointIds().SetId(j, inode)
            data.InsertNextCell(Tri3.GetCellType(), Tri3.GetPointIds())

        value0 = vtk.vtkDoubleArray()
        value0.SetName("Value0")
        value0.SetNumberOfComponents(1)
        for i in range(self.nbDof):
            value0.InsertTuple1(i, self.X[i])
        data.GetPointData().AddArray(value0)

        value1 = vtk.vtkDoubleArray()
        value1.SetName("Value1")
        value1.SetNumberOfComponents(1)
        for i in range(self.nbDof):
            value1.InsertTuple1(i, self.Y[i])
        data.GetPointData().AddArray(value1)

        # Ecriture du nouveau maillage
        writer = vtk.vtkXMLUnstructuredGridWriter()
        writer.SetInput(data)
        writer.SetFileName(filename + '.vtu')
        writer.Update()
コード例 #5
0
def write_vtu_ascii(file_name, polyData):
    out = vtk.vtkXMLUnstructuredGridWriter()
    out.SetInputDataObject(polyData)
    out.SetDataModeToAscii()
    out.SetFileName(file_name)
    out.Write()
    return
コード例 #6
0
ファイル: VTK.py プロジェクト: mateustosta/apyce-project
    def export_data(cls, filename, vtk_unstructured_grid, verbose):
        r"""
        Save grid data to a single vtu file for visualizing in ParaView.

        Parameters
        ----------
        filename : string
            A string that holds the name (path) of the grid file.
        vtk_unstructured_grid : vtkUnstructuredGrid Object
            Object holding VTK Unstructured Grid.
        verbose : boolean, default is True.
            A boolean that will be used to emit (or not) messages to screen while processing.

        Notes
        -----
        The vtu file will be created on the directory 'Results' that will be created
            on the same directory than grid file

        """

        # Create the 'Results' directory
        results_dir = misc.create_results_directory(misc.get_path(filename))

        if verbose:
            print("\n[OUTPUT] Writting ParaView file \"" +
                  misc.get_basename(filename).split('.')[0] + ".vtu\"")

        xml_writer = vtk.vtkXMLUnstructuredGridWriter()
        xml_writer.SetFileName(results_dir +
                               misc.get_basename(filename).split('.')[0] +
                               ".vtu")
        xml_writer.SetInputData(vtk_unstructured_grid)
        xml_writer.Write()
コード例 #7
0
def setup(mb,time,dt):
    N = 0

    X = 0.5+0.5*(numpy.random.random((N, 3))-0.5)
    X[:,0] += 0.2
    X[:,2] = 0

    V = numpy.zeros((N,3))
    V[:,0] = 1.0


    SYSTEM=pm.System.get_system_from_options(block=(mb,time,dt))
    PAR=pm.ParticleBase.get_parameters_from_options()[0]

    writer=vtk.vtkXMLUnstructuredGridWriter()
    writer.SetFileName('boundary.vtu')
    writer.SetInput(SYSTEM.boundary.bnd)
    writer.Write()

    PB = pm.Particles.ParticleBucket(X, V, time, delta_t=0.2*dt,
                                 system=SYSTEM,
                                 parameters=PAR)


    return PB
コード例 #8
0
    def vtkFile(self, outFile, type_):
        writer = vtk.vtkXMLUnstructuredGridWriter()
        writer.SetFileName(outFile)
        grid = vtk.vtkUnstructuredGrid()
        points = vtk.vtkPoints()
        points.SetNumberOfPoints(len(self.cells[type_]))
        points.SetDataTypeToDouble()
        dataOut = grid.GetPointData()

        array = vtk.vtkDoubleArray()
        array.SetName("Volume")
        array.SetNumberOfComponents(1)
        array.SetNumberOfTuples(len(self.cells[type_]))

        if type_ == "triangle":
            for i in range(0, len(self.cells[type_])):
                center = self.centerTriangle(self.cells[type_][i])
                area = self.areaTriangle(self.cells[type_][i])
                points.InsertPoint(i, center[0], center[1], 0)
                array.SetTuple1(i, area)
        elif type_ == "quad":
            for i in range(0, len(self.cells[type_])):
                center = self.centerSquare(self.cells[type_][i])
                area = self.areaSquare(self.cells[type_][i])
                points.InsertPoint(i, center[0], center[1], 0)
                array.SetTuple1(i, area)

        grid.SetPoints(points)
        dataOut.AddArray(array)

        writer.SetInputData(grid)

        writer.GetCompressor().SetCompressionLevel(0)
        writer.SetDataModeToAscii()
        writer.Write()
コード例 #9
0
ファイル: _vtk.py プロジェクト: hrh741/DAMASK
    def write(self, fname):
        """
        Write to file.

        Parameters
        ----------
        fname : str
            Filename for writing.

        """
        if isinstance(self.geom, vtk.vtkRectilinearGrid):
            writer = vtk.vtkXMLRectilinearGridWriter()
        elif isinstance(self.geom, vtk.vtkUnstructuredGrid):
            writer = vtk.vtkXMLUnstructuredGridWriter()
        elif isinstance(self.geom, vtk.vtkPolyData):
            writer = vtk.vtkXMLPolyDataWriter()

        default_ext = writer.GetDefaultFileExtension()
        name, ext = os.path.splitext(fname)
        if ext and ext != '.' + default_ext:
            raise ValueError('Given extension {} is not .{}'.format(
                ext, default_ext))
        writer.SetFileName('{}.{}'.format(name, default_ext))
        writer.SetCompressorTypeToZLib()
        writer.SetDataModeToBinary()
        writer.SetInputData(self.geom)

        writer.Write()
コード例 #10
0
ファイル: exporter.py プロジェクト: zabonah/porepy
    def _write_vtk(self, fields, name, g_VTK):
        writer = vtk.vtkXMLUnstructuredGridWriter()
        writer.SetInputData(g_VTK)
        writer.SetFileName(name)

        if fields is not None:
            for field in fields:
                if field.values is None:
                    continue
                dataVTK = ns.numpy_to_vtk(field.values,
                                          deep=True,
                                          array_type=field.dtype())
                dataVTK.SetName(field.name)
                dataVTK.SetNumberOfComponents(field.num_components)

                if field.cell_data:
                    g_VTK.GetCellData().AddArray(dataVTK)
                elif field.point_data:
                    g_VTK.GetPointData().AddArray(dataVTK)

        if not self.binary:
            writer.SetDataModeToAscii()
        writer.Update()

        if fields is not None:
            for field in fields:
                if field.cell_data:
                    g_VTK.GetCellData().RemoveArray(field.name)
                elif field.point_data:
                    g_VTK.GetPointData().RemoveArray(field.name)
コード例 #11
0
ファイル: utils.py プロジェクト: yjsyyyjszf/SimVascular
def write_polydata(file_name, data, datatype=None):
    """ Write the given VTK object to a file.

    Args:
        file_name (str): The name of the file to write. 
        data (vtkDataObject): Data to write.
        datatype (str): Additional parameter for vtkIdList objects.
    """
    # Check filename format.
    file_ext = file_name.split(".")[-1]

    if file_ext == '':
        raise RuntimeError('The file does not have an extension')

    # Get writer.
    if file_ext == 'vtp':
        writer = vtk.vtkXMLPolyDataWriter()
    elif file_ext == 'vtu':
        writer = vtk.vtkXMLUnstructuredGridWriter()
    else:
        raise RuntimeError('Unknown file type %s' % file_ext)

    # Set file name and the data to write.
    writer.SetFileName(file_name)
    writer.SetInputData(data)
    writer.Update()

    # Write the data.
    writer.Write()
コード例 #12
0
ファイル: FE.py プロジェクト: tobyfrancis/pymicro
    def make_vtu(path, add_elset_id_field=False, elset_prefix='_ELSET'):
        '''Convert a mesh to vtk format.
        
        This method reads the mesh and then write the corresponding .vtu file.
        The file will have the same name as the input mesh, with the extension changed to vtu.
        Only .geof and .mesh file are currently supported.

        :param str path: path to the mesh file.
        :param bool add_elset_id_field: flag to add a field representing the elset id.
        :param str elset_prefix: prefix to use if computing the leset id field.
        '''
        if path.endswith('.geof'):
            m = FE_Mesh.load_from_geof(path)
        elif path.endswith('.mesh'):
            m = FE_Mesh.load_from_mesh(path)
        else:
            print('unsupported mesh format (must be .geof or .mesh): %s' %
                  path)
            return
        vtk_mesh = m.build_vtk()
        if add_elset_id_field:
            from vtk.util import numpy_support
            id_field = m.compute_elset_id_field(elset_prefix)
            print('adding field %s' % 'elset_id')
            vtk_data_array = numpy_support.numpy_to_vtk(id_field, deep=1)
            vtk_data_array.SetName('elset_id')
            vtk_mesh.GetCellData().AddArray(vtk_data_array)
        writer = vtk.vtkXMLUnstructuredGridWriter()
        writer.SetFileName(path[:-5] + '.vtu')
        if vtk.vtkVersion().GetVTKMajorVersion() > 5:
            writer.SetInputData(vtk_mesh)
        else:
            writer.SetInput(vtk_mesh)
        writer.Write()
コード例 #13
0
ファイル: writer.py プロジェクト: daniwi79/ccx2paraview
 def write_vtu(self):
     writer = vtk.vtkXMLUnstructuredGridWriter()
     writer.SetInputDataObject(self.ugrid)
     # writer.SetDataModeToAscii() # text file
     writer.SetDataModeToBinary()  # compressed file
     writer.SetFileName(self.file_name)
     writer.Write()
コード例 #14
0
def HDF5toVTKLumen():

    cellType = "ec"     # Both ATP and WSS maps use EC mesh    
    input_meshes = []

    # Read input EC meshes.
    for in_file in input_mesh_files[cellType]:
        reader = vtk.vtkXMLPolyDataReader()
        reader.SetFileName(in_file)
        reader.Update()

        input_meshes += [reader.GetOutput()]
                
        # Only add parent mesh for a tube (non-bifurcation)
        if branches == 1:
            break   
    
    append_filter = vtk.vtkAppendFilter()
        
    for branch in range(branches):
        
        species_array = []
        
        mesh = vtk.vtkPolyData()
        mesh.DeepCopy(input_meshes[branch])

        # The base input h5 filename given the branch and from which writer it came on said branch.
        h5_file_base = base_names[output] + '_b_' + str(branch + 1) + '_' + 'x' + '.h5'
        print "Processing file", h5_file_base
        for writer in range(writers):
            h5_file_name = h5_file_base[:-4] + str(writer) + h5_file_base[-3:]
            
            fid = h5py.h5f.open(h5_file_name)
        
            dset = h5py.h5d.open(fid, "data")
            shape = dset.shape
            rdata = numpy.zeros(shape[0], dtype=numpy.float64)
            dset.read(h5py.h5s.ALL, h5py.h5s.ALL, rdata)
            
            species_array += list(rdata.ravel())[:]
        
        
        reordered_array = vtk.vtkDoubleArray()
        reordered_array.SetName(output)
        reordered_array.SetNumberOfValues(numCells[cellType][0] * numCells[cellType][1] * circQuads * axialQuads)
        reorder_species(species_array, reordered_array, cellType)
        mesh.GetCellData().AddArray(reordered_array)

        append_filter.AddInputData(mesh)
        
    append_filter.Update()

    # Write the result.
    vtu_file = base_names[output] + '.vtu'
    print 'Writing file', os.path.abspath(vtu_file)

    writer = vtk.vtkXMLUnstructuredGridWriter()
    writer.SetFileName(vtu_file)
    writer.SetInputData(append_filter.GetOutput())
    writer.Update()
コード例 #15
0
ファイル: mesh_check.py プロジェクト: woolfeh/stomasimulator
    def output_vtk_file(self, file_name='tests.vtk', in_xml_format=True):
        """
        Write the mesh to a VTK file

        :param file_name:
        :param in_xml_format:
        :return:
        """

        gw = vtk.vtkXMLUnstructuredGridWriter(
        ) if in_xml_format else vtk.vtkUnstructuredGridWriter()

        if in_xml_format:
            # XML data written in binary format by default
            gw.SetDataModeToAscii()

        gw.SetFileName(file_name)
        gw.SetInputData(self.vtk_mesh)

        rtc = gw.Write()

        if rtc == 1:
            print('--> Wrote mesh to {}'.format(file_name))
        else:
            print('--> Failed to write mesh to file')

        # Exodus format
        # exow = vtk.vtkExodusIIWriter()
        # exow.SetFileName( 'tests.exo' )
        # exow.SetInputData( mesh )
        #
        # rtc = exow.Write()

        return
コード例 #16
0
ファイル: add_hdf5.py プロジェクト: Chicken-Bones/qutemu
def write_vtu(ugrid):
    out_path = argv[3] if len(argv) > 3 else path.splitext(argv[2])[0] + ".vtu"
    print('writing: ' + out_path)
    writer = vtk.vtkXMLUnstructuredGridWriter()
    writer.SetFileName(out_path)
    writer.SetInputData(ugrid)
    writer.Write()
コード例 #17
0
def setup(mb, time, dt):
    N = 0

    X = 0.5 + 0.5 * (numpy.random.random((N, 3)) - 0.5)
    X[:, 0] += 0.2
    X[:, 2] = 0

    V = numpy.zeros((N, 3))
    V[:, 0] = 1.0

    SYSTEM = pm.System.get_system_from_options(block=(mb, time, dt))
    PAR = pm.ParticleBase.get_parameters_from_options()[0]

    writer = vtk.vtkXMLUnstructuredGridWriter()
    writer.SetFileName('boundary.vtu')
    writer.SetInput(SYSTEM.boundary.bnd)
    writer.Write()

    PB = pm.Particles.ParticleBucket(X,
                                     V,
                                     time,
                                     delta_t=0.2 * dt,
                                     system=SYSTEM,
                                     parameters=PAR)

    return PB
コード例 #18
0
ファイル: VTKMeshWriter.py プロジェクト: war-free/fealpy
    def write_to_vtk(self, fname, mesh):
        """

        Notes
        -----
        """
        node, cell, cellType, NC = mesh.to_vtk()
        points = vtk.vtkPoints()
        points.SetData(vnp.numpy_to_vtk(node))

        cells = vtk.vtkCellArray()
        cells.SetCells(NC, vnp.numpy_to_vtkIdTypeArray(cell))

        vtkmesh = vtk.vtkUnstructuredGrid()
        vtkmesh.SetPoints(points)
        vtkmesh.SetCells(cellType, cells)

        pdata = vtkmesh.GetPointData()
        for key, val in mesh.nodedata.items():
            d = vnp.numpy_to_vtk(val)
            d.SetName(key)
            pdata.AddArray(d)

        cdata = vtkmesh.GetCellData()
        for key, val in mesh.celldata.items():
            d = vnp.numpy_to_vtk(val)
            d.SetName(key)
            cdata.AddArray(d)

        writer = vtk.vtkXMLUnstructuredGridWriter()
        writer.SetFileName(fname)
        writer.SetInputData(vtkmesh)
        writer.Write()
コード例 #19
0
def write_volume_mesh(file_base_name, mesh, model_name):
    '''Write a volume mesh to a VTK vtu file and mesh information to the .msh file..
    '''
    file_name = file_base_name + "-mesh.vtu"
    writer = vtk.vtkXMLUnstructuredGridWriter()
    writer.SetFileName(file_name)
    writer.SetInputData(mesh)
    writer.Update()
    writer.Write()

    ## Create the XML data.
    #
    root = etree.Element("mitk_mesh", type="TetGen", model_name=model_name)

    time_step = etree.SubElement(root, 'timestep', id='0')

    mesh_element = etree.SubElement(time_step, 'mesh', type="TetGen")

    command_history = etree.SubElement(mesh_element, 'command_history')
    command = etree.SubElement(command_history, 'command', content="option surface 1")
    command = etree.SubElement(command_history, 'command', content="option volume 1")
    command = etree.SubElement(command_history, 'command', content="option UseMMG 1")
    command = etree.SubElement(command_history, 'command', content="option GlobalEdgeSize 0.7992")
    command = etree.SubElement(command_history, 'command', content="setWalls")
    command = etree.SubElement(command_history, 'command', content="option Optimization 3")
    command = etree.SubElement(command_history, 'command', content="generateMesh")
    command = etree.SubElement(command_history, 'command', content="writeMesh")

    # Write XML data.
    tree = etree.ElementTree(root)
    file_name = file_base_name + '-mesh.msh'
    with open(file_name, 'wb') as f:
        tree.write(f, encoding='utf-8')
コード例 #20
0
 def write_vtk_particle_grid(self, output):
     if self.vtk_particle_grid is None:
         raise TypeError("No grid to be written")
     writer = vtk.vtkXMLUnstructuredGridWriter()
     writer.SetFileName(output)
     writer.SetInputData(self.vtk_particle_grid)
     writer.Write()
コード例 #21
0
    def write(self):
        """
      Actually write the tube object to a vtk file using a
      VTKUntructuredGrid
    """
        R, T, Z = self.tube.mesh

        X = R * np.cos(T)
        Y = R * np.sin(T)

        for i in range(self.tube.ntime):
            grid = vtk.vtkUnstructuredGrid()
            points = vtk.vtkPoints()

            for x, y, z in zip(X.flatten(), Y.flatten(), Z.flatten()):
                points.InsertNextPoint(x, y, z)

            grid.SetPoints(points)

            self._set_grid(grid)

            writer = vtk.vtkXMLUnstructuredGridWriter()
            writer.SetFileName(self.fname + ("-%i" % i) + ".vtu")
            writer.SetInputData(grid)

            self._dump_point_data(grid, i)
            self._dump_element_data(grid, i)

            writer.Write()
コード例 #22
0
 def Write2VTU(self, vtk_file_name):
     vtk_file_name = vtk_file_name + '.vtu'
     xmlWriter = vtk.vtkXMLUnstructuredGridWriter()
     xmlWriter.SetFileName(vtk_file_name)
     xmlWriter.SetInputData(self.VTK_Grids)
     xmlWriter.Write()
     return vtk_file_name
コード例 #23
0
def visualize(points):
    alreadyConnected = []

    for i in range(0, points.GetNumberOfPoints()):
        alreadyConnected.append(i)

    for i in range(0, points.GetNumberOfPoints()):
        index = -1
        distance = float("inf")
        distanceOrder = 0
        record = float("inf")

        for j in range(0, points.GetNumberOfPoints()):
            distance = math.sqrt(
                vtk.vtkMath.Distance2BetweenPoints(points.GetPoint(i),
                                                   points.GetPoint(j)))
            if (distance > 0 and distance < record and alreadyConnected[j] != i
                    and alreadyConnected[alreadyConnected[j]] != i):
                record = distance
                index = j
            elif (distance > 0 and distance < record):
                distanceOrder += 1
        if (index != -1 and distanceOrder < 2):
            alreadyConnected[i] = index
            line.InsertNextCell(2)
            line.InsertCellPoint(i)
            line.InsertCellPoint(index)

    for i in range(0, points.GetNumberOfPoints()):
        index = -1
        distance = float("inf")
        distanceOrder = 0
        record = float("inf")

        for j in range(0, points.GetNumberOfPoints()):
            distance = vtk.vtkMath.Distance2BetweenPoints(
                points.GetPoint(i), points.GetPoint(j))
            if (distance > 0 and distance < record and alreadyConnected[j] != i
                    and alreadyConnected[i] != j
                    and alreadyConnected[alreadyConnected[j]] !=
                    alreadyConnected[alreadyConnected[i]]):
                record = distance
                index = j
            elif (distance > 0 and distance < record):
                distanceOrder += 1
        if (index != -1 and distanceOrder < 2):
            alreadyConnected[i] = index
            line.InsertNextCell(2)
            line.InsertCellPoint(i)
            line.InsertCellPoint(index)

    G = vtk.vtkUnstructuredGrid()
    G.GetPointData().SetScalars(degree)
    G.SetPoints(Points)
    G.SetCells(vtk.VTK_LINE, line)

    gw = vtk.vtkXMLUnstructuredGridWriter()
    gw.SetFileName(outputFileName)
    gw.SetInputData(G)
    gw.Write()
コード例 #24
0
def createDEM_v2():

    ds = xr.open_dataset('../data/static/static.nc')
    
    points = vtk.vtkPoints()
    quad = vtk.vtkQuad()
    cells = vtk.vtkCellArray()
    
    numPoints = ds.lat.size*ds.lon.size
   
    print('Write points \n')
    for i,j in product(ds.lat.values,ds.lon.values):
            points.InsertNextPoint(j, i, ds.HGT.sel(lat=i,lon=j).values/6370000.0)
    
    print('Write cells \n')
    for idx in range(points.GetNumberOfPoints()-ds.lon.size):
        if (idx%ds.lon.size != 0):
            quad.GetPointIds().SetId(0,idx)
            quad.GetPointIds().SetId(1,idx+1)
            quad.GetPointIds().SetId(2,idx+ds.lon.size+1)
            quad.GetPointIds().SetId(3,idx+ds.lon.size)
            cells.InsertNextCell(quad)

    print('Create unstructured grid \n') 
    grid = vtk.vtkUnstructuredGrid()
    grid.SetPoints(points)
    grid.SetCells(vtk.VTK_QUAD, cells)
    
    writer = vtk.vtkXMLUnstructuredGridWriter()
    writer.SetFileName('cosipy.vtu')
    writer.SetInputData(grid)
    writer.Write()
コード例 #25
0
def write_updated_mesh(mesh, new_vtu_file_path):
    """ Function to write the new VTU file

    Function 'write_updated_mesh' crete new VTU file with utdated value given
    by 'mesh' and save at 'new_vtu_file_path'

    Args:
        mesh (vtkhelpers object instance): Python instance of SU2 result file
                                           with added force and normal vectors
        new_vtu_file_path (str): New VTU file path

    """

    # To write .vtk file
    # writer = vtk.vtkUnstructuredGridWriter()
    # writer.SetFileType(0)

    # To write .vtu file
    writer = vtk.vtkXMLUnstructuredGridWriter()

    try:
        source = mesh.GetOutput()
    except AttributeError:
        source = mesh
    writer.SetInputData(source)
    writer.SetFileName(new_vtu_file_path)
    writer.Update()
コード例 #26
0
    def Save(self, filename, counter, u, stress, uname='displacement'):
        """ Save the stress result of elements at time t with stress tensor of dim.
            Dim is an array like ['xx', 'yy', 'xy', 'xz', 'yz']
        """
        dim = np.array(['xx', 'yy', 'xy', 'xz', 'yz'])
        for i, name in enumerate(dim):
            for iSmp in range(self.nSmp):
                stressVec = numpy_to_vtk(stress[:, iSmp, i])
                stressVec.SetName('{}_{:03d}'.format(name, iSmp))
                self.polyDataModel.GetCellData().AddArray(stressVec)

        for iSmp in range(self.nSmp):
            uTuples = numpy_to_vtk(u[iSmp, :, :])
            uTuples.SetName('{}_{:03d}'.format(uname, iSmp))
            self.polyDataModel.GetPointData().AddArray(uTuples)

        filename, fileExtension = os.path.splitext(filename)
        stressFilename = '{}{}{}'.format(filename, counter, fileExtension)

        writer = vtk.vtkXMLPolyDataWriter() if fileExtension.endswith(
            'vtp') else vtk.vtkXMLUnstructuredGridWriter()
        writer.SetInputData(self.polyDataModel)
        writer.SetFileName(stressFilename)
        writer.Write()

        print('Write result to {}.'.format(stressFilename))
コード例 #27
0
def write_vtu(mesh, fn):
    writer = vtk.vtkXMLUnstructuredGridWriter()
    writer.SetInputData(mesh)
    writer.SetFileName(fn)
    writer.Update()
    writer.Write()
    return
コード例 #28
0
    def _save_unstructured_grid(filename, vtkUnstructGrid, directory=''):
        """Saves a VTK unstructured grid file (vtu) for an already generated
        :class:`pyvista.UnstructuredGrid` object.

        Parameters
        ----------

        filename : str
            path to the output vtk file or just its name if directory is specified

        directory : str
            directory where the UBC GIF file lives

        """
        if not isinstance(vtkUnstructGrid, vtk.vtkUnstructuredGrid):
            raise RuntimeError(
                '`_save_unstructured_grid` can only handle `vtkUnstructuredGrid` objects. `%s` is not supported.'
                % vtkUnstructGrid.__class__)
        # Check the extension of the filename
        fname = os.path.join(directory, filename)
        ext = os.path.splitext(fname)[1]
        if ext is '':
            fname = fname + '.vtu'
        elif ext not in '.vtu':
            raise IOError(
                '{:s} is an incorrect extension, has to be .vtu'.format(ext))
        # Make the writer
        vtuWriteFilter = vtkXMLUnstructuredGridWriter()
        if float(VTK_VERSION.split('.')[0]) >= 6:
            vtuWriteFilter.SetInputDataObject(vtkUnstructGrid)
        else:
            vtuWriteFilter.SetInput(vtkUnstructGrid)
        vtuWriteFilter.SetFileName(fname)
        # Write the file
        vtuWriteFilter.Update()
コード例 #29
0
ファイル: ConcentrationDG2d.py プロジェクト: ymjyxw/fealpy
    def write_to_vtk(self, fname):
        # 重心处的值
        bc = np.array([1 / 3, 1 / 3, 1 / 3], dtype=np.float64)
        ps = self.mesh.bc_to_point(bc)
        vmesh = vtk.vtkUnstructuredGrid()
        vmesh.SetPoints(self.points)
        vmesh.SetCells(self.cellType, self.cells)
        cdata = vmesh.GetCellData()
        pdata = vmesh.GetPointData()

        uh = self.uh
        V = uh.value(bc)
        V = np.r_['1', V, np.zeros((len(V), 1), dtype=np.float64)]
        val = vnp.numpy_to_vtk(V)
        val.SetName('velocity')
        cdata.AddArray(val)

        if True:
            ch = self.ch
            rch = ch.to_cspace_function()
            val = vnp.numpy_to_vtk(rch)
            val.SetName('concentration')
            pdata.AddArray(val)
        else:
            ch = self.ch
            val = ch.value(ps)
            val = vnp.numpy_to_vtk(val)
            val.SetName('concentration')
            cdata.AddArray(val)

        writer = vtk.vtkXMLUnstructuredGridWriter()
        writer.SetFileName(fname)
        writer.SetInputData(vmesh)
        writer.Write()
コード例 #30
0
def write_data(input_data, filename):
    """
    Write the given input data based on the file name extension.

    Args:
        input_data (vtkSTL/vtkPolyData/vtkXMLPolydata/vtkXMLUnstructured): Input data.
        filename (str): Save path location.
    """
    # Check filename format
    fileType = filename.split(".")[-1]
    if fileType == '':
        raise NameError('The file does not have an extension')

    # Get writer
    if fileType == 'stl':
        writer = vtk.vtkSTLWriter()
    elif fileType == 'vtp':
        writer = vtk.vtkXMLPolyDataWriter()
    elif fileType == 'vtu':
        writer = vtk.vtkXMLUnstructuredGridWriter()
    else:
        raise NameError('Unknown file type %s' % fileType)

    # Set filename and input
    writer.SetFileName(filename)
    writer.SetInputData(input_data)
    writer.Update()

    # Write
    writer.Write()
コード例 #31
0
 def __init__(self, module_manager):
     SimpleVTKClassModuleBase.__init__(
         self, module_manager,
         vtk.vtkXMLUnstructuredGridWriter(), 'Writing vtkXMLUnstructuredGrid.',
         ('vtkXMLUnstructuredGrid',), (),
         replaceDoc=True,
         inputFunctions=None, outputFunctions=None)
コード例 #32
0
ファイル: mmio.py プロジェクト: rickyspaceguy/meshmagick
def write_VTU(filename, vertices, faces):
    """Writes .vtu file format for the paraview (Kitware (c)) visualisation software.
    
    It relies on the VTK library for its writer. VTU files use the last XML file format of the VTK library.

    Parameters
    ----------
    filename: str
        name of the mesh file to be written on disk
    vertices: ndarray
        numpy array of the coordinates of the mesh's nodes
    faces: ndarray
        numpy array of the faces' nodes connectivities
    """

    from vtk import vtkXMLUnstructuredGridWriter, VTK_MAJOR_VERSION
    writer = vtkXMLUnstructuredGridWriter()
    writer.SetDataModeToAscii()
    writer.SetFileName(filename)

    unstructured_grid = _build_vtkUnstructuredGrid(vertices, faces)
    if VTK_MAJOR_VERSION <= 5:
        writer.SetInput(unstructured_grid)
    else:
        writer.SetInputData(unstructured_grid)
    writer.Write()
コード例 #33
0
def writeVTU(mesh, filename):
    print('Writing .vtu file...')
    w = vtk.vtkXMLUnstructuredGridWriter()
    w.SetInputData(mesh)
    w.SetFileName(filename)
    w.Write()
    print('done.')
コード例 #34
0
def writeVTU(mesh, filename, vprint):
    vprint('Writing ' + filename + ' file...')
    w = vtk.vtkXMLUnstructuredGridWriter()
    w.SetInputData(mesh)
    w.SetFileName(filename + '.vtu')
    w.Write()
    vprint('done.')
コード例 #35
0
def write_volume_mesh(file_base_name, mesh, region_id): 
    file_name = file_base_name + "-mesh-" + str(region_id) + ".vtu"
    writer = vtk.vtkXMLUnstructuredGridWriter()
    writer.SetFileName(file_name)
    writer.SetInputData(mesh)
    writer.Update()
    writer.Write()
コード例 #36
0
ファイル: plot.py プロジェクト: SinghN/nutils
 def save( self, name ):
   import vtk
   vtkWriter = vtk.vtkXMLUnstructuredGridWriter()
   vtkWriter.SetInput   ( self.vtkMesh )
   vtkWriter.SetFileName( os.path.join( self.path, name ) )
   if self.ascii:
     vtkWriter.SetDataModeToAscii()
   vtkWriter.Write()
コード例 #37
0
ファイル: vmtkmeshwriter.py プロジェクト: haehn/vmtk
 def WriteVTKXMLMeshFile(self):
     if (self.OutputFileName == ''):
         self.PrintError('Error: no OutputFileName.')
     self.PrintLog('Writing VTK XML mesh file.')
     writer = vtk.vtkXMLUnstructuredGridWriter()
     writer.SetInput(self.Mesh)
     writer.SetFileName(self.OutputFileName)
     writer.Write()
コード例 #38
0
ファイル: hdf5ToVTU.py プロジェクト: BlueFern/CoupledCells
def HDF5toVTKCells():

    input_meshes = []

    # Read input meshes.
    for in_file in input_mesh_files[output]:
        reader = vtk.vtkXMLPolyDataReader()
        reader.SetFileName(in_file)
        reader.Update()

        input_meshes += [reader.GetOutput()]
        
        # Only add parent mesh for a tube (non-bifurcation)
        if branches == 1:
            break   

    for time_step in range(args.start, args.end + 1):
        print("Time:", time_step)
        
        append_filter = vtk.vtkAppendFilter()
        
        for branch in range(branches):
            mesh = vtk.vtkPolyData()
            mesh.DeepCopy(input_meshes[branch])

            # The base input h5 filename given the branch and from which writer it came on said branch.
            h5_file_base = base_names[output] + str(time_step) + '_b_' + str(branch + 1) + '_' + 'x' + '.h5'
            print("Processing file", h5_file_base)
            
            # Group all datasets of a branch at a specific time point given
            # the number of writers the data was split into.
            species_array = append_datasets(writers, h5_file_base, "data")

            # Loop through all attirbutes and append them to a new array in the 
            # correct order given the quad to task ratio.            
            for attribute in attributes[output]:
                reordered_array = vtk.vtkDoubleArray()
                reordered_array.SetName(attribute)
                reordered_array.SetNumberOfValues(numCells[output][0] * numCells[output][1] * circQuads * axialQuads)
                
                reorder_species(species_array[attribute], reordered_array, output)
                mesh.GetCellData().AddArray(reordered_array)
               
            append_filter.AddInputData(mesh)
            
        append_filter.Update()

        # Write the result.
        vtu_file = base_names[output] + str(time_step) + '.vtu'
        print("Writing file", os.path.abspath(vtu_file))

        writer = vtk.vtkXMLUnstructuredGridWriter()
        writer.SetFileName(vtu_file)
        writer.SetInputData(append_filter.GetOutput())
        writer.Update()
コード例 #39
0
ファイル: vtkxml.py プロジェクト: rchiechi/QuantumParse
def write_vtu(filename, atoms, data=None):
    from vtk import VTK_MAJOR_VERSION, vtkUnstructuredGrid, vtkPoints, vtkXMLUnstructuredGridWriter
    from vtk.util.numpy_support import numpy_to_vtk

    if isinstance(atoms, list):
        if len(atoms) > 1:
            raise ValueError('Can only write one configuration to a VTI file!')
        atoms = atoms[0]

    # Create a VTK grid of structured points
    ugd = vtkUnstructuredGrid()

    # add atoms as vtk Points
    p = vtkPoints()
    p.SetNumberOfPoints(len(atoms))
    p.SetDataTypeToDouble()
    for i,pos in enumerate(atoms.get_positions()):
        p.InsertPoint(i,pos[0],pos[1],pos[2])
    ugd.SetPoints(p)

    # add atomic numbers
    numbers = numpy_to_vtk(atoms.get_atomic_numbers(), deep=1)
    ugd.GetPointData().AddArray(numbers)
    numbers.SetName("atomic numbers")

    # add tags
    tags = numpy_to_vtk(atoms.get_tags(), deep=1)
    ugd.GetPointData().AddArray(tags)
    tags.SetName("tags")

    # add covalent radii
    from ase.data import covalent_radii
    radii = numpy_to_vtk(np.array([covalent_radii[i] for i in atoms.get_atomic_numbers()]), deep=1)
    ugd.GetPointData().AddArray(radii)
    radii.SetName("radii")

    # Save the UnstructuredGrid dataset to a VTK XML file.
    w = vtkXMLUnstructuredGridWriter()

    if fast:
        w.SetDataModeToAppend()
        w.EncodeAppendedDataOff()
    else:
        w.GetCompressor().SetCompressionLevel(0)
        w.SetDataModeToAscii()

    if isinstance(filename, str):
        w.SetFileName(filename)
    else:
        w.SetFileName(filename.name)
    if VTK_MAJOR_VERSION <= 5:
        w.SetInput(ugd)
    else:
        w.SetInputData(ugd)
    w.Write()
コード例 #40
0
ファイル: io.py プロジェクト: grosenkj/telluricpy
def writeVTUFile(fileName,vtkUnstructuredGrid,compress=True):
    '''Function to write vtk unstructured grid (vtu).'''
    Writer = vtk.vtkXMLUnstructuredGridWriter()
    if float(vtk.VTK_VERSION.split('.')[0]) >=6:
        Writer.SetInputData(vtkUnstructuredGrid)
    else:
        Writer.SetInput(vtkUnstructuredGrid)
    if not compress:
        Writer.SetCompressorTypeToNone()
        Writer.SetDataModeToAscii()
    Writer.SetFileName(fileName)
    Writer.Update()
コード例 #41
0
ファイル: vmtkmeshwriter.py プロジェクト: ChaliZhg/vmtk
 def WriteVTKXMLMeshFile(self):
     if (self.OutputFileName == ''):
         self.PrintError('Error: no OutputFileName.')
     self.PrintLog('Writing VTK XML mesh file.')
     writer = vtk.vtkXMLUnstructuredGridWriter()
     writer.SetInput(self.Mesh)
     writer.SetFileName(self.OutputFileName)
     if self.Mode == "binary":
         writer.SetDataModeToBinary()
     elif self.Mode == "ascii":
         writer.SetDataModeToAscii()
     writer.Write()
コード例 #42
0
def write_vtu(ugrid, filename, mode = 'ascii'):
    writer = vtk.vtkXMLUnstructuredGridWriter()
    if mode == 'ascii':
        writer.SetDataModeToAscii()
    elif mode == 'binary':
        writer.SetDataModeToBinary()
    elif mode == 'append':
        writer.SetDataModetoAppend()

    writer.SetFileName(filename)
    writer.SetInputData(ugrid)
    writer.Write()
コード例 #43
0
ファイル: t2grids.py プロジェクト: neerja007/PyTOUGH
 def write_vtk(self,geo,filename,wells=False):
     """Writes *.vtu file for a vtkUnstructuredGrid object corresponding to the grid in 3D, with the specified filename,
     for visualisation with VTK."""
     from vtk import vtkXMLUnstructuredGridWriter
     if wells: geo.write_well_vtk()
     arrays=geo.vtk_data
     grid_arrays=self.get_vtk_data(geo)
     for array_type,array_dict in arrays.items():
         array_dict.update(grid_arrays[array_type])
     vtu=geo.get_vtk_grid(arrays)
     writer=vtkXMLUnstructuredGridWriter()
     writer.SetFileName(filename)
     writer.SetInput(vtu)
     writer.Write()
コード例 #44
0
ファイル: basis.py プロジェクト: tbetcke/PyPWDG
def vtkbasis(mesh, etob, fname, coeffs):
    ''' Find the directions from a (non-uniform) plane wave basis and output a VTK-compatible file
    
        It's possible that this needs to be updated to work with recent changes to ElementToBasis
    '''
    try:
        import vtk
        
        points = vtk.vtkPoints()
        vectors = vtk.vtkDoubleArray()
        vectors.SetNumberOfComponents(3)
        scalars = vtk.vtkDoubleArray()
        
        nc = 0
        for e in range(mesh.nelements):
            c = paa.origin(mesh, e)
            bs = etob[e]
            cc = np.zeros(3)
            cc[:len(c)] = c
            nondir = 0
            ndir = 0
            for b in bs:
                if hasattr(b, "directions"):
                    for d in b.directions.transpose():
                        dd = np.zeros(3)
                        dd[:len(d)] = d
                        if coeffs is not None: dd *= abs(coeffs[nc])
                        points.InsertNextPoint(*cc)
                        vectors.InsertNextTuple3(*dd)
                        ndir+=1
                        nc+=1
                else:
                    nondir += np.sqrt(np.sum(coeffs[nc:nc+b.n]**2))
                    nc += b.n
            for _ in range(ndir): scalars.InsertNextValue(nondir)
                    
        g = vtk.vtkUnstructuredGrid()
        g.SetPoints(points)
        gpd = g.GetPointData()
        gpd.SetVectors(vectors)
        gpd.SetScalars(scalars)
        writer = vtk.vtkXMLUnstructuredGridWriter()
        writer.SetFileName(fname)
        writer.SetInput(g)
        writer.Write()
    except ImportError as e:
        print "Unable to write basis to file: ",e
                
                
コード例 #45
0
ファイル: mef2vtu.py プロジェクト: canesin/MEF
    def SaveVTK(self, outfile="Output"):
        """ Save grid in vtk structured format.

            Parameters
            ----------
            grid: vtkStructuredGrid : grid used in computation
            outfile: string : output file name in system
                            Defaults to "Output"
            Return
            ------
            pass
            save file directly on outfile location
        """
        writer = vtk.vtkXMLUnstructuredGridWriter()
        writer.SetFileName(outfile + ".vtu")
        writer.SetInput(self.mesh)
        writer.Write()
コード例 #46
0
 def write(self):
     # polydata = vtk.vtkPolyData()
     # polydata.SetPoints(self._points)
     # polydata.SetPolys(self._hexs)
     # for ptData in self._resultsPoint:
     #     polydata.GetPointData().AddArray(ptData)
     # for cellData in self._resultsCell:
     #     polydata.GetCellData().AddArray(cellData)
         
     # polydata.Modified()
     writer = vtk.vtkXMLUnstructuredGridWriter()
     writer.SetFileName(self._fname)
     if vtk.VTK_MAJOR_VERSION <= 5:
         writer.SetInput(self._hexs)
     else:
         writer.SetInputData(self._hexs)
     writer.Write()
コード例 #47
0
ファイル: vtktools.py プロジェクト: TerraFERMA/TerraFERMA
  def Write(self, filename=[]):
    """Writes the grid to a vtu file.

    If no filename is specified it will use the name of the file originally
    read in, thus overwriting it!
    """
    if filename==[]:
      filename=self.filename
    if filename is None:
      raise Exception("No file supplied")
    if filename.endswith('pvtu'):
      gridwriter=vtk.vtkXMLPUnstructuredGridWriter()
    else:
      gridwriter=vtk.vtkXMLUnstructuredGridWriter()

    gridwriter.SetFileName(filename)
    gridwriter.SetInput(self.ugrid)
    gridwriter.Write()
コード例 #48
0
def writeUGrid(
        ugrid,
        filename,
        verbose=1):

    myVTK.myPrint(verbose, "*** writeUGrid: " + filename + " ***")

    if ('vtk' in filename):
        ugrid_writer = vtk.vtkUnstructuredGridWriter()
    elif ('vtu' in filename):
        ugrid_writer = vtk.vtkXMLUnstructuredGridWriter()
    else:
        assert 0, "File must be .vtk or .vtu. Aborting."

    ugrid_writer.SetFileName(filename)
    ugrid_writer.SetInputData(ugrid)
    ugrid_writer.Update()
    ugrid_writer.Write()
コード例 #49
0
ファイル: DStoVTK.py プロジェクト: paulmikoy/pyTetrad
def makeVTKWellsUsingModule(fname_base, welltracks_df, xml=False):
    
    numpoints = welltracks_df.shape[0]
    wells = welltracks_df['Well'].unique().tolist()
    numwells = len(wells)

    grid = vtkUnstructuredGrid()
    points = vtkPoints()  
    
    for i in range(numpoints):
        points.InsertNextPoint(welltracks_df.loc[i,'X'], welltracks_df.loc[i,'Y'], welltracks_df.loc[i,'Elev_mASL'])
    
    cells = vtkCellArray()
    wellname = vtkStringArray()
    wellname.SetName('Well')
    
    for well in wells:
        print well
        polyline = vtkPolyLine()
        indices = welltracks_df[welltracks_df['Well']==well].index.tolist()
        for i, j in enumerate(indices):
            polyline.GetPointIds().SetNumberOfIds(len(indices))
            polyline.GetPointIds().SetId(i,j)
            
        cells.InsertNextCell(polyline)
        wellname.InsertNextValue(well)
        
    grid.SetPoints(points)
    grid.SetCells(VTK_POLY_LINE, cells)
    grid.GetCellData().AddArray(wellname)
    
    if xml:
        writer = vtkXMLUnstructuredGridWriter()
        writer.SetFileName('{}.vtu'.format(fname_base))
        writer.SetDataModeToAscii()
        writer.SetInputData(grid)
        writer.Write()
        
    else:
        writer = vtkUnstructuredGridWriter()
        writer.SetFileName('{}.vtk'.format(fname_base))
        writer.SetInputData(grid)
        writer.Write()
コード例 #50
0
def writeUGrid(
        ugrid,
        filename,
        verbose=0):

    mypy.my_print(verbose, "*** writeUGrid: "+filename+" ***")

    if ('vtk' in filename):
        ugrid_writer = vtk.vtkUnstructuredGridWriter()
    elif ('vtu' in filename):
        ugrid_writer = vtk.vtkXMLUnstructuredGridWriter()
    else:
        assert 0, "File must be .vtk or .vtu. Aborting."

    ugrid_writer.SetFileName(filename)
    if (vtk.vtkVersion.GetVTKMajorVersion() >= 6):
        ugrid_writer.SetInputData(ugrid)
    else:
        ugrid_writer.SetInput(ugrid)
    ugrid_writer.Update()
    ugrid_writer.Write()
コード例 #51
0
ファイル: VTK_routines.py プロジェクト: mndjinga/CDMATH
def Clip_VTK_data_to_VTK(inputFileName,
                             outputFileName,
                                 point, normal,
                                 resolution
                                           ):
    reader = vtk.vtkXMLUnstructuredGridReader()
    reader.SetFileName(inputFileName)
    reader.Update()
    
    plane = vtk.vtkPlane()
    plane.SetOrigin(point)
    plane.SetNormal(normal)

    clipper = vtk.vtkClipDataSet()
    clipper.SetClipFunction(plane)
    clipper.SetInputConnection(reader.GetOutputPort())
    clipper.Update()

    writer = vtk.vtkXMLUnstructuredGridWriter()
    writer.SetInputData(clipper.GetOutput())
    writer.SetFileName(outputFileName)
    writer.Write()
コード例 #52
0
ファイル: Field.py プロジェクト: mmp-project/mupif
    def manyToVTK3(fields,fileName,ascii=False,compress=True):
        '''
        Save all fields passed as argument into VTK3 Unstructured Grid file (``*.vtu``).

        All *fields* must be defined on the same mesh object; exception will be raised if this is not the case.

        :param bool ascii: write numbers are ASCII in the XML-based VTU file (rather than base64-encoded binary in XML)
        :param bool compress: apply compression to the data
        '''
        import vtk
        if not fields: raise ValueError('At least one field must be passed.')
        # check if all fields are defined on the same mesh
        if len(set([f.mesh for f in fields]))!=1: raise RuntimeError('Not all fields are sharing the same Mesh object (and could not be saved to a single .vtu file')
        # convert mesh to VTK UnstructuredGrid
        mesh=fields[0].getMesh()
        vtkgrid=mesh.asVtkUnstructuredGrid()
        # add fields as arrays
        for f in fields:
            arr=vtk.vtkDoubleArray()
            arr.SetNumberOfComponents(f.getRecordSize())
            arr.SetName(f.getFieldIDName())
            assert f.getFieldType() in (FieldType.FT_vertexBased,FieldType.FT_cellBased) # other future types not handled
            if f.getFieldType()==FieldType.FT_vertexBased: nn=mesh.getNumberOfVertices()
            else: nn=mesh.getNumberOfCells()
            arr.SetNumberOfValues(nn)
            for i in range(nn): arr.SetTuple(i,f.giveValue(i))
            if f.getFieldType()==FieldType.FT_vertexBased: vtkgrid.GetPointData().AddArray(arr)
            else: vtkgrid.GetCellData().AddArray(arr)
        # write the unstructured grid to file
        writer=vtk.vtkXMLUnstructuredGridWriter()
        if compress: writer.SetCompressor(vtk.vtkZLibDataCompressor())
        if ascii: writer.SetDataModeToAscii()
        writer.SetFileName(fileName)
        # change between VTK5 and VTK6
        if vtk.vtkVersion().GetVTKMajorVersion()==6: writer.SetInputData(vtkgrid)
        else: writer.SetInput(vtkgrid)
        writer.Write()
コード例 #53
0
ファイル: vtkxml.py プロジェクト: rosswhitfield/ase
def write_vtu(filename, atoms, data=None):
    from vtk import vtkUnstructuredGrid, vtkPoints, vtkXMLUnstructuredGridWriter
    #if isinstance(fileobj, str):
    #    fileobj = paropen(fileobj, 'w')
        
    if isinstance(atoms, list):
        if len(atoms) > 1:
            raise ValueError('Can only write one configuration to a VTI file!')
        atoms = atoms[0]

    """
    if data is None:
        raise ValueError('VTK XML Unstructured Grid (VTI) format requires data!')

    data = np.asarray(data)

    if data.dtype == complex:
        data = np.abs(data)
    """

    cell = atoms.get_cell()

    assert np.all(cell==np.diag(cell.diagonal())), 'Unit cell must be orthogonal' #TODO bounding box with general unit cell?!

    bbox = np.array(list(zip(np.zeros(3),cell.diagonal()))).ravel()

    # Create a VTK grid of structured points
    ugd = vtkUnstructuredGrid()
    ugd.SetWholeBoundingBox(bbox)

    """
    # Allocate a VTK array of type double and copy data
    da = vtkDoubleArray()
    da.SetName('scalars')
    da.SetNumberOfComponents(3)
    da.SetNumberOfTuples(len(atoms))

    for i,pos in enumerate(atoms.get_positions()):
        da.SetTuple3(i,pos[0],pos[1],pos[2])
    """
    p = vtkPoints()
    p.SetNumberOfPoints(len(atoms))
    p.SetDataTypeToDouble()
    for i,pos in enumerate(atoms.get_positions()):
        p.InsertPoint(i,pos[0],pos[1],pos[2])


    ugd.SetPoints(p)

    # Assign the VTK array as point data of the grid
    #upd = ugd.GetPointData() # type(spd) is vtkPointData
    #upd.SetScalars(da)


    # Save the UnstructuredGrid dataset to a VTK XML file.
    w = vtkXMLUnstructuredGridWriter()

    if fast:
        w.SetDataModeToAppend()
        w.EncodeAppendedDataOff()
    else:
        w.GetCompressor().SetCompressionLevel(0)
        w.SetDataModeToAscii()

    w.SetFileName(filename)
    w.SetInput(ugd)
    w.Write()
コード例 #54
0
ファイル: vtk_output.py プロジェクト: tbetcke/PyPWDG
 def write(self, fname):
     writer = vtk.vtkXMLUnstructuredGridWriter()
     writer.SetFileName(fname)
     writer.SetInput(self.__grid)
     writer.Write()
コード例 #55
0
ファイル: yf.py プロジェクト: aeslaughter/moose
p.add_option("-a", action="store_true", dest="twoD_example_alternative", help="Yield function will contain contributions from an alternative example 2D yield function")
(opts, args) = p.parse_args()

# get the com filename
if len(args) != 1:
   p.print_help()
   sys.exit(1)
in_file = args[0]

if opts.verbose: print "Reading", in_file
if in_file.endswith(".vtp"):
   indata = vtk.vtkXMLPolyDataReader()
   writer = vtk.vtkXMLPolyDataWriter()
elif in_file.endswith(".vtu"):
   indata = vtk.vtkXMLUnstructuredGridReader()
   writer = vtk.vtkXMLUnstructuredGridWriter()
elif in_file.endswith(".vtr"):
   indata = vtk.vtkXMLRectilinearGridReader()
   writer = vtk.vtkXMLRectilinearGridWriter()
else:
   print "This program has not yet been configured to read files of type", in_file
   sys.exit(2)


indata.SetFileName(in_file)
indata.Update()
indata = indata.GetOutput()

if opts.verbose: print "Generating", opts.name

yf = vtk.vtkDoubleArray()
コード例 #56
0
ファイル: mesh_io.py プロジェクト: nschloe/nosh
def write(
          filename,
          vtk_mesh,
          point_data = None,
          cell_data = None,
          field_data = None
          ):
    '''Writes mesh together with data to a file.

    :params filename: File to write to.
    :type filename: str

    :params point_data: Named additional point data to write to the file.
    :type point_data: dict
    '''
    import os

    extension = os.path.splitext(filename)[1]
    # add point data
    is_exodus_format = extension in [ '.ex2', '.exo', '.e' ]
    if point_data:
        for name, data in point_data.iteritems():
            new_name = name
            # There is a naming inconsistency in VTK when it comes to
            # multivectors in Exodus files:
            # If a vector 'v' has two components, they are called 'v_r',
            # 'v_z' (note the underscore), if it has three, then they are
            # called 'vx', 'vy', 'vz'.
            # Make this consistent by appending an underscore if needed.
            # Note that for VTK files, this problem does not occur since
            # the label of a vector is always stored as a string.
            is_3d_vector = len(data.shape) == 2 and data.shape[1] == 3
            if is_exodus_format and is_3d_vector and name[-1] != '_':
                new_name += '_'
            vtk_mesh.GetPointData() \
                    .AddArray(_create_vtkarray(data, new_name))

    # add cell data
    if cell_data:
        for key, value in cell_data.iteritems():
            vtk_mesh.GetCellData() \
                    .AddArray(_create_vtkarray(value, key))

    # add field data
    if field_data:
        for key, value in field_data.iteritems():
            vtk_mesh.GetFieldData() \
                    .AddArray(_create_vtkarray(value, key))

    import re
    extension = os.path.splitext(filename)[1]
    if extension == '.vtu': # VTK XML format
        from vtk import vtkXMLUnstructuredGridWriter
        writer = vtkXMLUnstructuredGridWriter()
    elif extension == '.pvtu': # parallel VTK XML format
        from vtk import vtkXMLPUnstructuredGridWriter
        writer = vtkXMLPUnstructuredGridWriter()
    elif extension == '.vtk': # classical VTK format
        from vtk import vtkUnstructuredGridWriter
        writer = vtkUnstructuredGridWriter()
        writer.SetFileTypeToASCII()
    elif extension == '.xmf': # XDMF format
        from vtk import vtkXdmfWriter
        writer = vtkXdmfWriter()
    elif extension in [ '.ex2', '.exo', '.e' ]: # Exodus II format
        from vtk import vtkExodusIIWriter
        writer = vtkExodusIIWriter()
        # If the mesh contains vtkModelData information, make use of it
        # and write out all time steps.
        writer.WriteAllTimeStepsOn()
    elif re.match('[^\.]*\.e\.\d+\.\d+', filename):
        # TODO handle parallel I/O with vtkPExodusIIWriter
        from vtk import vtkExodusIIWriter
        writer = vtkExodusIIWriter()
        # If the mesh contains vtkModelData information, make use of it
        # and write out all time steps.
        writer.WriteAllTimeStepsOn()
    else:
        raise IOError( 'Unknown file type \'%s\'.' % filename )

    writer.SetFileName( filename )

    writer.SetInputData( vtk_mesh )

    writer.Write()

    return
コード例 #57
0
ファイル: modred_run.py プロジェクト: chengdi123000/vtkPOD
def main(argv):
    import vtk
    from vtk.numpy_interface import dataset_adapter as dsa
    from vtk.numpy_interface import algorithms as algs 
    import numpy as np
    ### get parameters
    
    import os
    if not os.path.exists(OD):
        os.makedirs(OD)
    print '!!!Output to DIR: ',OD    

    if not read_fields_from_file:    

        ### Readin stage
        # using parallel openfoam reader
        ofr = vtk.vtkPOpenFOAMReader()
        # set reader's options 
        ofr.SetFileName(ID+IF)
	print '!!!open file: ',ID+IF
        ofr.SetDecomposePolyhedra(0)
        ofr.CacheMeshOn()
        ofr.SetCreateCellToPoint(0)
        ofr.DisableAllCellArrays()
        ofr.SetCellArrayStatus(fieldname,1)
        ofr.Update()

        # VTKArray is same as numpy array
        times = dsa.vtkDataArrayToVTKArray( ofr.GetTimeValues() ,ofr)
        # select the timestep between t0 and tf
        times = [t for t in times if t>=t0 and t<=tf]
	print '!!!available time steps: ',times
        N = len(times)
        np.save(times_filename,times)

        # using CellQuality to get cell's volumes as weight
        cq = vtk.vtkCellQuality()
        cq.SetInputConnection(0,ofr.GetOutputPort(0))
        cq.SetQualityMeasureToVolume()
        cq.Update()
        # cq is a composite dataset so I need GetBlock(0)
        geom = cq.GetOutputDataObject(0).GetBlock(0)

        # get volumes of cells V, size = L (number of cells)
        V = np.copy(dsa.WrapDataObject(geom).CellData['CellQuality'])
        # normalize it as weight 
        Vtotal = sum(V)
        V /= Vtotal
        
        # delete all other CellDataArray in geom DataSet, preserve its mesh structure and topology structure
        for i in range(geom.GetCellData().GetNumberOfArrays()):
            geom.GetCellData().RemoveArray(0)
        # add volume weight to it for saving
        geom.GetCellData().AddArray(dsa.numpyTovtkDataArray(V,'vol_weight'))

        # using *.vtu file format to save the vol_weight
        ugw = vtk.vtkXMLUnstructuredGridWriter()
        ugw.SetInputDataObject(geom)
        print '!!!Output vol_weight to file: ',geom_filename
        ugw.SetFileName(geom_filename)
        # using binary format
        ugw.SetDataModeToBinary()
        # enable compression
        ugw.SetCompressorTypeToZLib()
        # write to the file
        ugw.Write()
        # disconnect cq and ofr in order to isolate this dataset object from Update()
        cq.RemoveAllInputConnections(0)

        L = V.size # number of cells
        N = len(times) #number of timesteps
        # vector data is larger in size
        if field_is_vector == True:
            fields = np.zeros([N,L,3])
        else:
            fields = np.zeros([N,L])
        pipepout = ofr
        for i in range(N):
            t = times[i]
            print '!!!reading time:{}'.format(t)
            # set time value
            pipepout.GetOutputInformation(0).Set(vtk.vtkStreamingDemandDrivenPipeline.UPDATE_TIME_STEP(),t)
            # read in field data of new timestep
            pipepout.Update()
            # 
            d = dsa.WrapDataObject(pipepout.GetOutput().GetBlock(0))
            print '!!!reading field:{}'.format(fieldname)
            field = d.CellData[fieldname]
            # get the first component of composite dataset, it is the internalField
            fields[i]=np.copy(field)

        # write data to file
        print '!!!write field data to file:',fields_filename
        np.savez(fields_filename,fields)
    else: #read fields from file
        fields = np.load(fields_filename)['arr_0']
        
        ugr = vtk.vtkXMLUnstructuredGridReader()
        ugr.SetFileName(geom_filename)
        ugr.Update()
        geom = ugr.GetOutputDataObject(0)
        V = np.copy(dsa.WrapDataObject(geom).CellData['vol_weight'])
        
        times = np.load(times_filename)
        assert times.shape[0] == fields.shape[0]
        assert fields.shape[1] == V.shape[0]
        N = times.shape[0] 
        L = fields.shape[1]

        print 'Read in dataset complete'
    ### POD section


    # calculate average
    field_avg = np.average(fields, axis=0)
    if subtractAvg:
        fields = fields - field_avg

    import modred as mr
    
    if do_POD:
        # if field is a vector, reshape the fields and corresponding volument weight
        if field_is_vector:
            shp_vec = fields.shape
            shp_flat = (fields.shape[0],fields.shape[1]*fields.shape[2])
            fields = fields.reshape(shp_flat)
            V = np.tile(V,shp_vec[2])

        # POD
        print '!!!Doing POD analysis'
        modes, eigen_vals, eigen_vecs, correlation_mat = mr.compute_POD_matrices_snaps_method(fields.T,range(M),inner_product_weights=V,return_all=True)

        # if field is a vector, reshape the output matrix
        if field_is_vector:
            fields = fields.reshape(shp_vec)
            modes = np.asarray(modes).T.reshape((modes.shape[1],shp_vec[1],shp_vec[2]))
            V = V[:shp_vec[1]]

        if output_correlation_matrix:
            print "!!!output POD correlation matrix",POD_cm_filename
            np.savetxt(POD_cm_filename,correlation_mat,delimiter=',')

        if output_POD_temporal_modes: 
            print "!!!output POD temporal modes",POD_tm_filename
            # output temporal modes
            singular_vals = eigen_vals**0.5
            POD_mode_energy_normalized = eigen_vals/correlation_mat.trace()[0,0]
            cumsum_POD_mode_energy_normalized = np.cumsum(POD_mode_energy_normalized)
            # generate header string
            header_str = 'temporal modes\n'
            header_str += 'time,eigen value,singular value,normalized eigen value,accumulated normalized eigen value'
            for i in range(N-1):
                header_str += ',Mode{}'.format(i)
            header_str += '\n'
            for i in range(N-1):
                header_str += ',SV ={}'.format(singular_vals[i])
            header_str += '\n'
            for i in range(N-1):
                header_str += ',EV ={}'.format(eigen_vals[i])
            header_str += '\n'
            for i in range(N-1):
                header_str += ',NEnergy ={}'.format(POD_mode_energy_normalized[i])
            header_str += '\n'
            for i in range(N-1):
                header_str += ',CumsumEnergy ={}'.format(cumsum_POD_mode_energy_normalized[i])
            header_str += '\n'

            np.savetxt(POD_tm_filename, \
                        np.c_[times, \
                            eigen_vecs], \
                        delimiter = ',', \
                        header = header_str)
            

        if output_POD_spatial_modes:
            print "!!!output POD spatial Modes to ",POD_sm_filename
            #output to xml vtk unstructured grid file
            ugcd = geom.GetCellData()
            ugcd.Reset()
            ugcd.CopyAllOff()
            for i in range(ugcd.GetNumberOfArrays()):
                ugcd.RemoveArray(0)
            # import POD mode
            for i in range(M):
                ugcd.AddArray(dsa.numpyTovtkDataArray(modes[i],prefix+'_POD_mode_{}_{}'.format(fieldname,i)))
            # add average field
            ugcd.AddArray(dsa.numpyTovtkDataArray(field_avg,'field_{}_avg'.format(fieldname)))

            ugw = vtk.vtkXMLUnstructuredGridWriter()
            ugw.SetInputDataObject(geom)
            ugw.SetFileName(POD_sm_filename)
            ugw.Write()
        if doReconstruction:
            print "!!! do Reconstrution with {} POD modes at time {}".format(MR,ReconTime)
            #get an empty mesh
            ugcd = geom.GetCellData()
            ugcd.Reset()
            ugcd.CopyAllOff()
            for i in range(ugcd.GetNumberOfArrays()):
                ugcd.RemoveArray(0)
            # reconstruct from first MR POD modes
            # 
            ReconN = np.searchsorted(times,ReconTime)
            print "!!!actually, reconstruction is done at time {} rather than time {}".format(times[ReconN],ReconTime)
            recon_field = np.einsum("i...,i,i",modes[:MR],eigen_vals[:MR]**0.5,np.asarray(eigen_vecs)[ReconN,:MR])+field_avg;
            ugcd.AddArray(dsa.numpyTovtkDataArray(recon_field,prefix+'_POD_{}_Reconstructed_{}_{}'.format(MR,fieldname,ReconTime)))

            ugw = vtk.vtkXMLUnstructuredGridWriter()
            ugw.SetInputDataObject(geom)
            ugw.SetFileName(POD_reconstruction_filename)
            ugw.Write()
    if do_DMD:
        print "!!!Begin to calculate DMD modes"
        # if field is a vector, reshape the fields and corresponding volument weight
        if field_is_vector:
            shp_vec = fields.shape
            shp_flat = (fields.shape[0],fields.shape[1]*fields.shape[2])
            fields = fields.reshape(shp_flat)
            V = np.tile(V,shp_vec[2])

        # DMD, I do not know which mode is important, so I have to discard modes_
        modes_, ritz_vals, mode_norms, build_coeffs = mr.compute_DMD_matrices_snaps_method(fields.T,[],inner_product_weights=V,return_all=True)

        # if field is a vector, reshape the fields, V and output matrix
        if field_is_vector:
            fields = fields.reshape(shp_vec)
            V = V[:shp_vec[1]]
        # sorting
        eorder = np.argsort(mode_norms)[::-1]
        # re-order the outputs
        ritz_vals = ritz_vals[eorder]
        mode_norms = mode_norms[eorder]
        build_coeffs = build_coeffs[:,eorder]
        #build the DMD_modes
        DMD_modes = np.einsum('ijk,il->ljk', fields,build_coeffs[:,:M_DMD])
        
        if output_DMD_info:
            print "!!!output DMD info to :",DMD_info_filename
            # output modes info
            header_str = 'DMD modes info\n'
            header_str += 'ritz_vals.real,ritz_vals.imag,growth_rate, frequency, mode_norms\n'
            header_str += r'AU,AU,1/s, Hz, AU'
            dt = np.average(times[1:]-times[:-1]) #time step
            np.savetxt(DMD_info_filename, \
                        np.c_[ np.real(ritz_vals), \
                            np.imag(ritz_vals), \
                            np.log(np.abs(ritz_vals))/dt, \
                            np.angle(ritz_vals)/dt, \
                            mode_norms], \
                        delimiter = ',', \
                        header = header_str) 

        if output_DMD_build_coeffs:
            print "!!!output DMD build coeffs. to :",DMD_build_coeffs_filename
            np.savez(DMD_build_coeffs_filename, build_coeffs)
            
        if output_DMD_spatial_modes:
            print "!!!output DMD info to :",DMD_sm_filename
            #output to xml vtk unstructured grid file
            ugcd = geom.GetCellData()
            ugcd.Reset()
            ugcd.CopyAllOff()
            for i in range(ugcd.GetNumberOfArrays()):
                ugcd.RemoveArray(0)
            #import pi
            from numpy import pi
            
            for i in range(M_DMD):
                ugcd.AddArray(dsa.numpyTovtkDataArray(np.abs(DMD_modes[i]),prefix+'_DMD_mode_abs_{}_{}'.format(fieldname,i)))
                ugcd.AddArray(dsa.numpyTovtkDataArray(np.angle(DMD_modes[i])*180/pi,prefix+'_DMD_mode_angle_{}_{}'.format(fieldname,i)))


            ugw = vtk.vtkXMLUnstructuredGridWriter()
            ugw.SetInputDataObject(geom)
            ugw.SetFileName(DMD_sm_filename)
            ugw.Write()
コード例 #58
0
ファイル: iolib.py プロジェクト: ajgeers/utils
def writevtu(grid, path):
    """Write VTU-files, i.e. unstructured grids in VTK XML format."""
    writer = vtk.vtkXMLUnstructuredGridWriter()
    writer.SetInput(grid)
    writer.SetFileName(path)
    writer.Write()
コード例 #59
0
  def ComputeObjective(self,MRTIDataDirectory,VolumeOfInterest ):
    print self.SEMDataDirectory 
    ObjectiveFunction = 0.0
  
    # loop over time points of interest
    for idwrite,(SEMtimeID,MRTItimeID) in enumerate([(0,135),(0,136),(0,137),(0,138)]):
  
      mrtifilename = '%s/temperature.%04d.vtk' % (MRTIDataDirectory,MRTItimeID) 
      if MRTItimeID in self.DataDictionary:
        print "already loaded",  mrtifilename 
      else:
        print 'opening' , mrtifilename 
        # FIXME vtk needs to be loaded AFTER kernel is built
        import vtk
        import vtk.util.numpy_support as vtkNumPy 
        print "using vtk version", vtk.vtkVersion.GetVTKVersion()
        print "read SEM data"
        vtkImageReader = vtk.vtkDataSetReader() 
        vtkImageReader.SetFileName(mrtifilename )
        vtkImageReader.Update() 
        ## image_cells = vtkImageReader.GetOutput().GetPointData() 
        ## data_array = vtkNumPy.vtk_to_numpy(image_cells.GetArray('scalars')) 
        
        # extract voi for QOI
        vtkVOIExtract = vtk.vtkExtractVOI() 
        vtkVOIExtract.SetInput( vtkImageReader.GetOutput() ) 
        vtkVOIExtract.SetVOI( VolumeOfInterest  ) 
        vtkVOIExtract.Update()
        mrti_point_data= vtkVOIExtract.GetOutput().GetPointData() 
        mrti_array = vtkNumPy.vtk_to_numpy(mrti_point_data.GetArray('image_data')) 
        #print mrti_array
        #print type(mrti_array)
  
        print "project SEM onto MRTI for comparison"
        vtkResample = vtk.vtkCompositeDataProbeFilter()
        vtkResample.SetSource( vtkVOIExtract.GetOutput() )
        vtkResample.SetInput( self.SEMRegister.GetOutput() ) 
        vtkResample.Update()
  
        if ( self.DebugObjective ):
          roifileName = "%s/mrti.%04d.vtu" % (self.SEMDataDirectory,MRTItimeID)
          print "writing ", roifileName 
          start = time.clock()
          # setup mrti projection file
          vtkTemperatureWriter = vtk.vtkXMLUnstructuredGridWriter()
          vtkTemperatureWriter.SetFileName( roifileName )
          vtkTemperatureWriter.SetInput(vtkResample.GetOutput())
          vtkTemperatureWriter.Update()
          elapsed = (time.clock() - start)
          print "write output", elapsed
  
        print " accumulate objective function"
        fem_point_data= vtkResample.GetOutput().GetPointData() 
        self.DataDictionary[MRTItimeID] = vtkNumPy.vtk_to_numpy(fem_point_data.GetArray('image_data')) 
        #print fem_array 
        #print type(fem_array )

      h_mrti = self.DataDictionary[MRTItimeID] 
      mf = cl.mem_flags
      d_mrti = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=h_mrti )
      # TODO need to get cl buffer from brainNek
      d_fem  = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=h_mrti )

      # storage for output
      dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, h_mrti.nbytes)

      self.prg.diff_sq(self.queue, h_mrti.shape, None, d_mrti , d_fem , dest_buf)

      mrti_minus_fem_squared = numpy.empty_like(h_mrti)
      cl.enqueue_copy(self.queue, mrti_minus_fem_squared , dest_buf)
      ObjectiveFunction = ObjectiveFunction + mrti_minus_fem_squared.sum()

    return ObjectiveFunction 
コード例 #60
0
ファイル: vtk_io.py プロジェクト: nilswagner/meshio
def write(filetype,
          filename,
          points,
          cells,
          point_data=None,
          cell_data=None,
          field_data=None):

    vtk_mesh = _generate_vtk_mesh(points, cells)
    # add point data
    if point_data is not None:
        pd = vtk_mesh.GetPointData()
        for name, X in point_data.iteritems():
            # There is a naming inconsistency in VTK when it comes to
            # multivectors in Exodus files:
            # If a vector 'v' has two components, they are called 'v_r', 'v_z'
            # (note the underscore), if it has three, then they are called
            # 'vx', 'vy', 'vz'.  Make this consistent by appending an
            # underscore if needed.  Note that for VTK files, this problem does
            # not occur since the label of a vector is always stored as a
            # string.
            if filetype == 'exodus' and len(X.shape) == 2 \
               and X.shape[1] == 3 and name[-1] != '_':
                name += '_'
            pd.AddArray(_create_vtkarray(X, name))

    # add cell data
    if cell_data:
        cd = vtk_mesh.GetCellData()
        for key, value in cell_data.iteritems():
            cd.AddArray(_create_vtkarray(value, key))

    # add field data
    if field_data:
        fd = vtk_mesh.GetFieldData()
        for key, value in field_data.iteritems():
            fd.AddArray(_create_vtkarray(value, key))

    if filetype == 'vtk':  # classical vtk format
        writer = vtk.vtkUnstructuredGridWriter()
        writer.SetFileTypeToASCII()
    elif filetype == 'vtu':  # vtk xml format
        writer = vtk.vtk.vtkXMLUnstructuredGridWriter()
    elif filetype == 'pvtu':  # parallel vtk xml format
        writer = vtk.vtkXMLUnstructuredGridWriter()
    elif filetype == 'exodus':  # exodus ii format
        writer = vtk.vtkExodusIIWriter()
        # if the mesh contains vtkmodeldata information, make use of it
        # and write out all time steps.
        writer.WriteAllTimeStepsOn()
    else:
        raise RuntimeError('unknown file type \'%s\'.' % filetype)

    writer.SetFileName(filename)
    try:
        writer.SetInput(vtk_mesh)
    except AttributeError:
        writer.SetInputData(vtk_mesh)
    writer.Write()

    return