1*5c6c1daeSBarry Smith 2*5c6c1daeSBarry Smith #include <../src/sys/classes/random/randomimpl.h> 3*5c6c1daeSBarry Smith #if defined (PETSC_HAVE_STDLIB_H) 4*5c6c1daeSBarry Smith #include <stdlib.h> 5*5c6c1daeSBarry Smith #endif 6*5c6c1daeSBarry Smith 7*5c6c1daeSBarry Smith #undef __FUNCT__ 8*5c6c1daeSBarry Smith #define __FUNCT__ "PetscRandomSeed_Rand48" 9*5c6c1daeSBarry Smith PetscErrorCode PetscRandomSeed_Rand48(PetscRandom r) 10*5c6c1daeSBarry Smith { 11*5c6c1daeSBarry Smith PetscFunctionBegin; 12*5c6c1daeSBarry Smith srand48(r->seed); 13*5c6c1daeSBarry Smith PetscFunctionReturn(0); 14*5c6c1daeSBarry Smith } 15*5c6c1daeSBarry Smith 16*5c6c1daeSBarry Smith #undef __FUNCT__ 17*5c6c1daeSBarry Smith #define __FUNCT__ "PetscRandomGetValue_Rand48" 18*5c6c1daeSBarry Smith PetscErrorCode PetscRandomGetValue_Rand48(PetscRandom r,PetscScalar *val) 19*5c6c1daeSBarry Smith { 20*5c6c1daeSBarry Smith PetscFunctionBegin; 21*5c6c1daeSBarry Smith #if defined(PETSC_USE_COMPLEX) 22*5c6c1daeSBarry Smith if (r->iset) { 23*5c6c1daeSBarry Smith *val = PetscRealPart(r->width)*(PetscReal)drand48() + PetscRealPart(r->low) + 24*5c6c1daeSBarry Smith (PetscImaginaryPart(r->width)*(PetscReal)drand48() + PetscImaginaryPart(r->low)) * PETSC_i; 25*5c6c1daeSBarry Smith } else { 26*5c6c1daeSBarry Smith *val = (PetscReal)drand48() + (PetscReal)drand48()*PETSC_i; 27*5c6c1daeSBarry Smith } 28*5c6c1daeSBarry Smith #else 29*5c6c1daeSBarry Smith if (r->iset) *val = r->width * drand48() + r->low; 30*5c6c1daeSBarry Smith else *val = drand48(); 31*5c6c1daeSBarry Smith #endif 32*5c6c1daeSBarry Smith PetscFunctionReturn(0); 33*5c6c1daeSBarry Smith } 34*5c6c1daeSBarry Smith 35*5c6c1daeSBarry Smith #undef __FUNCT__ 36*5c6c1daeSBarry Smith #define __FUNCT__ "PetscRandomGetValueReal_Rand48" 37*5c6c1daeSBarry Smith PetscErrorCode PetscRandomGetValueReal_Rand48(PetscRandom r,PetscReal *val) 38*5c6c1daeSBarry Smith { 39*5c6c1daeSBarry Smith PetscFunctionBegin; 40*5c6c1daeSBarry Smith #if defined(PETSC_USE_COMPLEX) 41*5c6c1daeSBarry Smith if (r->iset) *val = PetscRealPart(r->width)*drand48() + PetscRealPart(r->low); 42*5c6c1daeSBarry Smith else *val = drand48(); 43*5c6c1daeSBarry Smith #else 44*5c6c1daeSBarry Smith if (r->iset) *val = r->width * drand48() + r->low; 45*5c6c1daeSBarry Smith else *val = drand48(); 46*5c6c1daeSBarry Smith #endif 47*5c6c1daeSBarry Smith PetscFunctionReturn(0); 48*5c6c1daeSBarry Smith } 49*5c6c1daeSBarry Smith 50*5c6c1daeSBarry Smith static struct _PetscRandomOps PetscRandomOps_Values = { 51*5c6c1daeSBarry Smith /* 0 */ 52*5c6c1daeSBarry Smith PetscRandomSeed_Rand48, 53*5c6c1daeSBarry Smith PetscRandomGetValue_Rand48, 54*5c6c1daeSBarry Smith PetscRandomGetValueReal_Rand48, 55*5c6c1daeSBarry Smith 0, 56*5c6c1daeSBarry Smith /* 5 */ 57*5c6c1daeSBarry Smith 0 58*5c6c1daeSBarry Smith }; 59*5c6c1daeSBarry Smith 60*5c6c1daeSBarry Smith /*MC 61*5c6c1daeSBarry Smith PETSCRAND48 - access to the basic Unix drand48() random number generator 62*5c6c1daeSBarry Smith 63*5c6c1daeSBarry Smith Options Database Keys: 64*5c6c1daeSBarry Smith . -random_type <rand,rand48,sprng> 65*5c6c1daeSBarry Smith 66*5c6c1daeSBarry Smith Level: beginner 67*5c6c1daeSBarry Smith 68*5c6c1daeSBarry Smith .seealso: RandomCreate(), RandomSetType(), PETSCRAND, PETSCSPRNG 69*5c6c1daeSBarry Smith M*/ 70*5c6c1daeSBarry Smith 71*5c6c1daeSBarry Smith EXTERN_C_BEGIN 72*5c6c1daeSBarry Smith #undef __FUNCT__ 73*5c6c1daeSBarry Smith #define __FUNCT__ "PetscRandomCreate_Rand48" 74*5c6c1daeSBarry Smith PetscErrorCode PetscRandomCreate_Rand48(PetscRandom r) 75*5c6c1daeSBarry Smith { 76*5c6c1daeSBarry Smith PetscErrorCode ierr; 77*5c6c1daeSBarry Smith 78*5c6c1daeSBarry Smith PetscFunctionBegin; 79*5c6c1daeSBarry Smith ierr = PetscMemcpy(r->ops,&PetscRandomOps_Values,sizeof(PetscRandomOps_Values));CHKERRQ(ierr); 80*5c6c1daeSBarry Smith /* r->bops->publish = PetscRandomPublish; */ 81*5c6c1daeSBarry Smith /* r->petscnative = PETSC_TRUE; */ 82*5c6c1daeSBarry Smith 83*5c6c1daeSBarry Smith ierr = PetscObjectChangeTypeName((PetscObject)r,PETSCRAND48);CHKERRQ(ierr); 84*5c6c1daeSBarry Smith PetscFunctionReturn(0); 85*5c6c1daeSBarry Smith } 86*5c6c1daeSBarry Smith EXTERN_C_END 87