Actual source code: rand48.c

petsc-3.11.4 2019-09-28
Report Typos and Errors
  1: #define PETSC_DESIRE_FEATURE_TEST_MACROS /* for drand48() */
  2: #include <../src/sys/classes/random/randomimpl.h>

  4: PetscErrorCode  PetscRandomSeed_Rand48(PetscRandom r)
  5: {
  7:   srand48(r->seed);
  8:   return(0);
  9: }

 11: PetscErrorCode  PetscRandomGetValue_Rand48(PetscRandom r,PetscScalar *val)
 12: {
 14: #if defined(PETSC_USE_COMPLEX)
 15:   if (r->iset) {
 16:     *val = PetscRealPart(r->width)*(PetscReal)drand48() + PetscRealPart(r->low) + (PetscImaginaryPart(r->width)*(PetscReal)drand48() + PetscImaginaryPart(r->low)) * PETSC_i;
 17:   } else {
 18:     *val = (PetscReal)drand48() + (PetscReal)drand48()*PETSC_i;
 19:   }
 20: #else
 21:   if (r->iset) *val = r->width * drand48() + r->low;
 22:   else         *val = drand48();
 23: #endif
 24:   return(0);
 25: }

 27: PetscErrorCode  PetscRandomGetValueReal_Rand48(PetscRandom r,PetscReal *val)
 28: {
 30: #if defined(PETSC_USE_COMPLEX)
 31:   if (r->iset) *val = PetscRealPart(r->width)*drand48() + PetscRealPart(r->low);
 32:   else         *val = drand48();
 33: #else
 34:   if (r->iset) *val = r->width * drand48() + r->low;
 35:   else         *val = drand48();
 36: #endif
 37:   return(0);
 38: }

 40: static struct _PetscRandomOps PetscRandomOps_Values = {
 41:   /* 0 */
 42:   PetscRandomSeed_Rand48,
 43:   PetscRandomGetValue_Rand48,
 44:   PetscRandomGetValueReal_Rand48,
 45:   0,
 46:   /* 5 */
 47:   0
 48: };

 50: /*MC
 51:    PETSCRAND48 - access to the basic Unix drand48() random number generator

 53:    Options Database Keys:
 54: . -random_type <rand,rand48,sprng>

 56:   Level: beginner

 58: .seealso: RandomCreate(), RandomSetType(), PETSCRAND, PETSCSPRNG
 59: M*/

 61: PETSC_EXTERN PetscErrorCode PetscRandomCreate_Rand48(PetscRandom r)
 62: {

 66:   PetscMemcpy(r->ops,&PetscRandomOps_Values,sizeof(PetscRandomOps_Values));
 67:   PetscObjectChangeTypeName((PetscObject)r,PETSCRAND48);
 68:   return(0);
 69: }