Actual source code: ex1.c
2: static char help[] = "Tests PetscRandom functions.\n\n";
4: #include petsc.h
5: #include petscsys.h
7: /* Usage:
8: mpiexec -n <np> ./ex1 -n <num_of_random_numbers> -random_type <type> -log_summary
9: -view_randomvalues <view_rank>
10: -random_view ascii -random_view_file <filename>
11: */
15: int main(int argc,char **argv)
16: {
17: PetscInt i,n = 1000,*values;
18: PetscRandom rnd;
19: PetscScalar value;
21: PetscMPIInt rank;
22: PetscInt view_rank=-1;
23: #if defined (PETSC_USE_LOG)
24: PetscLogEvent event;
25: #endif
27: PetscInitialize(&argc,&argv,(char *)0,help);
28: MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
29: PetscOptionsGetInt(PETSC_NULL,"-n",&n,PETSC_NULL);
30: PetscOptionsGetInt(PETSC_NULL,"-view_randomvalues",&view_rank,PETSC_NULL);
31:
32: PetscRandomCreate(PETSC_COMM_WORLD,&rnd);
33: #if defined(PETSC_HAVE_DRAND48)
34: PetscRandomSetType(rnd,PETSCRAND48);
35: #elif defined(PETSC_HAVE_RAND)
36: PetscRandomSetType(rnd,PETSCRAND);
37: #endif
38: PetscRandomSetFromOptions(rnd);
40: PetscMalloc(n*sizeof(PetscInt),&values);
41: for (i=0; i<n; i++) {
42: PetscRandomGetValue(rnd,&value);
43: if (view_rank == (PetscInt)rank) {
44: PetscPrintf(PETSC_COMM_SELF,"[%D] value[%d] = %g\n",rank,i,PetscRealPart(value));
45: }
46: values[i] = (PetscInt)(n*PetscRealPart(value) + 2.0);
47: }
48: PetscSortInt(n,values);
50: PetscLogEventRegister("Sort",0,&event);
51: PetscLogEventBegin(event,0,0,0,0);
52:
53: PetscRandomSeed(rnd);
54: for (i=0; i<n; i++) {
55: PetscRandomGetValue(rnd,&value);
56: values[i] = (PetscInt)(n*PetscRealPart(value) + 2.0);
57: /* printf("value[%d] = %g\n",i,value); */
58: }
59: PetscSortInt(n,values);
60: PetscLogEventEnd(event,0,0,0,0);
62: for (i=1; i<n; i++) {
63: if (values[i] < values[i-1]) SETERRQ(1,"Values not sorted");
64: }
65: PetscFree(values);
66: PetscRandomDestroy(rnd);
68: PetscFinalize();
69: return 0;
70: }
71: