[petsc-users] creation of parallel dmplex from a partitioned mesh

Cameron Smith smithc11 at rpi.edu
Thu Aug 13 08:37:55 CDT 2020


Hello,

We have a partitioned mesh that we want to create a DMPlex from that has 
the same distribution of elements (i.e., assignment of elements to 
processes) and vertices 'interior' to a process (i.e., vertices not on 
the inter-process boundary).

We were trying to use DMPlexCreateFromCellListParallelPetsc() or 
DMPlexBuildFromCellListParallel() and found that the vertex ownership 
(roots in the returned Vertex SF) appears to be sequentially assigned to 
processes based on global vertex id.  In general, this will not match 
our mesh distribution.  As we understand, to subsequently set vertex 
coordinates (or other vertex data) we would have to utilize a star 
forest (SF) communication API to send data to the correct process. Is 
that correct?

Alternatively, if we create a dmplex object from the elements that exist 
on each process using DMCreateFromCellList(), and then create a SF from 
mesh vertices on inter-process boundaries (using the mapping from local 
to global vertex ids provided by our mesh library), could we then 
associate the dmplex objects with the SF?  Is it as simple as calling 
DMSetPointSF()?

If manually defining the PointSF is a way forward, we would like some 
help understanding its definition; i.e., which entities become roots and 
which become leaves.  In DMPlexBuildFromCellListParallel()

https://gitlab.com/petsc/petsc/-/blob/753428fdb0644bc4cb7be6429ce8776c05405d40/src/dm/impls/plex/plexcreate.c#L2875-2899

the PointSF appears to contain roots for elements and vertices and 
leaves for owned vertices on the inter-process boundary.  Is that correct?

Thank-you,
Cameron


More information about the petsc-users mailing list