Actual source code: ex3.c
1: static char help[] = "Spot check DMStag Compatibility Checks";
3: #include <petscdm.h>
4: #include <petscdmstag.h>
6: #define NDMS 4
8: int main(int argc, char **argv)
9: {
10: DM dms[NDMS];
11: PetscInt i;
14: PetscInitialize(&argc, &argv, (char *)0, help);
16: /* Two 3d DMs, with all the same parameters */
17: DMStagCreate3d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, 4, 3, 2, PETSC_DECIDE, PETSC_DECIDE, PETSC_DECIDE, 2, 3, 4, 5, DMSTAG_STENCIL_BOX, 1, NULL, NULL, NULL, &dms[0]);
18: DMSetUp(dms[0]);
19: DMStagCreate3d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, 4, 3, 2, PETSC_DECIDE, PETSC_DECIDE, PETSC_DECIDE, 2, 3, 4, 5, DMSTAG_STENCIL_BOX, 1, NULL, NULL, NULL, &dms[1]);
20: DMSetUp(dms[1]);
22: /* A derived 3d DM, with a different section */
23: DMStagCreateCompatibleDMStag(dms[0], 0, 1, 0, 1, &dms[2]);
25: /* A DM expected to be incompatible (different stencil width) */
26: DMStagCreate3d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, 4, 3, 2, PETSC_DECIDE, PETSC_DECIDE, PETSC_DECIDE, 2, 3, 4, 5, DMSTAG_STENCIL_BOX, 2, NULL, NULL, NULL, &dms[3]);
28: /* Check expected self-compatibility */
29: for (i = 0; i < NDMS; ++i) {
30: PetscBool compatible, set;
31: DMGetCompatibility(dms[i], dms[i], &compatible, &set);
33: }
35: /* Check expected compatibility */
36: for (i = 1; i <= 2; ++i) {
37: PetscBool compatible, set;
38: DMGetCompatibility(dms[0], dms[i], &compatible, &set);
40: }
42: /* Check expected incompatibility */
43: {
44: PetscBool compatible, set;
45: DMGetCompatibility(dms[0], dms[3], &compatible, &set);
47: }
49: for (i = 0; i < NDMS; ++i) DMDestroy(&dms[i]);
50: PetscFinalize();
51: return 0;
52: }
54: /*TEST
56: test:
57: nsize: 1
58: suffix: 1
60: test:
61: nsize: 3
62: suffix: 2
64: TEST*/