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