[vtkusers] vtkDistributedDataFilter and ghost cells

Andrew Parker andy.john.parker at googlemail.com
Tue Nov 6 10:25:40 EST 2012


Hi,

Hope you can help.  I have some code running in parallel, that by other
means I have constructed nprocs worth of vtkRectilinearGrids, one per
process.  Each of which is a valid nprocs-worth of the whole serial mesh,
I've check this and I am happy with that i.e. it's partitioned properly and
nothing is missing.  I need the following information to process my data in
parallel:

1) I would like the local -> global cell mapping between the local rgrid
and the corresponding global single mesh.
2) I would like to know which cells are on processor boundaries for
parallel exchange purposes.
3) I would like all the double arrays per processor to be "expanded" by the
amount of (1 level of) ghost cells such that I can properly do the
computations I want with the ability to exchange only those additional
cells given the local to global mapping.

I have tried from the examples to use the following code, which I call on
every process, each of which has it's own local rgrid as I said.  I do the
following:

 vtkSmartPointer<vtkDistributedDataFilter> dd =
vtkSmartPointer<vtkDistributedDataFilter>::New();
  dd->SetInput(rgrid);

 dd->SetController(getVtkController());
  dd->SetBoundaryModeToSplitBoundaryCells();
 //dd->SetBoundaryModeToAssignToOneRegion();
 //dd->SetBoundaryModeToAssignToAllIntersectingRegions();
 dd->UseMinimalMemoryOff();
 dd->Update();
  vtkPieceScalars *ps = vtkPieceScalars::New();
 ps->SetInputConnection(dd->GetOutputPort());
 ps->SetScalarModeToCellData();
  vtkDataSetSurfaceFilter *dss = vtkDataSetSurfaceFilter::New();
 dss->SetInputConnection(ps->GetOutputPort());

The dd object works fine and writing its contents out on each processor
gives nprocs worth of meshes, each of which look slightly different to the
way I've partitioned them up, but sum to the same serial mesh so I am happy
with that working correctly. But I can't for the life of me figure out how
to obtain local to global cell mappings, allocate ghost cells, or work out
how to exchange data given the above partition info and comms....

Note I have not provided any additional information to "dd" regarding
global cells as per the doxy notes so I assume it went away and computed
it.  I can't figure out how to extract it however.  I also have no idea how
to modify each local processor rgrid to include the ghost cells for that
processor.  Finally given that info, I could exchange between processors to
write to each local processors ghost cells the corresponding "real" cell
data from the neighbouring meshes and continue the code.

Any help really appreciated!

Cheers,
Andy
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20121106/dfae26c4/attachment.htm>


More information about the vtkusers mailing list