ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/mdtools/md_code/randomSPRNG.cpp
Revision: 250
Committed: Mon Jan 27 22:12:57 2003 UTC (21 years, 5 months ago) by chuckv
File size: 1157 byte(s)
Log Message:
More bug fixes... Forgot to build sprng

File Contents

# User Rev Content
1 chuckv 219 #include <iostream>
2     #include <cmath>
3    
4     #include "randomSPRNG.hpp"
5     #include "simError.h"
6 chuckv 223 #include "sprng.h"
7    
8 chuckv 221 #ifdef IS_MPI
9     #include "mpiSimulation.hpp"
10     #endif
11 chuckv 219
12 chuckv 220 /* randomStreamSPRNF creates a new SPRNG stream for random numbers
13     */
14 chuckv 219
15 chuckv 223 int randomSPRNG::nStreamsInitialized = 0;
16 chuckv 219
17 chuckv 250 randomSPRNG::randomSPRNG(int iseed){
18 chuckv 223 int newSeed;
19 chuckv 221 nStreamsInitialized++;
20 chuckv 223 newSeed = abs(iseed) + nStreamsInitialized;
21     if( newSeed < 0 ) newSeed = abs( newSeed );
22 chuckv 219
23 chuckv 223 #ifdef IS_MPI
24 chuckv 220
25 chuckv 223 nSPRNGStreams = mpiSim->getNumberProcessors();
26    
27     myStreamNumber = mpiSim->getMyNode();
28    
29    
30    
31 chuckv 220 #else
32 chuckv 223
33 chuckv 221 nSPRNGStreams = 1;
34 chuckv 223 myStreamNumber = nStreamsInitialized;
35 chuckv 220
36 chuckv 221 #endif
37 chuckv 220
38 chuckv 221 thisStream = init_sprng(GTYPE,myStreamNumber,nSPRNGStreams,
39 chuckv 223 newSeed,SPRNG_DEFAULT);
40 chuckv 219 }
41 chuckv 220
42 chuckv 221 randomSPRNG::~randomSPRNG(){
43 chuckv 220
44 chuckv 250 free_sprng(*thisStream);
45 chuckv 221 nStreamsInitialized--;
46 chuckv 220
47     }
48    
49    
50 chuckv 221 double randomSPRNG::getRandom(){
51 chuckv 223 return sprng(thisStream);
52 chuckv 220 }
53 chuckv 221
54    
55     // Gaussian SPRNG class...
56    
57     double gaussianSPRNG::getGaussian(){
58     double ranNum1;
59     double ranNum2;
60     double gaussianNumber;
61    
62     ranNum1 = getRandom();
63     ranNum2 = getRandom();
64    
65     gaussianNumber = sqrt(-2.0 * log(ranNum1)) * cos(2 * M_PI * ranNum2);
66    
67     return gaussianNumber;
68     }