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