1 2 static char help[] = "Tests PetscRandom functions.\n\n"; 3 4 #include <petscsys.h> 5 6 /* Usage: 7 mpiexec -n <np> ./ex1 -n <num_of_random_numbers> -random_type <type> -log_view 8 -view_randomvalues <view_rank> 9 -random_view ascii -random_view :filename 10 */ 11 12 int main(int argc,char **argv) 13 { 14 PetscInt i,n = 1000,*values; 15 PetscRandom rnd; 16 PetscScalar value,avg = 0.0; 17 PetscMPIInt rank; 18 PetscInt view_rank=-1; 19 #if defined(PETSC_USE_LOG) 20 PetscLogEvent event; 21 #endif 22 23 PetscFunctionBeginUser; 24 PetscCall(PetscInitialize(&argc,&argv,(char*)0,help)); 25 PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 26 PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL)); 27 PetscCall(PetscOptionsGetInt(NULL,NULL,"-view_randomvalues",&view_rank,NULL)); 28 29 PetscCall(PetscRandomCreate(PETSC_COMM_WORLD,&rnd)); 30 /* force imaginary part of random number to always be zero; thus obtain reproducible results with real and complex numbers */ 31 PetscCall(PetscRandomSetInterval(rnd,0.0,1.0)); 32 PetscCall(PetscRandomSetFromOptions(rnd)); 33 34 PetscCall(PetscMalloc1(n,&values)); 35 for (i=0; i<n; i++) { 36 PetscCall(PetscRandomGetValue(rnd,&value)); 37 avg += value; 38 if (view_rank == (PetscInt)rank) { 39 PetscCall(PetscPrintf(PETSC_COMM_SELF,"[%d] value[%" PetscInt_FMT "] = %6.4e\n",rank,i,(double)PetscRealPart(value))); 40 } 41 values[i] = (PetscInt)(n*PetscRealPart(value) + 2.0); 42 } 43 avg = avg/((PetscReal)n); 44 if (view_rank == (PetscInt)rank) { 45 PetscCall(PetscPrintf(PETSC_COMM_SELF,"[%d] Average value %6.4e\n",rank,(double)PetscRealPart(avg))); 46 } 47 48 PetscCall(PetscSortInt(n,values)); 49 50 PetscCall(PetscLogEventRegister("Sort",0,&event)); 51 PetscCall(PetscLogEventBegin(event,0,0,0,0)); 52 53 PetscCall(PetscRandomSeed(rnd)); 54 for (i=0; i<n; i++) { 55 PetscCall(PetscRandomGetValue(rnd,&value)); 56 values[i] = (PetscInt)(n*PetscRealPart(value) + 2.0); 57 /* printf("value[%d] = %g\n",i,value); */ 58 } 59 PetscCall(PetscSortInt(n,values)); 60 PetscCall(PetscLogEventEnd(event,0,0,0,0)); 61 62 for (i=1; i<n; i++) { 63 PetscCheck(values[i] >= values[i-1],PETSC_COMM_SELF,PETSC_ERR_PLIB,"Values not sorted"); 64 } 65 PetscCall(PetscFree(values)); 66 PetscCall(PetscRandomDestroy(&rnd)); 67 68 PetscCall(PetscFinalize()); 69 return 0; 70 } 71 72 /*TEST 73 74 test: 75 76 test: 77 suffix: 2 78 nsize: 2 79 output_file: output/ex1_1.out 80 81 test: 82 suffix: 3 83 args: -view_randomvalues 0 84 85 TEST*/ 86