00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef RANDOM_H
00014 #define RANDOM_H
00015
00016 #include <iostream>
00017 #include <string>
00018 #include <math.h>
00019 #include <limits>
00020
00021 #ifdef USESPRNG
00022 #include "sprng_cpp.h"
00023 #endif
00024
00025 #ifdef PARALLEL
00026 #include "mpi.h"
00027 #endif
00028
00029 #define NTAB 32
00030
00031 using namespace std;
00045 class Random
00046 {
00047 private:
00051 long start;
00052
00057 long current;
00058
00059 #ifdef USESPRNG
00060
00063 Sprng * stream;
00064
00065 #endif
00066
00067
00068 long iy;
00069 long iv[NTAB];
00070
00084 double ran1(long *idum);
00085
00086 public:
00087
00088 Random();
00089
00090 ~Random();
00091
00092 Random(long seed);
00093
00094 Random(const Random & rhs);
00095
00103 void initialize(long seed, int rank);
00104
00108 void reset();
00109
00115 void printStream(ostream & strm);
00116
00122 void writeXML(ostream & strm);
00123
00130 bool readXML(istream & strm);
00131
00139 int intdev();
00140
00148 double unidev();
00149
00158 double gasdev();
00159
00178 double expdev();
00179
00193 double sindev();
00194
00195 double sindev(double u);
00196
00211 double randomDistribution1();
00212
00223 double pdf2(double a, double zeta, double x);
00224 double randomDistribution2(double a, double zeta, double min, double max);
00225
00226 double randomDistribution3(double F);
00227 };
00228
00233 extern Random ran;
00234
00235 #endif