Skip to content

Commit 080622a

Browse files
vtkCleanArrays now support cleaning composite datasets.
vtkCleanArrays now allows removing/filling of partial arrays for composite datasets as well. That way, the filter can now be used to sycn arrays on composite datasets locally or in parallel along with non-composite datasets in parallel. Added a new test "TestCleanArrays" to test this filter.
1 parent fcd0436 commit 080622a

File tree

4 files changed

+277
-85
lines changed

4 files changed

+277
-85
lines changed

ParaViewCore/ServerManager/Default/Testing/Python/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ if (PARAVIEW_USE_MPI AND VTK_MPIRUN_EXE AND NOT WIN32)
139139
--symmetric)
140140
paraview_add_test_pvbatch_mpi(
141141
NO_DATA NO_OUTPUT NO_VALID
142+
TestCleanArrays.py
142143
TestMPI4PY.py
143144
ParallelPythonImport.py
144145
)
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
from __future__ import print_function
2+
3+
import vtk
4+
from vtk.vtkPVVTKExtensionsRendering import vtkCleanArrays
5+
cntrl = vtk.vtkMultiProcessController.GetGlobalController()
6+
rank = cntrl.GetLocalProcessId()
7+
numprocs = cntrl.GetNumberOfProcesses()
8+
9+
#-----------------------------------------------------------------------------
10+
if rank == 0:
11+
print("Testing on non-composite dataset")
12+
13+
def get_dataset(pa=None,ca=None):
14+
sphere = vtk.vtkSphereSource()
15+
sphere.Update()
16+
17+
data = sphere.GetOutputDataObject(0)
18+
data.GetPointData().Initialize()
19+
data.GetCellData().Initialize()
20+
21+
if pa:
22+
array = vtk.vtkIntArray()
23+
array.SetName(pa)
24+
array.SetNumberOfTuples(data.GetNumberOfPoints())
25+
data.GetPointData().AddArray(array)
26+
27+
if ca:
28+
array = vtk.vtkIntArray()
29+
array.SetName(ca)
30+
array.SetNumberOfTuples(data.GetNumberOfCells())
31+
data.GetCellData().AddArray(array)
32+
return data
33+
34+
35+
data = get_dataset("PD-%d" % rank, "CD-%d" % rank)
36+
cleanArrays = vtkCleanArrays()
37+
cleanArrays.SetInputDataObject(data)
38+
cleanArrays.SetController(cntrl)
39+
40+
# Test removing partial arrays.
41+
cleanArrays.FillPartialArraysOff()
42+
cleanArrays.Update()
43+
result = cleanArrays.GetOutputDataObject(0)
44+
45+
# Each rank tests the next ranks data.
46+
if numprocs > 1:
47+
assert result.GetPointData().GetArray("PD-%d" % ((rank+1)%numprocs)) is None and \
48+
result.GetCellData().GetArray("CD-%d" % ((rank+1)%numprocs)) is None
49+
50+
# Test filling partial arrays.
51+
cleanArrays.FillPartialArraysOn()
52+
cleanArrays.Update()
53+
result = cleanArrays.GetOutputDataObject(0)
54+
55+
# Each rank tests the next ranks data.
56+
assert result.GetPointData().GetNumberOfArrays() == numprocs and \
57+
result.GetCellData().GetNumberOfArrays() == numprocs
58+
59+
assert result.GetPointData().GetArray("PD-%d" % ((rank+1)%numprocs)) is not None and \
60+
result.GetCellData().GetArray("CD-%d" % ((rank+1)%numprocs)) is not None
61+
62+
63+
#-----------------------------------------------------------------------------
64+
if rank == 0:
65+
print("Testing on composite dataset")
66+
67+
68+
#-----------------------------------------------------------------------------
69+
# Dataset with identical arrays for non-empty datasets on all ranks.
70+
mb = vtk.vtkMultiBlockDataSet()
71+
mb.SetNumberOfBlocks(numprocs)
72+
mb.SetBlock(rank, get_dataset(pa="pa", ca="ca"))
73+
74+
cleanArrays.SetInputDataObject(mb)
75+
cleanArrays.FillPartialArraysOff()
76+
cleanArrays.Update()
77+
result = cleanArrays.GetOutputDataObject(0)
78+
assert result.GetBlock(rank).GetPointData().GetNumberOfArrays() == 1 and \
79+
result.GetBlock(rank).GetCellData().GetNumberOfArrays() == 1
80+
81+
cleanArrays.FillPartialArraysOn()
82+
cleanArrays.Update()
83+
result = cleanArrays.GetOutputDataObject(0)
84+
assert result.GetBlock(rank).GetPointData().GetNumberOfArrays() == 1 and \
85+
result.GetBlock(rank).GetCellData().GetNumberOfArrays() == 1
86+
87+
#-----------------------------------------------------------------------------
88+
# Dataset with partial arrays for non-empty datasets on all ranks.
89+
mb = vtk.vtkMultiBlockDataSet()
90+
mb.SetNumberOfBlocks(2*numprocs)
91+
mb.SetBlock(rank, get_dataset(pa="pa-%d" % rank, ca="ca-%d" % rank))
92+
# Let's add an extra block with new arrays so the test can work even when
93+
# numprocs == 1.
94+
mb.SetBlock(numprocs + rank, get_dataset(pa="pa", ca="ca"))
95+
96+
cleanArrays.SetInputDataObject(mb)
97+
cleanArrays.FillPartialArraysOff()
98+
cleanArrays.Update()
99+
result = cleanArrays.GetOutputDataObject(0)
100+
assert result.GetBlock(rank).GetPointData().GetNumberOfArrays() == 0 and \
101+
result.GetBlock(rank).GetCellData().GetNumberOfArrays() == 0
102+
103+
cleanArrays.FillPartialArraysOn()
104+
cleanArrays.Update()
105+
result = cleanArrays.GetOutputDataObject(0)
106+
assert result.GetBlock(rank).GetPointData().GetNumberOfArrays() == (numprocs+1) and \
107+
result.GetBlock(rank).GetCellData().GetNumberOfArrays() == (numprocs+1)
108+
print("%d-Passed!" % rank)

0 commit comments

Comments
 (0)