1 static char help[] = "Tests timing PetscSortInt().\n\n"; 2 3 #include <petscsys.h> 4 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