ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/mdtools/md_code/randomSPRNG.cpp
Revision: 221
Committed: Thu Jan 2 20:14:08 2003 UTC (21 years, 6 months ago) by chuckv
File size: 1290 byte(s)
Log Message:
Thermo now can use SPRNG or rand48 (if not MPI).
Finished up work on randomSPRNG. Still need to fix
access to MPISimulation.

File Contents

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