xref: /petsc/src/sys/tests/ex21.c (revision ebead697dbf761eb322f829370bbe90b3bd93fa3)
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]) {
23       PetscCall(PetscPrintf(PETSC_COMM_WORLD," %" PetscInt_FMT " ",Level[i]));
24     }
25   }
26   PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\nNumber of levels %" PetscInt_FMT "\n",Nlevels));
27   for (i=0; i<Nlevels; i++) {
28     PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\nLevel %" PetscInt_FMT " ",i));
29     for (j=0; j<Levelcnt[i]; j++) {
30       PetscCall(PetscPrintf(PETSC_COMM_WORLD,"%" PetscInt_FMT " ",Idbylevel[cnt++]));
31     }
32   }
33   PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\nColumn of each node"));
34   for (i=0; i<n; i++) {
35     if (!mask[i]) {
36       PetscCall(PetscPrintf(PETSC_COMM_WORLD," %" PetscInt_FMT " ",Column[i]));
37     }
38   }
39   PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\n"));
40   PetscCall(PetscFree(Level));
41   PetscCall(PetscFree(Levelcnt));
42   PetscCall(PetscFree(Idbylevel));
43   PetscCall(PetscFree(Column));
44   PetscCall(PetscFinalize());
45   return 0;
46 }
47 
48 /*TEST
49 
50    test:
51 
52 TEST*/
53