Efficient Subset Extraction from Multiblock Dataset with Several Zones


I have an overset multi block grid composed of around 1100 zones. For each zone, or block, I want to visualize a certain subset corresponding to my wall domains (generally the minimum K face in the I,J,K structured block). I have successfully created a python script that does precisely what I need, using the following filtering order: Extract Block (for each zone that contains a wall subset) > Extract Subset (each zone may have one or more subset extractions, depending on whether only the minimum K face is a wall or not) > Threshold (to extract the non-blanked cells in my overset grids).

This method works well and produces what I want, but it is very inefficient. It takes around 1.5 hours to process all the filters on my Mac, and still around 25 minutes on a beefy workstation. Besides, loading the resulting file is extremely slow, since it essentially has there three filters applied for each zone, resulting in a large number of filtering operations that ParaView has to load. Even worse than that is the fact that parallel performance increases the processing time, since I suspect ParaView does not distribute the hundreds of filtering operations across the different processors, instead splitting the grid for each filtering operation and then applying the filter on each process. Since the filtering operations are relatively inexpensive, this ends up incurring a higher compute time due to block splitting and distribution of little work among several processors. Please correct me if I’m wrong here.

Is there a more efficient way to obtain the same end result in ParaView?

I was surprised at how inefficient this became in ParaView compared to another post-processing software I’ve used in the past (Tecplot), which can handle these subset extractions very easily.

Any help would be greatly appreciated.

What is preventing you to use Threshold on your initial dataset ?

The main problem with that is that the resulting dataset after applying the Threshold filter is unstructured, and I need to isolate a subset of certain zones to render as walls (typically the minimum-L surface in the JKL structured domain, but not necessarily; these are defined externally and I read in a file with that information, but that’s beside the point).

I had some success by using a Programmable Filter where my input is a subset of these blocks, and then I modify the SetMinBlankingValue and SetMaxBlankingValue properties of a vtkBlankStructuredGrid that I create for each block (the blank variable is saved in the structured multi block dataset as an array of its own).

Do you see another way to do this while keeping a multi block structured dataset?