ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/mdtools/md_code/randomSPRNG.cpp
Revision: 253
Committed: Thu Jan 30 15:20:21 2003 UTC (21 years, 5 months ago) by chuckv
File size: 1194 byte(s)
Log Message:
Added a generic util code directory and moved Linux_ifc_machdep to it.
MPI changes to compile MPI modules.

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 253 using namespace std;
13    
14 chuckv 220 /* randomStreamSPRNF creates a new SPRNG stream for random numbers
15     */
16 chuckv 219
17 chuckv 223 int randomSPRNG::nStreamsInitialized = 0;
18 chuckv 219
19 chuckv 250 randomSPRNG::randomSPRNG(int iseed){
20 chuckv 223 int newSeed;
21 chuckv 221 nStreamsInitialized++;
22 chuckv 223 newSeed = abs(iseed) + nStreamsInitialized;
23     if( newSeed < 0 ) newSeed = abs( newSeed );
24 chuckv 219
25 chuckv 223 #ifdef IS_MPI
26 chuckv 220
27 chuckv 223 nSPRNGStreams = mpiSim->getNumberProcessors();
28    
29     myStreamNumber = mpiSim->getMyNode();
30    
31    
32    
33 chuckv 220 #else
34 chuckv 223
35 chuckv 221 nSPRNGStreams = 1;
36 chuckv 253 myStreamNumber = 0;
37 chuckv 220
38 chuckv 221 #endif
39 chuckv 220
40 chuckv 253
41 chuckv 221 thisStream = init_sprng(GTYPE,myStreamNumber,nSPRNGStreams,
42 chuckv 253 newSeed,SPRNG_DEFAULT);
43 chuckv 219 }
44 chuckv 220
45 chuckv 221 randomSPRNG::~randomSPRNG(){
46 chuckv 252 if ( thisStream != NULL){
47 chuckv 253 free_sprng(thisStream);
48 chuckv 252 nStreamsInitialized--;
49     }
50 chuckv 220 }
51    
52    
53 chuckv 221 double randomSPRNG::getRandom(){
54 chuckv 223 return sprng(thisStream);
55 chuckv 220 }
56 chuckv 221
57    
58     // Gaussian SPRNG class...
59    
60     double gaussianSPRNG::getGaussian(){
61     double ranNum1;
62     double ranNum2;
63     double gaussianNumber;
64    
65     ranNum1 = getRandom();
66     ranNum2 = getRandom();
67    
68     gaussianNumber = sqrt(-2.0 * log(ranNum1)) * cos(2 * M_PI * ranNum2);
69    
70     return gaussianNumber;
71     }