Actual source code: ex10.c

  1: static char help[] = "Test PetscSFFCompose against some corner cases \n\n";

  3: #include <petscsf.h>

  5: int main(int argc, char **argv)
  6: {
  7:   PetscMPIInt  size;
  8:   PetscSF      sfA0, sfA1, sfA2, sfB;
  9:   PetscInt     nroots, nleaves;
 10:   PetscInt    *ilocalA0, *ilocalA1, *ilocalA2, *ilocalB;
 11:   PetscSFNode *iremoteA0, *iremoteA1, *iremoteA2, *iremoteB;

 13:   PetscFunctionBeginUser;
 14:   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
 15:   PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size));
 16:   PetscCheck(size == 1, PETSC_COMM_WORLD, PETSC_ERR_USER, "Only coded for one MPI process");
 17:   PetscCall(PetscSFCreate(PETSC_COMM_WORLD, &sfA0));
 18:   PetscCall(PetscSFCreate(PETSC_COMM_WORLD, &sfA1));
 19:   PetscCall(PetscSFCreate(PETSC_COMM_WORLD, &sfA2));
 20:   PetscCall(PetscSFCreate(PETSC_COMM_WORLD, &sfB));
 21:   /* sfA0 */
 22:   nroots  = 1;
 23:   nleaves = 0;
 24:   PetscCall(PetscMalloc1(nleaves, &ilocalA0));
 25:   PetscCall(PetscMalloc1(nleaves, &iremoteA0));
 26:   PetscCall(PetscSFSetGraph(sfA0, nroots, nleaves, ilocalA0, PETSC_OWN_POINTER, iremoteA0, PETSC_OWN_POINTER));
 27:   PetscCall(PetscSFSetUp(sfA0));
 28:   PetscCall(PetscObjectSetName((PetscObject)sfA0, "sfA0"));
 29:   PetscCall(PetscSFView(sfA0, NULL));
 30:   /* sfA1 */
 31:   nroots  = 1;
 32:   nleaves = 1;
 33:   PetscCall(PetscMalloc1(nleaves, &ilocalA1));
 34:   PetscCall(PetscMalloc1(nleaves, &iremoteA1));
 35:   ilocalA1[0]        = 1;
 36:   iremoteA1[0].rank  = 0;
 37:   iremoteA1[0].index = 0;
 38:   PetscCall(PetscSFSetGraph(sfA1, nroots, nleaves, ilocalA1, PETSC_OWN_POINTER, iremoteA1, PETSC_OWN_POINTER));
 39:   PetscCall(PetscSFSetUp(sfA1));
 40:   PetscCall(PetscObjectSetName((PetscObject)sfA1, "sfA1"));
 41:   PetscCall(PetscSFView(sfA1, NULL));
 42:   /* sfA2 */
 43:   nroots  = 1;
 44:   nleaves = 1;
 45:   PetscCall(PetscMalloc1(nleaves, &ilocalA2));
 46:   PetscCall(PetscMalloc1(nleaves, &iremoteA2));
 47:   ilocalA2[0]        = 0;
 48:   iremoteA2[0].rank  = 0;
 49:   iremoteA2[0].index = 0;
 50:   PetscCall(PetscSFSetGraph(sfA2, nroots, nleaves, ilocalA2, PETSC_OWN_POINTER, iremoteA2, PETSC_OWN_POINTER));
 51:   PetscCall(PetscSFSetUp(sfA2));
 52:   PetscCall(PetscObjectSetName((PetscObject)sfA2, "sfA2"));
 53:   PetscCall(PetscSFView(sfA2, NULL));
 54:   /* sfB */
 55:   nroots  = 2;
 56:   nleaves = 2;
 57:   PetscCall(PetscMalloc1(nleaves, &ilocalB));
 58:   PetscCall(PetscMalloc1(nleaves, &iremoteB));
 59:   ilocalB[0]        = 100;
 60:   iremoteB[0].rank  = 0;
 61:   iremoteB[0].index = 0;
 62:   ilocalB[1]        = 101;
 63:   iremoteB[1].rank  = 0;
 64:   iremoteB[1].index = 1;
 65:   PetscCall(PetscSFSetGraph(sfB, nroots, nleaves, ilocalB, PETSC_OWN_POINTER, iremoteB, PETSC_OWN_POINTER));
 66:   PetscCall(PetscSFSetUp(sfB));
 67:   PetscCall(PetscObjectSetName((PetscObject)sfB, "sfB"));
 68:   PetscCall(PetscSFView(sfB, NULL));
 69:   /* Test 0 */
 70:   {
 71:     PetscSF sfC;

 73:     PetscCall(PetscSFCompose(sfA0, sfB, &sfC));
 74:     PetscCall(PetscObjectSetName((PetscObject)sfC, "PetscSFCompose(sfA0, sfB)"));
 75:     PetscCall(PetscSFView(sfC, NULL));
 76:     PetscCall(PetscSFDestroy(&sfC));
 77:   }
 78:   /* Test 1 */
 79:   {
 80:     PetscSF sfC;

 82:     PetscCall(PetscSFCompose(sfA1, sfB, &sfC));
 83:     PetscCall(PetscObjectSetName((PetscObject)sfC, "PetscSFCompose(sfA1, sfB)"));
 84:     PetscCall(PetscSFView(sfC, NULL));
 85:     PetscCall(PetscSFDestroy(&sfC));
 86:   }
 87:   /* Test 2 */
 88:   {
 89:     PetscSF sfC;

 91:     PetscCall(PetscSFCompose(sfA2, sfB, &sfC));
 92:     PetscCall(PetscObjectSetName((PetscObject)sfC, "PetscSFCompose(sfA2, sfB)"));
 93:     PetscCall(PetscSFView(sfC, NULL));
 94:     PetscCall(PetscSFDestroy(&sfC));
 95:   }
 96:   PetscCall(PetscSFDestroy(&sfA0));
 97:   PetscCall(PetscSFDestroy(&sfA1));
 98:   PetscCall(PetscSFDestroy(&sfA2));
 99:   PetscCall(PetscSFDestroy(&sfB));
100:   PetscCall(PetscFinalize());
101:   return 0;
102: }

104: /*TEST

106:    test:
107:      suffix: 0

109: TEST*/