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*/