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 ((PetscReal)((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: }
50: static struct _PetscRandomOps PetscRandomOps_Values = {
51: /* 0 */
52: PetscRandomSeed_Rand,
53: PetscRandomGetValue_Rand,
54: PetscRandomGetValueReal_Rand,
55: 0,
56: /* 5 */
57: 0
58: };
60: /*MC
61: PETSCRAND - access to the basic Unix random number generator
63: Options Database Keys:
64: . -random_type <rand,rand48,sprng>
66: Level: beginner
68: .seealso: RandomCreate(), RandomSetType(), PETSCRAND48, PETSCSPRNG
69: M*/
74: PetscErrorCode PetscRandomCreate_Rand(PetscRandom r)
75: {
79: PetscMemcpy(r->ops,&PetscRandomOps_Values,sizeof(PetscRandomOps_Values));
80: PetscObjectChangeTypeName((PetscObject)r,PETSCRAND);
81: PetscPublishAll(r);
82: return(0);
83: }