[petsc-users] creation of parallel dmplex from a partitioned mesh
Cameron Smith
smithc11 at rpi.edu
Thu Aug 13 10:43:39 CDT 2020
Thank you for the quick reply and the info. We'll give it a shot and
respond if we hit any snags.
-Cameron
On 8/13/20 9:54 AM, Matthew Knepley wrote:
> On Thu, Aug 13, 2020 at 9:38 AM Cameron Smith <smithc11 at rpi.edu
> <mailto:smithc11 at rpi.edu>> wrote:
>
> 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()?
>
>
> Yes. If you have all the distribution information, this is the easiest
> thing to do.
>
> 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()
>
>
> Short explanation of SF:
>
> SF stands for Star-Forest. It is a star graph because you have a single
> root that points to multiple leaves. It is
> a forest because you have several of these stars. We use this construct
> in many places in PETSc, and where it
> is used determines the semantics of the indices.
>
> The DMPlex point SF is an SF in which root indices are "owned" mesh
> points and leaf indices are "ghost" mesh
> points. You can take any set of local Plexes and add an SF to make them
> a parallel Plex.
>
> The SF is constructed with one-sided data. Locally, each process
> specifies two things:
>
> 1) The root space: The set of indices [0, Nr) which refers to
> possible roots on this process. For the pointSF, this is [0, Np) where
> Np is the number of local mesh points.
>
> 2) The leaves: Each leaf is a pair (local mesh point lp, remote mesh
> point rp) which says that local mesh point lp is a "ghost" of remote
> point rp. The remote point is
> given by (rank r, local mesh point rlp) where rlp is the local
> mesh point number on process r.
>
> With this, the Plex will automatically create all the other structures
> it needs.
>
> 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?
>
>
> No, the leaves are ghost vertices. They point back to the owner.
>
> Thanks,
>
> Matt
>
> Thank-you,
> Cameron
>
>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which
> their experiments lead.
> -- Norbert Wiener
>
> https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
More information about the petsc-users
mailing list