Ghost Points

From ParaQ Wiki
Jump to navigationJump to search

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).

Figure 1

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?