xref: /petsc/src/dm/impls/plex/plexcoarsen.c (revision 0d1cd5e0bf17d8d1a4f7f5396fcab04f005f5dcf)
1919ab0a2SMatthew G. Knepley #include <petsc/private/dmpleximpl.h>   /*I      "petscdmplex.h"   I*/
29f3102b2SMatthew G. Knepley 
3919ab0a2SMatthew G. Knepley PetscErrorCode DMCoarsen_Plex(DM dm, MPI_Comm comm, DM *dmCoarsened)
4919ab0a2SMatthew G. Knepley {
5919ab0a2SMatthew G. Knepley   PetscErrorCode ierr;
6919ab0a2SMatthew G. Knepley 
7919ab0a2SMatthew G. Knepley   PetscFunctionBegin;
8*0d1cd5e0SMatthew G. Knepley   if (!dm->coarseMesh) {ierr = DMPlexCoarsen_Internal(dm, NULL, &dm->coarseMesh);CHKERRQ(ierr);}
9a8fb8f29SToby Isaac   ierr = PetscObjectReference((PetscObject) dm->coarseMesh);CHKERRQ(ierr);
10a8fb8f29SToby Isaac   *dmCoarsened = dm->coarseMesh;
11919ab0a2SMatthew G. Knepley   PetscFunctionReturn(0);
12919ab0a2SMatthew G. Knepley }
13b653a561SMatthew G. Knepley 
14b653a561SMatthew G. Knepley PetscErrorCode DMCoarsenHierarchy_Plex(DM dm, PetscInt nlevels, DM dmCoarsened[])
15b653a561SMatthew G. Knepley {
16b653a561SMatthew G. Knepley   DM             rdm = dm;
17b653a561SMatthew G. Knepley   PetscInt       c;
18*0d1cd5e0SMatthew G. Knepley   PetscBool      localized;
19b653a561SMatthew G. Knepley   PetscErrorCode ierr;
20b653a561SMatthew G. Knepley 
21b653a561SMatthew G. Knepley   PetscFunctionBegin;
22*0d1cd5e0SMatthew G. Knepley   ierr = DMGetCoordinatesLocalized(dm, &localized);CHKERRQ(ierr);
23b653a561SMatthew G. Knepley   for (c = nlevels-1; c >= 0; --c) {
24b653a561SMatthew G. Knepley     ierr = DMCoarsen(rdm, PetscObjectComm((PetscObject) dm), &dmCoarsened[c]);CHKERRQ(ierr);
25a6ba4734SToby Isaac     ierr = DMCopyBoundary(rdm, dmCoarsened[c]);CHKERRQ(ierr);
26*0d1cd5e0SMatthew G. Knepley     if (localized) {ierr = DMLocalizeCoordinates(dmCoarsened[c]);CHKERRQ(ierr);}
27a8fb8f29SToby Isaac     ierr = DMSetCoarseDM(rdm, dmCoarsened[c]);CHKERRQ(ierr);
28b653a561SMatthew G. Knepley     rdm  = dmCoarsened[c];
29b653a561SMatthew G. Knepley   }
30b653a561SMatthew G. Knepley   PetscFunctionReturn(0);
31b653a561SMatthew G. Knepley }
32