Actual source code: rand.c

  1: #define PETSC_DLL

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

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

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

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

 52: PetscErrorCode  PetscRandomGetValueImaginary_Rand(PetscRandom r,PetscScalar *val)
 53: {
 55: #if defined(PETSC_USE_COMPLEX)
 56:   if (r->iset) *val = (PetscImaginaryPart(r->width)*RAND_WRAP()+PetscImaginaryPart(r->low))*PETSC_i;
 57:   else         *val = RAND_WRAP()*PETSC_i;
 58: #else
 59:   if (r->iset) *val = r->width * RAND_WRAP() + r->low;
 60:   else         *val = RAND_WRAP();
 61: #endif  
 62:   return(0);
 63: }

 65: static struct _PetscRandomOps PetscRandomOps_Values = {
 66:   /* 0 */
 67:   PetscRandomSeed_Rand,
 68:   PetscRandomGetValue_Rand,
 69:   PetscRandomGetValueReal_Rand,
 70:   PetscRandomGetValueImaginary_Rand,
 71:   0,
 72:   /* 5 */
 73:   0
 74: };

 76: /*MC
 77:    PETSCRAND - access to the basic Unix random number generator

 79:    Options Database Keys:
 80: . -random_type <rand,rand48,sprng> 

 82:   Level: beginner

 84: .seealso: RandomCreate(), RandomSetType(), PETSCRAND48, PETSCSPRNG
 85: M*/

 90: PetscErrorCode  PetscRandomCreate_Rand(PetscRandom r)
 91: {

 95:   PetscMemcpy(r->ops,&PetscRandomOps_Values,sizeof(PetscRandomOps_Values));
 96:   PetscObjectChangeTypeName((PetscObject)r,PETSCRAND);
 97:   PetscPublishAll(r);
 98:   return(0);
 99: }