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: }