--- trunk/mdtools/md_code/randomSPRNG.cpp 2002/12/30 16:20:42 220 +++ trunk/mdtools/md_code/randomSPRNG.cpp 2003/01/02 20:14:08 221 @@ -3,40 +3,71 @@ #include "randomSPRNG.hpp" #include "simError.h" +#ifdef IS_MPI +#include "mpiSimulation.hpp" +#endif - /* randomStreamSPRNF creates a new SPRNG stream for random numbers */ -int ranStreamSPRNG::nSPRNGStreams; +int randomSPRNG::nStreamsInitialized; -randomStreamSPRNG::randomStreamSPRNG(){ +randomSPRNG::randomSPRNG(iseed){ #ifdef IS_MPI + nStreamsInitialized++; + //Fix this +#error "Fix instance of mpiSimulation in randomSPRNG" + nSPRNGStreams = getnumberProcessors(); + myStreamNumber = nStreamsInitialized*(getMyNode() + nSPRNGStreams); - #else - nSPRNGStreams++; - + nStreamsInitialized++; + nSPRNGStreams = 1; myStreamNumber = nSPRNGStreams; - thisStream = init_sprng(GTYPE,streamnum,nstreams,SEED,SPRNG_DEFAULT); - - #endif + + thisStream = init_sprng(GTYPE,myStreamNumber,nSPRNGStreams, + iseed,SPRNG_DEFAULT); } -randomStreamSPRNG::~randomStreamSPRNG(){ +randomSPRNG::~randomSPRNG(){ free_sprng(int *thisStream); - nSPRNGStreams--; + nStreamsInitialized--; - } -double getRanStreamSPRNG(){ +double randomSPRNG::getRandom(){ double ranNum; - nanNum = sprng(thisStream); + 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; +}