Distribution of vti data across processes creates duplicate global ids and inconsistent data
I use Paraview 5.10 and openMPI 4.0.3.
I want to distribute data in vti format across MPI processes, to obtain a distribution similar to what can be obtained with data in vtu format and a RedistributeDataset filter, which was that the points on the borders of multiple processes were duplicated on all those processes, but have the same Global Id.
To do the distribution of the vti data, I use the following Pipeline:
First, I execute the pipeline using the builtin pvserver:
Plane > ResampleToImage > RandomAttributes > GenerateGlobalIds
The Plane filter uses the default parameters. The ResampleToImage filter uses the following sampling Dimensions: 5, 5, 1. The RandomAttributes only has the option "Generate Point Scalars" checked. The GenerateGlobalIds filter uses the default parameters.
I then save the output of the Pipeline to a vti file.
Now, I execute Paraview using another server, executed with mpirun:
mpirun -n 2 pvserver
I then open the vti file, to save it as a pvti file (and therefore distribute the data across two MPI processes).
If I open this pvti file again, using the pvserver run with MPI, inconsistencies in the data can be found. Notably, there are now 29 points in the data (as I created a 5 by 5 plane, there should be 25 points). Different points share the same Global Id, even though they are clearly different because have different coordinates, such as the points of Global Id 10 (lines 10 and 11 in the above screenshot). The same point, for example the point located in 0,0,0, exists twice, with a globalId of 0 and of 10 (lines 0 and 11 of the above screenshot).
If I load the pvti file using the builtin server of Paraview, the problem disappears and only 25 points are shown in the spread sheet view, with no Global Id duplicates.
Am I doing something wrong here? I can't seem to find a way to distribute the vti data properly, and I would like to avoid using vtu format whenever possible, as it loads everything in memory, but I would also like have only one implementation of my algorithm to process both data types.