xref: /petsc/src/sys/tests/ex21.c (revision df4cd43f92eaa320656440c40edb1046daee8f75)
1 
2 static char help[] = "Tests PetscTreeProcess()";
3 
4 #include <petscsys.h>
5 
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;
17 
18   PetscFunctionBeginUser;
19   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
20   PetscCall(PetscProcessTree(n, mask, parentId, &Nlevels, &Level, &Levelcnt, &Idbylevel, &Column));
21   for (i = 0; i < n; i++) {
22     if (!mask[i]) PetscCall(PetscPrintf(PETSC_COMM_WORLD, " %" PetscInt_FMT " ", Level[i]));
23   }
24   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "\nNumber of levels %" PetscInt_FMT "\n", Nlevels));
25   for (i = 0; i < Nlevels; i++) {
26     PetscCall(PetscPrintf(PETSC_COMM_WORLD, "\nLevel %" PetscInt_FMT " ", i));
27     for (j = 0; j < Levelcnt[i]; j++) PetscCall(PetscPrintf(PETSC_COMM_WORLD, "%" PetscInt_FMT " ", Idbylevel[cnt++]));
28   }
29   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "\nColumn of each node"));
30   for (i = 0; i < n; i++) {
31     if (!mask[i]) PetscCall(PetscPrintf(PETSC_COMM_WORLD, " %" PetscInt_FMT " ", Column[i]));
32   }
33   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "\n"));
34   PetscCall(PetscFree(Level));
35   PetscCall(PetscFree(Levelcnt));
36   PetscCall(PetscFree(Idbylevel));
37   PetscCall(PetscFree(Column));
38   PetscCall(PetscFinalize());
39   return 0;
40 }
41 
42 /*TEST
43 
44    test:
45 
46 TEST*/
47