Actual source code: ex21.c

  1: static char help[] = "Tests PetscTreeProcess()";

  3: #include <petscsys.h>

  5: /*
  6:                           2              6
  7:                     1         4
  8:                     5
  9: */
 10: int main(int argc, char **argv)
 11: {
 12:   PetscInt  n = 7, cnt = 0, i, j;
 13:   PetscBool mask[]     = {PETSC_TRUE, PETSC_FALSE, PETSC_FALSE, PETSC_TRUE, PETSC_FALSE, PETSC_FALSE, PETSC_FALSE};
 14:   PetscInt  parentId[] = {-1, 2, 0, -1, 2, 1, 0};
 15:   PetscInt  Nlevels, *Level, *Levelcnt, *Idbylevel, *Column;

 17:   PetscFunctionBeginUser;
 18:   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
 19:   PetscCall(PetscProcessTree(n, mask, parentId, &Nlevels, &Level, &Levelcnt, &Idbylevel, &Column));
 20:   for (i = 0; i < n; i++) {
 21:     if (!mask[i]) PetscCall(PetscPrintf(PETSC_COMM_WORLD, " %" PetscInt_FMT " ", Level[i]));
 22:   }
 23:   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "\nNumber of levels %" PetscInt_FMT "\n", Nlevels));
 24:   for (i = 0; i < Nlevels; i++) {
 25:     PetscCall(PetscPrintf(PETSC_COMM_WORLD, "\nLevel %" PetscInt_FMT " ", i));
 26:     for (j = 0; j < Levelcnt[i]; j++) PetscCall(PetscPrintf(PETSC_COMM_WORLD, "%" PetscInt_FMT " ", Idbylevel[cnt++]));
 27:   }
 28:   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "\nColumn of each node"));
 29:   for (i = 0; i < n; i++) {
 30:     if (!mask[i]) PetscCall(PetscPrintf(PETSC_COMM_WORLD, " %" PetscInt_FMT " ", Column[i]));
 31:   }
 32:   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "\n"));
 33:   PetscCall(PetscFree(Level));
 34:   PetscCall(PetscFree(Levelcnt));
 35:   PetscCall(PetscFree(Idbylevel));
 36:   PetscCall(PetscFree(Column));
 37:   PetscCall(PetscFinalize());
 38:   return 0;
 39: }

 41: /*TEST

 43:    test:

 45: TEST*/