def test(self): p = dm.vtkPartitionedDataSet() s = ic.vtkRTAnalyticSource() s.SetWholeExtent(0, 10, 0, 10, 0, 5) s.Update() p1 = dm.vtkImageData() p1.ShallowCopy(s.GetOutput()) s.SetWholeExtent(0, 10, 0, 10, 5, 10) s.Update() p2 = dm.vtkImageData() p2.ShallowCopy(s.GetOutput()) p.SetPartition(0, p1) p.SetPartition(1, p2) p2 = dm.vtkPartitionedDataSet() p2.ShallowCopy(p) c = dm.vtkPartitionedDataSetCollection() c.SetPartitionedDataSet(0, p) c.SetPartitionedDataSet(1, p2) s = SimpleFilter() s.SetInputDataObject(c) s.Update() for i in (0, 1): self.assertEqual( s.GetOutputDataObject(0).GetPartitionedDataSet( i).GetFieldData().GetArray("counter").GetValue(0), i)
def create_dataset(timestep, args, piece, npieces): # We'll use vtkRTAnalyticSource to generate our dataset # to keep things simple. from vtkmodules.vtkImagingCore import vtkRTAnalyticSource wavelet = vtkRTAnalyticSource() ext = (args.size - 1) // 2 wavelet.SetWholeExtent(-ext, ext, -ext, ext, -ext, ext) wholeExtent = wavelet.GetWholeExtent() # put in some variation in the point data that changes with timestep wavelet.SetMaximum(255 + 200 * math.sin(timestep)) # using 'UpdatePiece' lets us generate a subextent based on the # 'piece' and 'npieces'; thus works seamlessly in distributed and # non-distributed modes wavelet.UpdatePiece(piece, npieces, 0) # typically, here you'll have some adaptor code that converts your # simulation data into a vtkDataObject subclass. In this example, # there's nothing to do since we're directly generating a # vtkDataObject. dataset = wavelet.GetOutputDataObject(0) return (dataset, wholeExtent)
def test(self): p = dm.vtkPartitionedDataSet() s = ic.vtkRTAnalyticSource() s.SetWholeExtent(0, 10, 0, 10, 0, 5) s.Update() p1 = dm.vtkImageData() p1.ShallowCopy(s.GetOutput()) s.SetWholeExtent(0, 10, 0, 10, 5, 10) s.Update() p2 = dm.vtkImageData() p2.ShallowCopy(s.GetOutput()) p.SetPartition(0, p1) p.SetPartition(1, p2) p2 = dm.vtkPartitionedDataSet() p2.ShallowCopy(p) c = dm.vtkPartitionedDataSetCollection() c.SetPartitionedDataSet(0, p) c.SetPartitionedDataSet(1, p2) s = SimpleFilter() s.SetInputDataObject(c) s.Update() for i in (0,1): self.assertEqual(s.GetOutputDataObject(0).GetPartitionedDataSet(i).GetFieldData().GetArray("counter").GetValue(0), i)
def test(self): p = dm.vtkPartitionedDataSet() s = ic.vtkRTAnalyticSource() s.SetWholeExtent(0, 10, 0, 10, 0, 5) s.Update() p1 = dm.vtkImageData() p1.ShallowCopy(s.GetOutput()) s.SetWholeExtent(0, 10, 0, 10, 5, 10) s.Update() p2 = dm.vtkImageData() p2.ShallowCopy(s.GetOutput()) p.SetPartition(0, p1) p.SetPartition(1, p2) p2 = dm.vtkPartitionedDataSet() p2.ShallowCopy(p) c = dm.vtkPartitionedDataSetCollection() c.SetPartitionedDataSet(0, p) c.SetPartitionedDataSet(1, p2) tmpdir = vtkGetTempDir() fname = tmpdir + "/testcompowriread.vtk" w = il.vtkCompositeDataWriter() w.SetInputData(c) w.SetFileName(fname) w.Write() r = il.vtkCompositeDataReader() r.SetFileName(fname) r.Update() o = r.GetOutputDataObject(0) self.assertTrue(o.IsA("vtkPartitionedDataSetCollection")) nd = o.GetNumberOfPartitionedDataSets() self.assertEqual(nd, 2) for i in range(nd): p = o.GetPartitionedDataSet(i) p2 = c.GetPartitionedDataSet(i) self.assertTrue(p.IsA("vtkPartitionedDataSet")) self.assertEqual(p.GetNumberOfPartitions(), 2) self.assertEqual( p.GetPartition(0).GetNumberOfCells(), p.GetPartition(0).GetNumberOfCells()) del (r) import gc gc.collect() os.remove(fname)
def test(self): p = dm.vtkPartitionedDataSet() s = ic.vtkRTAnalyticSource() s.SetWholeExtent(0, 10, 0, 10, 0, 5) s.Update() p1 = dm.vtkImageData() p1.ShallowCopy(s.GetOutput()) s.SetWholeExtent(0, 10, 0, 10, 5, 10) s.Update() p2 = dm.vtkImageData() p2.ShallowCopy(s.GetOutput()) p.SetPartition(0, p1) p.SetPartition(1, p2) p2 = dm.vtkPartitionedDataSet() p2.ShallowCopy(p) c = dm.vtkPartitionedDataSetCollection() c.SetPartitionedDataSet(0, p) c.SetPartitionedDataSet(1, p2) tmpdir = vtkGetTempDir() fname = tmpdir+"/testcompowriread.vtk" w = il.vtkCompositeDataWriter() w.SetInputData(c) w.SetFileName(fname) w.Write() r = il.vtkCompositeDataReader() r.SetFileName(fname) r.Update() o = r.GetOutputDataObject(0) self.assertTrue(o.IsA("vtkPartitionedDataSetCollection")) nd = o.GetNumberOfPartitionedDataSets() self.assertEqual(nd, 2) for i in range(nd): p = o.GetPartitionedDataSet(i) p2 = c.GetPartitionedDataSet(i) self.assertTrue(p.IsA("vtkPartitionedDataSet")) self.assertEqual(p.GetNumberOfPartitions(), 2) self.assertEqual(p.GetPartition(0).GetNumberOfCells(), p.GetPartition(0).GetNumberOfCells()) del(r) import gc gc.collect() os.remove(fname)
def test(self): p = dm.vtkPartitionedDataSet() s = ic.vtkRTAnalyticSource() s.SetWholeExtent(0, 10, 0, 10, 0, 5) s.Update() p1 = dm.vtkImageData() p1.ShallowCopy(s.GetOutput()) s.SetWholeExtent(0, 10, 0, 10, 5, 10) s.Update() p2 = dm.vtkImageData() p2.ShallowCopy(s.GetOutput()) p.SetPartition(0, p1) p.SetPartition(1, p2) tmpdir = vtkGetTempDir() fname = tmpdir+"/testxmlpartds.vtpd" w = ixml.vtkXMLPartitionedDataSetWriter() w.SetInputData(p) w.SetFileName(fname) w.Write() r = ixml.vtkXMLPartitionedDataSetReader() r.SetFileName(fname) r.Update() o = r.GetOutputDataObject(0) print(o.IsA("vtkPartitionedDataSet")) np = o.GetNumberOfPartitions() self.assertEqual(np, 2) for i in range(np): d = o.GetPartition(i) d2 = p.GetPartition(i) self.assertTrue(d.IsA("vtkImageData")) self.assertEqual(d.GetNumberOfCells(), d2.GetNumberOfCells()) os.remove(fname)
import dash import dash_html_components as html import dash_vtk from dash_vtk.utils import to_volume_state try: # VTK 9+ from vtkmodules.vtkImagingCore import vtkRTAnalyticSource except: # Old VTK from vtk.vtkImagingCore import vtkRTAnalyticSource # Use VTK to get some data data_source = vtkRTAnalyticSource() data_source.Update() # <= Execute source to produce an output dataset = data_source.GetOutput() # Use helper to get a volume structure that can be passed as-is to a Volume volume_state = to_volume_state(dataset) # No need to select field content = dash_vtk.View([ dash_vtk.VolumeRepresentation([ # GUI to control Volume Rendering # + Setup good default at startup dash_vtk.VolumeController(), # Actual volume dash_vtk.ShareDataSet([ dash_vtk.Volume(state=volume_state), ]), ]),
def test(self): p = dm.vtkPartitionedDataSet() s = ic.vtkRTAnalyticSource() s.SetWholeExtent(0, 10, 0, 10, 0, 5) s.Update() p1 = dm.vtkImageData() p1.ShallowCopy(s.GetOutput()) s.SetWholeExtent(0, 10, 0, 10, 5, 10) s.Update() p2 = dm.vtkImageData() p2.ShallowCopy(s.GetOutput()) p.SetPartition(0, p1) p.SetPartition(1, p2) p2 = dm.vtkPartitionedDataSet() p2.ShallowCopy(p) c = dm.vtkPartitionedDataSetCollection() c.SetPartitionedDataSet(0, p) c.SetPartitionedDataSet(1, p2) # SimpleFilter: sf = SimpleFilter() sf.SetInputDataObject(c) sf.Update() self.assertEqual(sf.GetOutputDataObject(0).GetNumberOfPartitionedDataSets(), 2) for i in (0, 1): pdsc = sf.GetOutputDataObject(0) self.assertEqual(pdsc.GetClassName(), "vtkPartitionedDataSetCollection") pds = pdsc.GetPartitionedDataSet(i) self.assertEqual(pds.GetClassName(), "vtkPartitionedDataSet") self.assertEqual(pds.GetNumberOfPartitions(), 2) for j in (0, 1): part = pds.GetPartition(j) countArray = part.GetFieldData().GetArray("counter") info = countArray.GetInformation() self.assertEqual(countArray.GetValue(0), i * 2 + j); self.assertEqual(info.Get(dm.vtkDataObject.DATA_TYPE_NAME()), "vtkImageData") # PartitionAwareFilter pf = PartitionAwareFilter() pf.SetInputDataObject(c) pf.Update() self.assertEqual(pf.GetOutputDataObject(0).GetNumberOfPartitionedDataSets(), 2) for i in (0, 1): pdsc = pf.GetOutputDataObject(0) self.assertEqual(pdsc.GetClassName(), "vtkPartitionedDataSetCollection") pds = pdsc.GetPartitionedDataSet(i) self.assertEqual(pds.GetClassName(), "vtkPartitionedDataSet") self.assertEqual(pds.GetNumberOfPartitions(), 0) countArray = pds.GetFieldData().GetArray("counter") info = countArray.GetInformation() self.assertEqual(countArray.GetValue(0), i); self.assertEqual(info.Get(dm.vtkDataObject.DATA_TYPE_NAME()), "vtkPartitionedDataSet") # PartitionCollectionAwareFilter pcf = PartitionCollectionAwareFilter() pcf.SetInputDataObject(c) pcf.Update() self.assertEqual(pcf.GetOutputDataObject(0).GetNumberOfPartitionedDataSets(), 0) pdsc = pcf.GetOutputDataObject(0) self.assertEqual(pdsc.GetClassName(), "vtkPartitionedDataSetCollection") countArray = pdsc.GetFieldData().GetArray("counter") info = countArray.GetInformation() self.assertEqual(countArray.GetValue(0), 0); self.assertEqual(info.Get(dm.vtkDataObject.DATA_TYPE_NAME()), "vtkPartitionedDataSetCollection") # CompositeAwareFilter cf = CompositeAwareFilter() cf.SetInputDataObject(c) cf.Update() self.assertEqual(pcf.GetOutputDataObject(0).GetNumberOfPartitionedDataSets(), 0) pdsc = pcf.GetOutputDataObject(0) self.assertEqual(pdsc.GetClassName(), "vtkPartitionedDataSetCollection") countArray = pdsc.GetFieldData().GetArray("counter") info = countArray.GetInformation() self.assertEqual(countArray.GetValue(0), 0); self.assertEqual(info.Get(dm.vtkDataObject.DATA_TYPE_NAME()), "vtkPartitionedDataSetCollection")
def test(self): p = dm.vtkPartitionedDataSet() s = ic.vtkRTAnalyticSource() s.SetWholeExtent(0, 10, 0, 10, 0, 5) s.Update() p1 = dm.vtkImageData() p1.ShallowCopy(s.GetOutput()) s.SetWholeExtent(0, 10, 0, 10, 5, 10) s.Update() p2 = dm.vtkImageData() p2.ShallowCopy(s.GetOutput()) p.SetPartition(0, p1) p.SetPartition(1, p2) p2 = dm.vtkPartitionedDataSet() p2.ShallowCopy(p) c = dm.vtkPartitionedDataSetCollection() c.SetPartitionedDataSet(0, p) c.SetPartitionedDataSet(1, p2) # SimpleFilter: sf = SimpleFilter() sf.SetInputDataObject(c) sf.Update() self.assertEqual( sf.GetOutputDataObject(0).GetNumberOfPartitionedDataSets(), 2) for i in (0, 1): pdsc = sf.GetOutputDataObject(0) self.assertEqual(pdsc.GetClassName(), "vtkPartitionedDataSetCollection") pds = pdsc.GetPartitionedDataSet(i) self.assertEqual(pds.GetClassName(), "vtkPartitionedDataSet") self.assertEqual(pds.GetNumberOfPartitions(), 2) for j in (0, 1): part = pds.GetPartition(j) countArray = part.GetFieldData().GetArray("counter") info = countArray.GetInformation() self.assertEqual(countArray.GetValue(0), i * 2 + j) self.assertEqual(info.Get(dm.vtkDataObject.DATA_TYPE_NAME()), "vtkImageData") # PartitionAwareFilter pf = PartitionAwareFilter() pf.SetInputDataObject(c) pf.Update() self.assertEqual( pf.GetOutputDataObject(0).GetNumberOfPartitionedDataSets(), 2) for i in (0, 1): pdsc = pf.GetOutputDataObject(0) self.assertEqual(pdsc.GetClassName(), "vtkPartitionedDataSetCollection") pds = pdsc.GetPartitionedDataSet(i) self.assertEqual(pds.GetClassName(), "vtkPartitionedDataSet") self.assertEqual(pds.GetNumberOfPartitions(), 0) countArray = pds.GetFieldData().GetArray("counter") info = countArray.GetInformation() self.assertEqual(countArray.GetValue(0), i) self.assertEqual(info.Get(dm.vtkDataObject.DATA_TYPE_NAME()), "vtkPartitionedDataSet") # PartitionCollectionAwareFilter pcf = PartitionCollectionAwareFilter() pcf.SetInputDataObject(c) pcf.Update() self.assertEqual( pcf.GetOutputDataObject(0).GetNumberOfPartitionedDataSets(), 0) pdsc = pcf.GetOutputDataObject(0) self.assertEqual(pdsc.GetClassName(), "vtkPartitionedDataSetCollection") countArray = pdsc.GetFieldData().GetArray("counter") info = countArray.GetInformation() self.assertEqual(countArray.GetValue(0), 0) self.assertEqual(info.Get(dm.vtkDataObject.DATA_TYPE_NAME()), "vtkPartitionedDataSetCollection") # CompositeAwareFilter cf = CompositeAwareFilter() cf.SetInputDataObject(c) cf.Update() self.assertEqual( pcf.GetOutputDataObject(0).GetNumberOfPartitionedDataSets(), 0) pdsc = pcf.GetOutputDataObject(0) self.assertEqual(pdsc.GetClassName(), "vtkPartitionedDataSetCollection") countArray = pdsc.GetFieldData().GetArray("counter") info = countArray.GetInformation() self.assertEqual(countArray.GetValue(0), 0) self.assertEqual(info.Get(dm.vtkDataObject.DATA_TYPE_NAME()), "vtkPartitionedDataSetCollection")
# Here's our simulation main loop try: from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.Get_rank() num_ranks = comm.Get_size() except ImportError: print("missing mpi4py, running in serial (non-distributed) mode") rank = 0 num_ranks = 1 # We'll use vtkRTAnalyticSource to generate our dataset # to keep things simple. from vtkmodules.vtkImagingCore import vtkRTAnalyticSource wavelet = vtkRTAnalyticSource() ext = (args.size - 1) // 2 wavelet.SetWholeExtent(-ext, ext, -ext, ext, -ext, ext) wholeExtent = wavelet.GetWholeExtent() numsteps = args.timesteps for step in range(numsteps): if args.delay > 0: import time time.sleep(args.delay) if rank == 0: print("timestep: {0}/{1}".format(step + 1, numsteps)) # assume simulation time starts at 0 time = step / float(numsteps)