xref: /petsc/src/dm/impls/plex/tests/ex14.c (revision 1e1ea65d8de51fde77ce8a787efbef25e407badc)
1c4762a1bSJed Brown static char help[] = "Tests for coarsening\n\n";
2c4762a1bSJed Brown 
3c4762a1bSJed Brown #include <petscdmplex.h>
4c4762a1bSJed Brown 
5c4762a1bSJed Brown typedef struct {
6c4762a1bSJed Brown   PetscBool uninterpolate;  /* Uninterpolate the mesh at the end */
7c4762a1bSJed Brown } AppCtx;
8c4762a1bSJed Brown 
9c4762a1bSJed Brown PetscErrorCode ProcessOptions(MPI_Comm comm, AppCtx *options)
10c4762a1bSJed Brown {
11c4762a1bSJed Brown   PetscErrorCode ierr;
12c4762a1bSJed Brown 
13c4762a1bSJed Brown   PetscFunctionBegin;
14c4762a1bSJed Brown   options->uninterpolate = PETSC_FALSE;
15c4762a1bSJed Brown 
16c4762a1bSJed Brown   ierr = PetscOptionsBegin(comm, "", "Meshing Problem Options", "DMPLEX");CHKERRQ(ierr);
17c4762a1bSJed Brown   ierr = PetscOptionsBool("-uninterpolate", "Uninterpolate the mesh at the end", "ex14.c", options->uninterpolate, &options->uninterpolate, NULL);CHKERRQ(ierr);
18*1e1ea65dSPierre Jolivet   ierr = PetscOptionsEnd();CHKERRQ(ierr);
19c4762a1bSJed Brown   PetscFunctionReturn(0);
20c4762a1bSJed Brown }
21c4762a1bSJed Brown 
22c4762a1bSJed Brown PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *dm)
23c4762a1bSJed Brown {
24c4762a1bSJed Brown   PetscErrorCode ierr;
25c4762a1bSJed Brown 
26c4762a1bSJed Brown   PetscFunctionBegin;
2730602db0SMatthew G. Knepley   ierr = DMCreate(comm, dm);CHKERRQ(ierr);
2830602db0SMatthew G. Knepley   ierr = DMSetType(*dm, DMPLEX);CHKERRQ(ierr);
29c4762a1bSJed Brown   ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);
3030602db0SMatthew G. Knepley   ierr = DMViewFromOptions(*dm, NULL, "-orig_dm_view");CHKERRQ(ierr);
31c4762a1bSJed Brown   if (user->uninterpolate) {
32c4762a1bSJed Brown     DM udm = NULL;
33c4762a1bSJed Brown 
34c4762a1bSJed Brown     ierr = DMPlexUninterpolate(*dm, &udm);CHKERRQ(ierr);
35c4762a1bSJed Brown     ierr = DMDestroy(dm);CHKERRQ(ierr);
36c4762a1bSJed Brown     *dm  = udm;
37c4762a1bSJed Brown     ierr = DMViewFromOptions(*dm, NULL, "-un_dm_view");CHKERRQ(ierr);
38c4762a1bSJed Brown   }
39c4762a1bSJed Brown   ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
40c4762a1bSJed Brown   PetscFunctionReturn(0);
41c4762a1bSJed Brown }
42c4762a1bSJed Brown 
43c4762a1bSJed Brown int main(int argc, char **argv)
44c4762a1bSJed Brown {
45c4762a1bSJed Brown   DM             dm;
46c4762a1bSJed Brown   AppCtx         user;
47c4762a1bSJed Brown   PetscErrorCode ierr;
48c4762a1bSJed Brown 
49c4762a1bSJed Brown   ierr = PetscInitialize(&argc, &argv, NULL, help);if (ierr) return ierr;
50c4762a1bSJed Brown   ierr = ProcessOptions(PETSC_COMM_WORLD, &user);CHKERRQ(ierr);
51c4762a1bSJed Brown   ierr = CreateMesh(PETSC_COMM_WORLD, &user, &dm);CHKERRQ(ierr);
52c4762a1bSJed Brown   ierr = DMDestroy(&dm);CHKERRQ(ierr);
53c4762a1bSJed Brown   ierr = PetscFinalize();
54c4762a1bSJed Brown   return ierr;
55c4762a1bSJed Brown }
56c4762a1bSJed Brown 
57c4762a1bSJed Brown /*TEST
58c4762a1bSJed Brown   test:
59c4762a1bSJed Brown     suffix: 0
60c4762a1bSJed Brown     requires: triangle
61c4762a1bSJed Brown     args: -dm_view -dm_refine 1 -dm_coarsen -dm_plex_check_symmetry -dm_plex_check_skeleton -dm_plex_check_faces
62c4762a1bSJed Brown 
63c4762a1bSJed Brown TEST*/
64