extract surface on a distributed dataset


When I use the extract surface on data distributed by mpi, the mpi boundaries get extracted as well. This make sense, but I would like to avoid that. Is there a way to get only the full domain surfaces?

Here is how to reproduce:

mpirun -np 4 pvserver
connect a ParaView client to the server
create a wavelet source
convert it to a partionned data set collection (not necessary, but that what my real data is)
extract surface
clip to see the inside

Many thanks,

Have you tried the Ghost Cells Generator filter? Or you could generate the ghost cells yourself inside of whatever is generating your data.

Thanks for your quick answer.

Indeed I have and it does not fix the issue.

I just noticed that you have a partitioned dataset collection (https://vtk.org/doc/nightly/html/classvtkPartitionedDataSetCollection.html#details). Since by definition the partitions may be essentially unrelated (e.g. some could be unstructured grids and some could be image datas) there’s no real way in general to figure out how to make the items in a partitioned dataset collection fit back together. If it were a partitioned dataset (https://vtk.org/doc/nightly/html/classvtkPartitionedDataSet.html) then the Ghost Cells Generator filter should work since there should be homogeneity within the items.

So, I think you’d need to either specify the ghost information yourself when generating the data or use a different dataset type.

Thanks for your insight. The conversion from an image data to a partitioned dataset collection creates a collection of one partitioned data set. I can use ExtractBlock to extract all the wavelet data in a single partitioned dataset to which I applied the ghost cell generator. I still end up with the mpi boundaries, and for some reason some of the surfaces are missing. Any ideas?

Could you share an actual data ? I just want to check we are trying to fix the actual issue at play here.

My data comes to ParaView through Catalyst2, so it’s not easy to reproduce offline. If I write the data to disk, then I can’t figure out how to distributed again using ParaView only.

Seems to me there’s a bug in the Ghost Cell Generator filter. Let me try to explain what is expected here, since there seems to be some confusion based on a quick glance of the responses.

  1. Since you’re using Catalyst2, the data coming into ParaView will either be a PartitionedDataSetCollection (PDC) or PartitionedDataSet (PD). In either case, for different partitions of a data block split across ranks, all individual datasets will show up as partitions in a single PD.
  2. Unless ghost information is already present in the data being provided to Catalyst, there’s no automatic addition of ghost arrays in the pipeline. So if you directly apply ExtractSurface filter to a PD (or PDC), you’ll see internal faces.
  3. Now, one is expected to use Ghost Cells Generator. Ghost Cells Generator is intended to process each PD at a time and exchange boundary elements to generate ghost layer for each dataset in the PD. This seems to not be working as expected. I suspect there’s a bug handling ghost layers when partitions are structured datasets – a case the implementation should support, IIRC (cc @Yohann_Bearzi).

@utkarsh.ayachit @cory.quammen @Yohann_Bearzi Utkarsh, thanks for the analysis. If soneone writes this up, I will make sure it gets funded. Be sure to mention me in the bug…