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