Actual source code: ex2.c
2: static char help[] = "Tests application ordering.\n\n";
4: #include <petscsys.h>
5: #include <petscao.h>
6: #include <petscviewer.h>
8: int main(int argc, char **argv)
9: {
10: PetscMPIInt rank, size;
11: PetscInt n, *ispetsc, *isapp, start, N, i;
12: AO ao;
15: PetscInitialize(&argc, &argv, (char *)0, help);
16: PetscOptionsGetInt(NULL, NULL, "-n", &n, NULL);
17: MPI_Comm_rank(PETSC_COMM_WORLD, &rank);
18: n = rank + 2;
19: MPI_Comm_size(PETSC_COMM_WORLD, &size);
21: /* create the orderings */
22: PetscMalloc2(n, &ispetsc, n, &isapp);
24: MPI_Scan(&n, &start, 1, MPIU_INT, MPI_SUM, PETSC_COMM_WORLD);
25: MPI_Allreduce(&n, &N, 1, MPIU_INT, MPI_SUM, PETSC_COMM_WORLD);
26: start -= n;
28: for (i = 0; i < n; i++) {
29: ispetsc[i] = start + i;
30: isapp[i] = N - start - i - 1;
31: }
33: /* create the application ordering */
34: AOCreateBasic(PETSC_COMM_WORLD, n, isapp, ispetsc, &ao);
35: AOView(ao, PETSC_VIEWER_STDOUT_WORLD);
37: /* check the mapping */
38: AOPetscToApplication(ao, n, ispetsc);
39: for (i = 0; i < n; i++) {
40: if (ispetsc[i] != isapp[i]) PetscPrintf(PETSC_COMM_WORLD, "[%d] Problem with mapping %" PetscInt_FMT " to %" PetscInt_FMT "\n", rank, i, ispetsc[i]);
41: }
42: PetscFree2(ispetsc, isapp);
44: AODestroy(&ao);
45: PetscFinalize();
46: return 0;
47: }
49: /*TEST
51: test:
53: test:
54: suffix: 2
55: nsize: 2
57: test:
58: suffix: 3
59: nsize: 3
61: TEST*/