--- trunk/mdtools/md_code/randomSPRNG.cpp 2002/12/29 19:12:06 219 +++ trunk/mdtools/md_code/randomSPRNG.cpp 2003/01/02 20:14:08 221 @@ -3,10 +3,71 @@ #include "randomSPRNG.hpp" #include "simError.h" +#ifdef IS_MPI +#include "mpiSimulation.hpp" +#endif +/* randomStreamSPRNF creates a new SPRNG stream for random numbers + */ -randomSPRNG::randomSPRNG(){ +int randomSPRNG::nStreamsInitialized; +randomSPRNG::randomSPRNG(iseed){ +#ifdef IS_MPI + nStreamsInitialized++; + //Fix this +#error "Fix instance of mpiSimulation in randomSPRNG" + nSPRNGStreams = getnumberProcessors(); + myStreamNumber = nStreamsInitialized*(getMyNode() + nSPRNGStreams); +#else + nStreamsInitialized++; + nSPRNGStreams = 1; + myStreamNumber = nSPRNGStreams; + +#endif + + thisStream = init_sprng(GTYPE,myStreamNumber,nSPRNGStreams, + iseed,SPRNG_DEFAULT); } + +randomSPRNG::~randomSPRNG(){ + + free_sprng(int *thisStream); + nStreamsInitialized--; + +} + + +double randomSPRNG::getRandom(){ + double ranNum; + ranNum = sprng(thisStream); + return ranNum; +} + + +// Gaussian SPRNG class... + +gaussianSPRNG::gaussianSPRNG() : randomSPRNG() +{ +} + +gaussianSPRNG::~gaussianSPRNG() : ~randomSPRNG() +{ +} + +double gaussianSPRNG::getGaussian(){ + double ranNum1; + double ranNum2; + double gaussianNumber; + double R1; + double R2; + + ranNum1 = getRandom(); + ranNum2 = getRandom(); + + gaussianNumber = sqrt(-2.0 * log(ranNum1)) * cos(2 * M_PI * ranNum2); + + return gaussianNumber; +}