Date: 2022-03-04T17:37:05+00:00

Actual source code: rand.c

      2: #include <petsc/private/randomimpl.h>

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

     11: #define RAND_WRAP ((PetscReal)((rand()/(double)((unsigned int)RAND_MAX+1))))
     12: PetscErrorCode  PetscRandomGetValue_Rand(PetscRandom r,PetscScalar *val)
     13: {
     15: #if defined(PETSC_USE_COMPLEX)
     16:   if (r->iset) *val = PetscRealPart(r->width)*RAND_WRAP + PetscRealPart(r->low) + (PetscImaginaryPart(r->width)*RAND_WRAP + PetscImaginaryPart(r->low)) * PETSC_i;
     17:   else *val = RAND_WRAP + RAND_WRAP*PETSC_i;
     18: #else
     19:   if (r->iset) *val = r->width * RAND_WRAP + r->low;
     20:   else         *val = RAND_WRAP;
     21: #endif
     22:   return(0);
     23: }

     25: PetscErrorCode  PetscRandomGetValueReal_Rand(PetscRandom r,PetscReal *val)
     26: {
     28: #if defined(PETSC_USE_COMPLEX)
     29:     if (r->iset) *val = PetscRealPart(r->width)*RAND_WRAP + PetscRealPart(r->low);
     30:     else         *val = RAND_WRAP;
     31: #else
     32:   if (r->iset) *val = r->width * RAND_WRAP + r->low;
     33:   else         *val = RAND_WRAP;
     34: #endif
     35:   return(0);
     36: }

     38: static struct _PetscRandomOps PetscRandomOps_Values = {
     39:   PetscRandomSeed_Rand,
     40:   PetscRandomGetValue_Rand,
     41:   PetscRandomGetValueReal_Rand,
     42:   NULL,
     43:   NULL,
     44:   NULL,
     45:   NULL
     46: };

     48: /*MC
     49:    PETSCRAND - access to the basic Unix random number generator

     51:    Options Database Keys:
     52: . -random_type <rand,rand48,sprng>

     54:   Level: beginner

     56: .seealso: PetscRandomCreate(), PetscRandomSetType(), PETSCRAND48, PETSCSPRNG
     57: M*/

     59: PETSC_EXTERN PetscErrorCode PetscRandomCreate_Rand(PetscRandom r)
     60: {

     64:   PetscMemcpy(r->ops,&PetscRandomOps_Values,sizeof(PetscRandomOps_Values));
     65:   PetscObjectChangeTypeName((PetscObject)r,PETSCRAND);
     66:   return(0);
     67: }