xref: /petsc/src/dm/impls/plex/tests/ex32.c (revision e600fa544e2bb197ca2af9b6e65ea465976dec56)
1c4762a1bSJed Brown static char help[] = "Tests for periodic mesh output\n\n";
2c4762a1bSJed Brown 
3c4762a1bSJed Brown #include <petscdmplex.h>
4c4762a1bSJed Brown 
530602db0SMatthew G. Knepley PetscErrorCode CheckMesh(DM dm)
6c4762a1bSJed Brown {
7c4762a1bSJed Brown   PetscReal      detJ, J[9], refVol = 1.0;
8c4762a1bSJed Brown   PetscReal      vol;
9c4762a1bSJed Brown   PetscInt       dim, depth, d, cStart, cEnd, c;
10c4762a1bSJed Brown   PetscErrorCode ierr;
11c4762a1bSJed Brown 
12c4762a1bSJed Brown   PetscFunctionBegin;
13c4762a1bSJed Brown   ierr = DMGetDimension(dm, &dim);CHKERRQ(ierr);
14c4762a1bSJed Brown   ierr = DMPlexGetDepth(dm, &depth);CHKERRQ(ierr);
15c4762a1bSJed Brown   for (d = 0; d < dim; ++d) {
16c4762a1bSJed Brown     refVol *= 2.0;
17c4762a1bSJed Brown   }
18c4762a1bSJed Brown   ierr = DMPlexGetHeightStratum(dm, 0, &cStart, &cEnd);CHKERRQ(ierr);
19c4762a1bSJed Brown   for (c = cStart; c < cEnd; ++c) {
20c4762a1bSJed Brown     ierr = DMPlexComputeCellGeometryFEM(dm, c, NULL, NULL, J, NULL, &detJ);CHKERRQ(ierr);
212c71b3e2SJacob Faibussowitsch     PetscCheckFalse(detJ <= 0.0,PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Mesh cell %d is inverted, |J| = %g", c, detJ);
22c4762a1bSJed Brown     if (depth > 1) {
23c4762a1bSJed Brown       ierr = DMPlexComputeCellGeometryFVM(dm, c, &vol, NULL, NULL);CHKERRQ(ierr);
242c71b3e2SJacob Faibussowitsch       PetscCheckFalse(vol <= 0.0,PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Mesh cell %d is inverted, vol = %g", c, vol);
25c4762a1bSJed Brown     }
26c4762a1bSJed Brown   }
27c4762a1bSJed Brown   PetscFunctionReturn(0);
28c4762a1bSJed Brown }
29c4762a1bSJed Brown 
3030602db0SMatthew G. Knepley PetscErrorCode CreateMesh(MPI_Comm comm, DM *dm)
31c4762a1bSJed Brown {
32c4762a1bSJed Brown   PetscErrorCode ierr;
33c4762a1bSJed Brown 
34c4762a1bSJed Brown   PetscFunctionBegin;
3530602db0SMatthew G. Knepley   ierr = DMCreate(comm, dm);CHKERRQ(ierr);
3630602db0SMatthew G. Knepley   ierr = DMSetType(*dm, DMPLEX);CHKERRQ(ierr);
3730602db0SMatthew G. Knepley   ierr = DMSetFromOptions(*dm);CHKERRQ(ierr);
38c4762a1bSJed Brown   ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr);
39c4762a1bSJed Brown   PetscFunctionReturn(0);
40c4762a1bSJed Brown }
41c4762a1bSJed Brown 
42c4762a1bSJed Brown int main(int argc, char **argv)
43c4762a1bSJed Brown {
4430602db0SMatthew G. Knepley   DM             dm;
45c4762a1bSJed Brown   PetscErrorCode ierr;
46c4762a1bSJed Brown 
47c4762a1bSJed Brown   ierr = PetscInitialize(&argc, &argv, NULL,help);if (ierr) return ierr;
4830602db0SMatthew G. Knepley   ierr = CreateMesh(PETSC_COMM_WORLD, &dm);CHKERRQ(ierr);
4930602db0SMatthew G. Knepley   ierr = CheckMesh(dm);CHKERRQ(ierr);
5030602db0SMatthew G. Knepley   ierr = DMDestroy(&dm);CHKERRQ(ierr);
51c4762a1bSJed Brown   ierr = PetscFinalize();
52c4762a1bSJed Brown   return ierr;
53c4762a1bSJed Brown }
54c4762a1bSJed Brown 
55c4762a1bSJed Brown /*TEST
56c4762a1bSJed Brown 
57c4762a1bSJed Brown   test:
58c4762a1bSJed Brown     suffix: 0
5930602db0SMatthew G. Knepley     args: -dm_plex_simplex 0 -dm_plex_box_faces 3,1,0 -dm_plex_box_bd periodic,none -dm_view ::ascii_info_detail
60c4762a1bSJed Brown   test:
61c4762a1bSJed Brown     suffix: 1
62c4762a1bSJed Brown     nsize: 2
63*e600fa54SMatthew G. Knepley     args: -dm_plex_simplex 0 -dm_plex_box_faces 3,1,0 -dm_plex_box_bd periodic,none -petscpartitioner_type simple -dm_view ::ascii_info_detail
64c4762a1bSJed Brown   test:
65c4762a1bSJed Brown     suffix: 2
66c4762a1bSJed Brown     nsize: 2
67*e600fa54SMatthew G. Knepley     args: -dm_plex_simplex 0 -dm_plex_box_faces 6,2,0 -dm_plex_box_bd periodic,none -petscpartitioner_type simple -dm_view ::ascii_info_detail
68c4762a1bSJed Brown   test:
69c4762a1bSJed Brown     suffix: 3
70c4762a1bSJed Brown     nsize: 4
71*e600fa54SMatthew G. Knepley     args: -dm_plex_simplex 0 -dm_plex_box_faces 6,2,0 -dm_plex_box_bd periodic,none -petscpartitioner_type simple -dm_view ::ascii_info_detail
72c4762a1bSJed Brown   test:
73c4762a1bSJed Brown     suffix: 4
74c4762a1bSJed Brown     nsize: 2
75*e600fa54SMatthew G. Knepley     args: -dm_plex_simplex 0 -dm_plex_box_faces 3,1,0 -dm_plex_box_bd periodic,none -dm_plex_periodic_cut -petscpartitioner_type simple -dm_view ::ascii_info_detail
76c4762a1bSJed Brown   test:
77c4762a1bSJed Brown     suffix: 5
78c4762a1bSJed Brown     nsize: 2
79*e600fa54SMatthew G. Knepley     args: -dm_plex_simplex 0 -dm_plex_box_faces 6,2,0 -dm_plex_box_bd periodic,none -dm_plex_periodic_cut -petscpartitioner_type simple -dm_view ::ascii_info_detail
80c4762a1bSJed Brown   test:
81c4762a1bSJed Brown     suffix: 6
82c4762a1bSJed Brown     nsize: 4
83*e600fa54SMatthew G. Knepley     args: -dm_plex_simplex 0 -dm_plex_box_faces 6,2,0 -dm_plex_box_bd periodic,none -dm_plex_periodic_cut -petscpartitioner_type simple -dm_view ::ascii_info_detail
84c4762a1bSJed Brown 
85c4762a1bSJed Brown TEST*/
86