xref: /petsc/src/sys/tests/ex21.c (revision 1b37a2a7cc4a4fb30c3e967db1c694c0a1013f51)
1 static char help[] = "Tests PetscTreeProcess()";
2 
3 #include <petscsys.h>
4 
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;
16 
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 }
40 
41 /*TEST
42 
43    test:
44 
45 TEST*/
46