Is there an example somewhere that does something similar to this? Thanks,
On Mon, Apr 13, 2015 at 12:31 PM, Matthew Knepley <[email protected]> wrote: > On Sat, Apr 11, 2015 at 6:55 PM, Justin Chang <[email protected]> wrote: > >> Hello, >> >> When I call DMPlexUninterpolate(...) on a distributed mesh (say 2 >> processors), it seems to overwrite the "ghost" points (i.e., the points not >> locally owned by the processor) and treats all points as if they are local >> to the processor. >> > > Yes, I wrote Uninterpolate() just for testing, and do not currently handle > the SF. I put it on my TODO list. > > Its not hard if you want to try. You just filter out any points that are > not cells and vertices from the SF, so > > PetscSFGetGraph() > for (leaves) > if leaf not a cell or vertex, skip > PetscSFSetGraph() > > Thanks, > > Matt > > >> Say I have this 2D cell-vertex mesh: >> >> 14----15-----16 >> | \ 5 | \ 7 | >> | \ | \ | >> | 4 \ | 6 \ | >> 11----12-----13 >> | \ 1 | \ 3 | >> | \ | \ | >> | 0 \ | 2 \ | >> 8------9------10 >> >> Which results in the following DM: >> >> DM Object: 2 MPI processes >> type: plex >> DM_0x84000004_0 in 2 dimensions: >> 0-cells: 9 0 >> 2-cells: 8 0 >> Labels: >> marker: 1 strata of sizes (8) >> depth: 2 strata of sizes (9, 8) >> >> I proceed by interpolating this DM: >> >> DM Object: 2 MPI processes >> type: plex >> DM_0x84000004_1 in 2 dimensions: >> 0-cells: 9 0 >> 1-cells: 16 0 >> 2-cells: 8 0 >> Labels: >> marker: 1 strata of sizes (16) >> depth: 3 strata of sizes (9, 16, 8) >> >> Then distributing across 2 processors: >> >> DM Object:Parallel Mesh 2 MPI processes >> type: plex >> Parallel Mesh in 2 dimensions: >> 0-cells: 6 6 >> 1-cells: 9 9 >> 2-cells: 4 4 >> Labels: >> marker: 1 strata of sizes (9) >> depth: 3 strata of sizes (6, 9, 4) >> >> I have the option of uniformly refining the mesh here but I choose not to >> for now. If my dofs are vertex based, then the global size of my DM vector >> is 9 and the local sizes for ranks 0 and 1 are 3 and 6 respectively. >> However, if I choose to uninterpolate the mesh by calling >> DMPlexUninterpolate(...), I get this: >> >> DM Object: 2 MPI processes >> type: plex >> DM_0x84000004_2 in 2 dimensions: >> 0-cells: 6 6 >> 2-cells: 4 4 >> Labels: >> marker: 1 strata of sizes (5) >> depth: 2 strata of sizes (6, 4) >> >> And the global size of my DM vector becomes 12 and the local size for >> both ranks is 6. It looks like the ghost points in rank 0 have been >> duplicated, which is not suppose to happen. >> >> Is there a way to capture the ghost point information when >> uninterpolating the DM? >> >> Thanks, >> >> -- >> Justin Chang >> PhD Candidate, Civil Engineering - Computational Sciences >> University of Houston, Department of Civil and Environmental Engineering >> Houston, TX 77004 >> (512) 963-3262 >> > > > > -- > 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 > -- Justin Chang PhD Candidate, Civil Engineering - Computational Sciences University of Houston, Department of Civil and Environmental Engineering Houston, TX 77004 (512) 963-3262
