Actual source code: ex21.c


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

  4: #include <petscsys.h>

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

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

 42: /*TEST

 44:    test:

 46: TEST*/