After distributing a DMPlex it seems like my cells are appearing twice (or 
rather multiple cells maps onto the same vertices).

I’m assuming the way I’m iterating the DMPlex is wrong. Essentially I iterate 
the DMPlex the following way after distribution (see code snippet below – or 
attached file).

A related problem; Since distribution of a DMPlex reorders the point indices, 
how to do I map between distributed point indices and the original point 
indices.

And a final question: After distributing a DMPlex, some of the vertices are 
shared and exists in multiple instances. When adding dofs to these, how I I 
know if dof is owned by the current instance or it is a ghost dof?

I hope someone can point me in the right direction :)

Kind regards,
Morten


Code snippet

PetscInt from,to,dof,off;
DMPlexGetHeightStratum(dm, 0,&from, &to);
for (int cellIndex=from;cellIndex<to;cellIndex++){
    const PetscInt *edges;
    PetscInt       numEdges;
    DMPlexGetConeSize(dm, cellIndex, &numEdges);
    DMPlexGetCone(dm, cellIndex, &edges);
    for (int e = 0;e<numEdges;e++) {
        int edgeIndex = edges[e];
        const PetscInt *vertices;
        PetscInt       numVertices;
        DMPlexGetConeSize(dm, edgeIndex, &numVertices);
        DMPlexGetCone(dm, edgeIndex, &vertices);
        for (int v = 0;v<numVertices;v++){
            int vertexIndex = vertices[v];

For a non distibuted mesh the top of the hasse diagram looks like this:
0 --> 2
0 --> 3
0 --> 4
1 --> 4
1 --> 5
1 --> 6

But when distributing (on two cores) it looks like this, where both cells maps 
to the same edges (true for both cores):
0 --> 11
0 --> 12
0 --> 13
1 --> 11
1 --> 12
1 --> 13


Attachment: twotriangles.cc
Description: twotriangles.cc

Reply via email to