Actual source code: ex11.c
2: static char help[] = "Tests ISSortGlobal().\n\n";
4: #include <petscis.h>
6: int main(int argc, char **argv)
7: {
8: IS is;
9: PetscInt n, i, first, last, nmax = 100;
10: PetscMPIInt rank;
11: PetscRandom randsizes, randvalues;
12: PetscReal r;
13: PetscInt *keys, *keyscopy, *keyseven, *keyssorted;
14: PetscLayout map, mapeven;
15: PetscBool sorted;
16: MPI_Comm comm;
19: PetscInitialize(&argc, &argv, (char *)0, help);
20: comm = MPI_COMM_WORLD;
21: MPI_Comm_rank(comm, &rank);
22: PetscOptionsBegin(comm, "", "Parallel Sort Test Options", "IS");
23: PetscOptionsBoundedInt("-nmax", "Maximum number of keys per process", "ex11.c", nmax, &nmax, NULL, 0);
24: PetscOptionsEnd();
26: PetscRandomCreate(comm, &randsizes);
27: PetscRandomSetInterval(randsizes, 0., PetscMax(nmax, 1));
28: PetscObjectSetOptionsPrefix((PetscObject)randsizes, "sizes_");
29: PetscRandomSetFromOptions(randsizes);
31: PetscRandomCreate(comm, &randvalues);
32: PetscObjectSetOptionsPrefix((PetscObject)randvalues, "values_");
33: PetscRandomSetFromOptions(randvalues);
35: PetscRandomGetValueReal(randsizes, &r);
36: n = (PetscInt)PetscMin(r, nmax);
37: PetscRandomSetInterval(randsizes, 0., 1.);
38: PetscRandomGetValueReal(randsizes, &r);
39: first = PETSC_MIN_INT + 1 + (PetscInt)((PETSC_MAX_INT - 1) * r);
40: PetscRandomGetValueReal(randsizes, &r);
41: last = first + (PetscInt)((PETSC_MAX_INT - 1) * r);
43: PetscRandomSetInterval(randvalues, first, last);
44: PetscMalloc3(n, &keys, n, &keyscopy, n, &keyssorted);
45: for (i = 0; i < n; i++) {
46: PetscRandomGetValueReal(randvalues, &r);
47: keys[i] = keyscopy[i] = (PetscInt)r;
48: }
49: ISCreateGeneral(comm, n, keys, PETSC_USE_POINTER, &is);
50: ISViewFromOptions(is, NULL, "-keys_view");
52: ISGetLayout(is, &map);
53: PetscLayoutCreateFromSizes(map->comm, PETSC_DECIDE, map->N, 1, &mapeven);
54: PetscLayoutSetUp(mapeven);
55: PetscMalloc1(mapeven->n, &keyseven);
57: PetscParallelSortInt(map, mapeven, keys, keyseven);
58: PetscParallelSortedInt(mapeven->comm, mapeven->n, keyseven, &sorted);
62: PetscParallelSortInt(map, map, keys, keyssorted);
63: PetscParallelSortedInt(map->comm, map->n, keyssorted, &sorted);
67: PetscParallelSortInt(map, map, keys, keys);
68: PetscParallelSortedInt(map->comm, map->n, keys, &sorted);
70: /* TODO */
71: #if 0
72: ISSortGlobal(is);
73: #endif
75: PetscFree(keyseven);
76: PetscLayoutDestroy(&mapeven);
77: ISDestroy(&is);
78: PetscFree3(keys, keyscopy, keyssorted);
79: PetscRandomDestroy(&randvalues);
80: PetscRandomDestroy(&randsizes);
82: PetscFinalize();
83: return 0;
84: }
86: /*TEST
88: test:
89: nsize: {{1 2 3 4 5}}
90: args: -nmax {{0 1 5 10 100}}
92: TEST*/