Ghost Points
This intent of this page is to get the discussion going on a new mechanism in VTK and ParaView to mark ownership of points in multi-process environments.
Motivation
It's simple: open ParaView, create a Sphere, apply Elevation filter, followed by Histogram (by the Elevation scalar). Do that in the built-in mode and now do then again in when connected to parallel pvserver (number of processes >= 2). The histograms generated are going to be different.
The reason is that when data is partitioned, the points along the boundary are often shared among more than one process (Figure 1 (a)) and there's no way for an algorithm to determine (without explicit communication) whether the point is present on more than 1 process, and if so, who's going to include that point in it's processing (i.e. claim ownership for the point).
Solution
We can use a concept similar to ghost-cells to mark ghost-points. A new vtkUnsignedCharArray named "vtkGhostPoints" can be added to the PointData to mark a point as ghost point (1) or not (0) (Figure 1 (b)). In absence of such an array, it's assumed that all points have the value 0 i.e. no points are ghost points.
Implementation
- Unlike ghost-cells, we don't need to add mechanisms in the pipeline to request ghost-points. Ghost points information is either available or not, it cannot be requested.
- Readers can mark ghosts, however most won't. So we'll need to provide filters that can generate ghost-points information:
- Add support for D3 to mark ghost-points.
- Add a new filter that can mark ghost-points without redistributing data (unlike D3).
- Update all statistics filters including ExtractHistogram to respect ghost-point information when available.
Issues
- Do we need to address ghost-points across blocks in a composite dataset? If so, how?