1919ab0a2SMatthew G. Knepley #include <petsc/private/dmpleximpl.h> /*I "petscdmplex.h" I*/
29f3102b2SMatthew G. Knepley
DMCoarsen_Plex(DM dm,MPI_Comm comm,DM * dmCoarsened)3d71ae5a4SJacob Faibussowitsch PetscErrorCode DMCoarsen_Plex(DM dm, MPI_Comm comm, DM *dmCoarsened)
4d71ae5a4SJacob Faibussowitsch {
5919ab0a2SMatthew G. Knepley PetscFunctionBegin;
69566063dSJacob Faibussowitsch if (!dm->coarseMesh) PetscCall(DMPlexCoarsen_Internal(dm, NULL, NULL, NULL, &dm->coarseMesh));
79566063dSJacob Faibussowitsch PetscCall(PetscObjectReference((PetscObject)dm->coarseMesh));
8a8fb8f29SToby Isaac *dmCoarsened = dm->coarseMesh;
9*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
10919ab0a2SMatthew G. Knepley }
11b653a561SMatthew G. Knepley
DMCoarsenHierarchy_Plex(DM dm,PetscInt nlevels,DM dmCoarsened[])12d71ae5a4SJacob Faibussowitsch PetscErrorCode DMCoarsenHierarchy_Plex(DM dm, PetscInt nlevels, DM dmCoarsened[])
13d71ae5a4SJacob Faibussowitsch {
14b653a561SMatthew G. Knepley DM rdm = dm;
15b653a561SMatthew G. Knepley PetscInt c;
160d1cd5e0SMatthew G. Knepley PetscBool localized;
17b653a561SMatthew G. Knepley
18b653a561SMatthew G. Knepley PetscFunctionBegin;
199566063dSJacob Faibussowitsch PetscCall(DMGetCoordinatesLocalized(dm, &localized));
20b653a561SMatthew G. Knepley for (c = nlevels - 1; c >= 0; --c) {
219566063dSJacob Faibussowitsch PetscCall(DMCoarsen(rdm, PetscObjectComm((PetscObject)dm), &dmCoarsened[c]));
229566063dSJacob Faibussowitsch PetscCall(DMCopyDisc(rdm, dmCoarsened[c]));
239566063dSJacob Faibussowitsch if (localized) PetscCall(DMLocalizeCoordinates(dmCoarsened[c]));
249566063dSJacob Faibussowitsch PetscCall(DMSetCoarseDM(rdm, dmCoarsened[c]));
25b653a561SMatthew G. Knepley rdm = dmCoarsened[c];
26b653a561SMatthew G. Knepley }
27*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS);
28b653a561SMatthew G. Knepley }
29