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*/