Actual source code: ex12.c

  1: static char help[] = "Tests timing PetscSortInt().\n\n";

  3: #include <petscsys.h>

  5: int main(int argc, char **argv)
  6: {
  7:   PetscInt      i, n = 1000, *values;
  8:   PetscLogEvent event;
  9:   PetscRandom   rand;
 10:   PetscReal     value;
 11:   PetscBool     values_view = PETSC_FALSE;
 12:   PetscMPIInt   rank;

 14:   PetscFunctionBeginUser;
 15:   PetscCall(PetscInitialize(&argc, &argv, (char *)0, help));
 16:   PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
 17:   PetscCall(PetscOptionsGetInt(NULL, NULL, "-n", &n, NULL));
 18:   PetscCall(PetscOptionsGetBool(NULL, 0, "-values_view", &values_view, NULL));

 20:   PetscCall(PetscRandomCreate(PETSC_COMM_SELF, &rand));
 21:   PetscCall(PetscRandomSetFromOptions(rand));

 23:   PetscCall(PetscMalloc1(n, &values));
 24:   for (i = 0; i < n; i++) {
 25:     PetscCall(PetscRandomGetValueReal(rand, &value));
 26:     values[i] = (PetscInt)(n * value + 2.0);
 27:   }
 28:   PetscCall(PetscSortInt(n, values));

 30:   PetscCall(PetscLogEventRegister("Sort", 0, &event));
 31:   PetscCall(PetscLogEventBegin(event, 0, 0, 0, 0));

 33:   for (i = 0; i < n; i++) {
 34:     PetscCall(PetscRandomGetValueReal(rand, &value));
 35:     values[i] = (PetscInt)(n * value + 2.0);
 36:   }
 37:   PetscCall(PetscSortInt(n, values));
 38:   PetscCall(PetscLogEventEnd(event, 0, 0, 0, 0));

 40:   for (i = 1; i < n; i++) {
 41:     PetscCheck(values[i] >= values[i - 1], PETSC_COMM_SELF, PETSC_ERR_PLIB, "Values not sorted");
 42:     if (values_view && rank == 0) PetscCall(PetscPrintf(PETSC_COMM_SELF, "%" PetscInt_FMT " %" PetscInt_FMT "\n", i, values[i]));
 43:   }
 44:   PetscCall(PetscFree(values));
 45:   PetscCall(PetscRandomDestroy(&rand));

 47:   PetscCall(PetscFinalize());
 48:   return 0;
 49: }

 51: /*TEST

 53:    test:
 54:       args: -values_view

 56: TEST*/