Fix geometry filter for distributed multi-block datasets
This issue was created automatically from an original Mantis Issue. Further discussion may take place here.
The following e-mail exchange explains the issue:
Hi Paul,
This is a good start but it is not a full implementation. It is legitimate for some nodes to have NULL nodes and other non-NULL ones. Your code would break if that were the case because it skips empty (NULL) blocks. For example if I had the following dataset:
proc 0:
root -> polydata
proc 1:
root -> NULL
the first process would execute ExecuteBlock() once and the second one never causing communication issues and possible deadlock. The right fix is to make ExecuteBlock() and all the functions it calls work with NULL datasets and to turn off SkipEmptyNodes.
Also, some of the code in this filter relies on WholeExtent being set correctly. Essentially, WholeExtent is the (structured) extent of the whole dataset as if you gathered it on one proc. This is normally set by the reader for singleton datasets but not multi-block datasets. We should probably add support for adding this as meta-data (i.e. making GetWholeExtent() work) and fixing all multi-block readers that read structured data in parallel.
I will create a bug entry for this.
-berk
On Mon, Dec 7, 2009 at 12:50 PM, Edwards, Paul Paul.Edwards3@rolls-royce.com wrote:
Hi Berk,
Below is the patch to fix the outline in parallel for composite datasets. I just did as you said in your email ;)
Thanks,
Paul
Index: ./Servers/Filters/vtkPVGeometryFilter.cxx
===================================================================
RCS file: /cvsroot/ParaView3/ParaView3/Servers/Filters/vtkPVGeometryFilter.cxx,v
retrieving revision 1.98
diff -b -r1.98 vtkPVGeometryFilter.cxx
607a608,609
iter->SkipEmptyNodesOn();
622c624
< this->ExecuteBlock(block, tmpOut, 0);
this->ExecuteBlock(block, tmpOut, 1);