xref: /petsc/src/sys/tests/ex12.c (revision 732aec7a18f2199fb53bb9a2f3aef439a834ce31)
1 static char help[] = "Tests timing PetscSortInt().\n\n";
2 
3 #include <petscsys.h>
4 
main(int argc,char ** argv)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;
13 
14   PetscFunctionBeginUser;
15   PetscCall(PetscInitialize(&argc, &argv, NULL, 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));
19 
20   PetscCall(PetscRandomCreate(PETSC_COMM_SELF, &rand));
21   PetscCall(PetscRandomSetFromOptions(rand));
22 
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));
29 
30   PetscCall(PetscLogEventRegister("Sort", 0, &event));
31   PetscCall(PetscLogEventBegin(event, 0, 0, 0, 0));
32 
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));
39 
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));
46 
47   PetscCall(PetscFinalize());
48   return 0;
49 }
50 
51 /*TEST
52 
53    test:
54       args: -values_view
55 
56 TEST*/
57