hi

I have a distributed DMPlex representing a finite volume mesh, and first I want to check if I understand the way the indexing of ghost cells works, based on my experiments.

As I understand it, there are two types of ghost cells:

1) those created by DMPlexDistribute() (which I call with overlap = 1), representing the cells over the edge of the processor partition boundary 2) those created by DMPlexConstructGhostCells(), which I call to add ghost cells on the physical boundary of the mesh (using a DMLabel), for applying boundary conditions

The type 1 'partition' ghost cells only appear in local vectors, not global, and are added on the end after the interior cells.

The type 2 'boundary' ghost cells appear in both local and global vectors. In a local vector they are added on the end after the partition ghost cells. In a global vector they appear straight after the interior cells.


Is this correct? If so, I have a question:

If I'm computing fluxes between my finite volume cells, I need a local vector to get access to both types of ghost cells.

But if I'm doing another calculation (computing fluid properties in the cells, in this case) that does not need access to the partition ghosts, but needs to be carried out for all interior cells *and* the boundary ghost cells, I figure it would be preferable to do this with a global vector (to save needless parallel communication scattering a global vector into a local one).

However if I use DMPlexGetHeightStratum() to get the start and end cells, the indices it returns apply to a local vector with the partition ghosts included.

Is it safe just to subtract off the number of partition ghost cells from the end cell index returned by DMPlexGetHeightStratum(), if I want to loop over all interior and boundary ghosts cells in a global vector?

Cheers, Adrian

--
Dr Adrian Croucher
Department of Engineering Science
University of Auckland
New Zealand
tel 64-9-373-7599 ext 84611

Reply via email to