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