Actual source code: rand.c

  2: #include <../src/sys/random/randomimpl.h>
  3: #if defined (PETSC_HAVE_STDLIB_H)
  4: #include <stdlib.h>
  5: #endif

  9: PetscErrorCode  PetscRandomSeed_Rand(PetscRandom r)
 10: {
 12:   srand(r->seed);
 13:   return(0);
 14: }

 16: #define RAND_WRAP ((PetscReal)((rand()/(double)((unsigned int)RAND_MAX+1))))
 19: PetscErrorCode  PetscRandomGetValue_Rand(PetscRandom r,PetscScalar *val)
 20: {
 22: #if defined(PETSC_USE_COMPLEX)
 23:   if (r->iset)
 24:     *val = PetscRealPart(r->width)*RAND_WRAP + PetscRealPart(r->low) +
 25:       (PetscImaginaryPart(r->width)*RAND_WRAP + PetscImaginaryPart(r->low)) * PETSC_i;
 26:   else *val = RAND_WRAP + RAND_WRAP*PETSC_i;
 27: #else
 28:   if (r->iset) *val = r->width * RAND_WRAP + r->low;
 29:   else         *val = RAND_WRAP;
 30: #endif
 31:   return(0);
 32: }

 36: PetscErrorCode  PetscRandomGetValueReal_Rand(PetscRandom r,PetscReal *val)
 37: {
 39: #if defined(PETSC_USE_COMPLEX)
 40:     if (r->iset) *val = PetscRealPart(r->width)*RAND_WRAP + PetscRealPart(r->low);
 41:     else         *val = RAND_WRAP;
 42: #else
 43:   if (r->iset) *val = r->width * RAND_WRAP + r->low;
 44:   else         *val = RAND_WRAP;
 45: #endif
 46:   return(0);
 47: }

 49: static struct _PetscRandomOps PetscRandomOps_Values = {
 50:   /* 0 */
 51:   PetscRandomSeed_Rand,
 52:   PetscRandomGetValue_Rand,
 53:   PetscRandomGetValueReal_Rand,
 54:    0,
 55:   /* 5 */
 56:   0
 57: };

 59: /*MC
 60:    PETSCRAND - access to the basic Unix random number generator

 62:    Options Database Keys:
 63: . -random_type <rand,rand48,sprng> 

 65:   Level: beginner

 67: .seealso: RandomCreate(), RandomSetType(), PETSCRAND48, PETSCSPRNG
 68: M*/

 73: PetscErrorCode  PetscRandomCreate_Rand(PetscRandom r)
 74: {

 78:   PetscMemcpy(r->ops,&PetscRandomOps_Values,sizeof(PetscRandomOps_Values));
 79:   PetscObjectChangeTypeName((PetscObject)r,PETSCRAND);
 80:   return(0);
 81: }