def RequestData(self, vtkself, request, inInfo, outInfo): contr = vtk.vtkMPIController() rank = contr.GetLocalProcessId() #u, v, self.Rho = memberReader.readMember(self.Index) u, v = memberReader.readMember(self.Index) print 'reading member: ' + str(self.Index) npts = u.shape[0] * u.shape[1] self.Vel = numpy.zeros((npts,3)) self.Vel[:,0] = u.reshape(npts,) self.Vel[:,1] = v[0:127,0:127].reshape(npts,) velArray = nsup.numpy_to_vtk(self.Vel) velArray.SetName("velocity") #rhoArray = nsup.numpy_to_vtk(self.Rho[0:127,0:127].reshape((npts,))) #rhoArray.SetName("rho") image = outInfo.GetInformationObject(0).Get(vtk.vtkDataObject.DATA_OBJECT()) image.SetDimensions(127, 127, 1) image.GetPointData().AddArray(velArray) #image.GetPointData().AddArray(rhoArray) return 1
def RequestData(self, vtkself, request, inInfo, outInfo): contr = vtk.vtkMPIController() rank = contr.GetLocalProcessId() #u, v, self.Rho = memberReader.readMember(self.Index) u, v = memberReader.readMember(self.Index) print 'reading member: ' + str(self.Index) npts = u.shape[0] * u.shape[1] self.Vel = numpy.zeros((npts, 3)) self.Vel[:, 0] = u.reshape(npts, ) self.Vel[:, 1] = v[0:127, 0:127].reshape(npts, ) velArray = nsup.numpy_to_vtk(self.Vel) velArray.SetName("velocity") #rhoArray = nsup.numpy_to_vtk(self.Rho[0:127,0:127].reshape((npts,))) #rhoArray.SetName("rho") image = outInfo.GetInformationObject(0).Get( vtk.vtkDataObject.DATA_OBJECT()) image.SetDimensions(127, 127, 1) image.GetPointData().AddArray(velArray) #image.GetPointData().AddArray(rhoArray) return 1
import sys try: import numpy except ImportError: print("Numpy (http://numpy.scipy.org) not found.", end=' ') print("This test requires numpy!") sys.exit(0) import vtk from vtk.test import Testing import vtk.numpy_interface.dataset_adapter as dsa import vtk.numpy_interface.algorithms as algs from mpi4py import MPI c = vtk.vtkMPIController() #c.SetGlobalController(None) rank = c.GetLocalProcessId() size = c.GetNumberOfProcesses() def PRINT(text, values): if values is dsa.NoneArray: values = numpy.array(0, dtype=numpy.float64) else: values = numpy.array(numpy.sum(values)).astype(numpy.float64) res = numpy.array(values) MPI.COMM_WORLD.Allreduce([values, MPI.DOUBLE], [res, MPI.DOUBLE], MPI.SUM) assert numpy.abs(res) < 1E-5 if rank == 0: print(text, res)
def streampoints(filename): reader = vtk.vtkStructuredPointsReader() reader.SetFileName(filename) reader.Update() outline=vtk.vtkOutlineFilter() outline.SetInputConnection(reader.GetOutputPort()) lineMapper = vtk.vtkDataSetMapper() lineMapper.SetInputConnection(outline.GetOutputPort()) lineActor = vtk.vtkActor() lineActor.SetMapper(lineMapper) pdata=vtk.vtkPolyData() points=vtk.vtkPoints() #Selecting source for Streamtracer ns=200 r=100 Z=25 for i in range(0, ns): a=(2*i*pi)/ns X=r*cos(a) Y=r*sin(a) # for Z in range(0,256): points.InsertNextPoint(float(X),float(Y),float(Z)) pdata.SetPoints(points) integ0 = vtk.vtkRungeKutta4() integ1 = vtk.vtkRungeKutta4() integ2 = vtk.vtkRungeKutta4() # Defining controller for vtkDistributedStreamTracer controller=vtk.vtkMPIController() Stream0 = vtk.vtkDistributedStreamTracer() #Stream0 = vtk.vtkStreamTracer() Stream0.SetInputConnection(reader.GetOutputPort()) Stream0.SetSource(line0.GetOutput()) #Stream0.SetSource(pdata) # Setting the parameters for Integration. Here you can change the integration parameters according to your desire. Stream0.SetMaximumPropagation(255) Stream0.SetController(controller) Stream0.SetInitialIntegrationStepUnitToCellLengthUnit() Stream0.SetMaximumIntegrationStep(2000) Stream0.SetInitialIntegrationStep(0.5) Stream0.SetIntegrator(integ0) Stream0.SetIntegrationDirectionToBoth() Stream0.Update() # Visualizing streamline as a tube.Here you can change the radius of the streamtube by changing the values of radius. streamTube0 = vtk.vtkTubeFilter() streamTube0.SetInputConnection(Stream0.GetOutputPort()) streamTube0.SetRadius(0.25) streamTube0.SetNumberOfSides(16) #streamTube0.SetVaryRadiusToVaryRadiusByVector() mapStreamTube0 = vtk.vtkPolyDataMapper() mapStreamTube0.SetInputConnection(streamTube0.GetOutputPort()) #mapStreamTube.SetScalarRange(reader.GetOutput()) streamTubeActor0 = vtk.vtkActor() streamTubeActor0.SetMapper(mapStreamTube0) streamTubeActor0.GetProperty().BackfaceCullingOn() streamTubeActor0.GetProperty().SetColor(0, 1, 1) Stream1 = vtk.vtkDistributedStreamTracer() #Stream0 = vtk.vtkStreamTracer() Stream1.SetInputConnection(reader.GetOutputPort()) Stream1.SetSource(line1.GetOutput()) #Stream0.SetSource(pdata) Stream1.SetMaximumPropagation(255) Stream1.SetController(controller) Stream1.SetInitialIntegrationStepUnitToCellLengthUnit() Stream1.SetMaximumIntegrationStep(2000) Stream1.SetInitialIntegrationStep(0.5) Stream1.SetIntegrator(integ1) Stream1.SetIntegrationDirectionToBoth() Stream1.Update() streamTube1= vtk.vtkTubeFilter() streamTube1.SetInputConnection(Stream0.GetOutputPort()) streamTube1.SetRadius(0.25) streamTube1.SetNumberOfSides(12) #streamTube1.SetVaryRadiusToVaryRadiusByVector() mapStreamTube1 = vtk.vtkPolyDataMapper() mapStreamTube1.SetInputConnection(streamTube1.GetOutputPort()) #mapStreamTube.SetScalarRange(reader.GetOutput()) streamTubeActor1 = vtk.vtkActor() streamTubeActor1.SetMapper(mapStreamTube1) streamTubeActor1.GetProperty().BackfaceCullingOn() streamTubeActor1.GetProperty().SetColor(0.5, 0.25, 1) #ren.AddActor(lineActor) Stream2 = vtk.vtkDistributedStreamTracer() #Stream0 = vtk.vtkStreamTracer() Stream2.SetInputConnection(reader.GetOutputPort()) Stream2.SetSource(line2.GetOutput()) #Stream2.SetSource(line1.GetOutput()) #Stream2.SetSource(line0.GetOutput()) #Stream0.SetSource(pdata) Stream2.SetMaximumPropagation(255) Stream2.SetController(controller) Stream2.SetInitialIntegrationStepUnitToCellLengthUnit() Stream2.SetMaximumIntegrationStep(2000) Stream2.SetInitialIntegrationStep(0.5) Stream2.SetIntegrator(integ2) Stream2.SetIntegrationDirectionToBoth() Stream2.Update() streamTube2= vtk.vtkTubeFilter() streamTube2.SetInputConnection(Stream0.GetOutputPort()) streamTube2.SetRadius(0.25) streamTube2.SetNumberOfSides(12) #streamTube2.SetVaryRadiusToVaryRadiusByVector() mapStreamTube2 = vtk.vtkPolyDataMapper() mapStreamTube2.SetInputConnection(streamTube2.GetOutputPort()) #mapStreamTube.SetScalarRange(reader.GetOutput()) streamTubeActor2 = vtk.vtkActor() streamTubeActor2.SetMapper(mapStreamTube2) streamTubeActor2.GetProperty().BackfaceCullingOn() streamTubeActor2.GetProperty().SetColor(0, .025, 0.125) # ren.AddActor(lineActor) # Adding the streanline to the actor for rendering ren.AddActor(streamTubeActor0) ren.AddActor(streamTubeActor1) #ren.AddActor(streamTubeActor2) renWin.Render() ren.ResetCamera() # Selecting renderer good position and focal point. Here You can change the camera positin for viewing a good image that you need. ren.GetActiveCamera().SetPosition(0, 1,0) ren.GetActiveCamera().SetFocalPoint(0,0,0) ren.GetActiveCamera().SetViewUp(0,0 , 1) ren.GetActiveCamera().Dolly(1.4) ren.ResetCameraClippingRange() largestreamline=vtk.vtkRenderLargeImage() largestreamline.SetInput(ren) largestreamline.SetMagnification(9) #cam1 = ren.GetActiveCamera().Zoom(z) #cam1 = ren.GetActiveCamera().Elevation(2) #cam1 = ren.GetActiveCamera().Azimuth(-5) #ren.SetActiveCamera(cam1) ren.ResetCamera() # Writing .PNG Images of the streamlines with images. writer = vtk.vtkPNGWriter() writer.SetInputConnection(largestreamline.GetOutputPort()) writer.SetFileName("Streamline.png") writer.Modified() writer.Write()
def compute(whole, split): # prepare controller = vtk.vtkMPIController() vtk.vtkMultiProcessController.SetGlobalController(controller) rank = controller.GetLocalProcessId() nprocs = controller.GetNumberOfProcesses() # print('rank={0}'.format(rank)) # print('nprocs={0}'.format(nprocs)) # whole (wholeDataset, bounds, dimension) = readDataset(whole) if pow(2,dimension) != nprocs: print 'the number of procs must be 2^dimension' sys.exit() # coarse coarseData = vtk.vtkImageData() coarseData.CopyStructure(wholeDataset) coarseData.SetSpacing(0.1,0.1,0.1) if dimension == 2: coarseData.SetDimensions(11,11,1) else: coarseData.SetDimensions(11,11,11) # print data # print coarseData # compute moments momentsFilter = vtk.vtkComputeMoments() momentsFilter.SetFieldData(wholeDataset) momentsFilter.SetGridData(coarseData) momentsFilter.SetNameOfPointData(nameOfPointData) momentsFilter.SetUseFFT(0) momentsFilter.SetNumberOfIntegrationSteps(numberOfIntegrationSteps) momentsFilter.SetOrder(order) momentsFilter.SetRadiiArray([radius,0,0,0,0,0,0,0,0,0]) momentsFilter.Update() # if rank ==0: print momentsFilter # this is to make sure each proc only loads their piece ids_to_read = [rank] reqs = vtk.vtkInformation() reqs.Set(vtk.vtkCompositeDataPipeline.UPDATE_COMPOSITE_INDICES(), ids_to_read, 1) reader = vtk.vtkXMLMultiBlockDataReader() reader.SetFileName(split) reader.Update(reqs) # print('reader={0}'.format(reader.GetOutput())) multiblock = vtk.vtkMultiBlockDataSet.SafeDownCast(reader.GetOutput()) # print('multiblock={0}'.format(multiblock)) multipiece = vtk.vtkMultiPieceDataSet.SafeDownCast(multiblock.GetBlock(0)) # print('multipiece={0}'.format(multipiece)) data = vtk.vtkImageData.SafeDownCast(multipiece.GetPiece(rank)) # print('data={0}'.format(data)) # coarse coarseData = vtk.vtkImageData() coarseData.CopyStructure(data) coarseData.SetSpacing(0.1,0.1,0.1) if dimension == 2: coarseData.SetDimensions(6,6,1) else: coarseData.SetDimensions(6,6,6) # print data # coarseData # parallel pMomentsFilter = vtk.vtkPComputeMoments() pMomentsFilter.SetFieldData(data) pMomentsFilter.SetGridData(coarseData) pMomentsFilter.SetNameOfPointData(nameOfPointData) pMomentsFilter.SetNumberOfIntegrationSteps(numberOfIntegrationSteps) pMomentsFilter.SetRadiiArray([radius, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]) pMomentsFilter.Update(reqs) # if rank ==0: print pMomentsFilter # check for difference except for the global boundary (the probe and parallel probe filters behave differently there. So, there is a difference if numberOfIntegrationSteps > 0 ) diff = 0 for i in xrange(pMomentsFilter.GetOutput().GetPointData().GetNumberOfArrays()): diffArray = vtk.vtkDoubleArray() diffArray.SetName( pMomentsFilter.GetOutput().GetPointData().GetArrayName(i) ) diffArray.SetNumberOfComponents( 1 ) diffArray.SetNumberOfTuples( pMomentsFilter.GetOutput().GetNumberOfPoints() ) diffArray.Fill( 0.0 ) momentsArray = momentsFilter.GetOutput().GetPointData().GetArray(i) pMomentsArray = pMomentsFilter.GetOutput().GetPointData().GetArray(i) for j in xrange(pMomentsFilter.GetOutput().GetNumberOfPoints()): diffArray.SetTuple1(j, abs(momentsArray.GetTuple1(momentsFilter.GetOutput().FindPoint(pMomentsFilter.GetOutput().GetPoint(j))) - pMomentsArray.GetTuple1(j))) if (dimension == 2 and pMomentsFilter.GetOutput().GetPoint(j)[0] > 0 and pMomentsFilter.GetOutput().GetPoint(j)[0] < 1 and pMomentsFilter.GetOutput().GetPoint(j)[1] > 0 and pMomentsFilter.GetOutput().GetPoint(j)[1] < 1) or (dimension == 3 and pMomentsFilter.GetOutput().GetPoint(j)[0] > 0 and pMomentsFilter.GetOutput().GetPoint(j)[0] < 1 and pMomentsFilter.GetOutput().GetPoint(j)[1] > 0 and pMomentsFilter.GetOutput().GetPoint(j)[1] < 1 and pMomentsFilter.GetOutput().GetPoint(j)[2] > 0 and pMomentsFilter.GetOutput().GetPoint(j)[2] < 1): # if diffArray.GetTuple1(j) > 1e-10: # print rank, i, j, pMomentsFilter.GetOutput().GetPoint(j), diffArray.GetTuple(j) diff = max(diff, diffArray.GetTuple1(j)) if diff > 1e-10: print "test failed, maxdiff =", diff else: print "test successful" if rank == 0: print 'all done!'