eOn client
Long-timescale dynamics: aKMC, NEB, parallel replica
☾
Toggle main menu visibility
Loading...
Searching...
No Matches
RandomNumbers.cpp
Go to the documentation of this file.
1
/*
2
** This file is part of eOn.
3
**
4
** SPDX-License-Identifier: BSD-3-Clause
5
**
6
** Copyright (c) 2010--present, eOn Development Team
7
** All rights reserved.
8
**
9
** Repo:
10
** https://github.com/TheochemUI/eOn
11
*/
12
#include "
eon/RandomNumbers.h
"
13
14
#include <cmath>
15
16
double
eonc::rng::random
(
long
newSeed) {
17
static
long
seed = -1;
18
if
(newSeed) {
19
seed = -newSeed;
20
}
21
int
j;
22
long
k;
23
static
long
seed2 = 123456789;
24
static
long
iy = 0;
25
static
long
iv[
NTAB
];
26
double
temp;
27
if
(seed <= 0) {
28
if
(-(seed) < 1)
29
seed = 3;
30
else
31
seed = -(seed);
32
seed2 = (seed);
33
for
(j =
NTAB
+ 7; j >= 0; j--) {
34
k = (seed) /
IQ1
;
35
seed =
IA1
* (seed - k *
IQ1
) - k *
IR1
;
36
if
(seed < 0)
37
seed +=
IM1
;
38
if
(j <
NTAB
)
39
iv[j] = seed;
40
}
41
iy = iv[0];
42
}
43
k = (seed) /
IQ1
;
44
seed =
IA1
* (seed - k *
IQ1
) - k *
IR1
;
45
if
(seed < 0)
46
seed +=
IM1
;
47
k = seed2 /
IQ2
;
48
seed2 =
IA2
* (seed2 - k *
IQ2
) - k *
IR2
;
49
if
(seed2 < 0)
50
seed2 +=
IM2
;
51
j = int(iy /
NDIV
);
52
iy = iv[j] - seed2;
53
iv[j] = seed;
54
if
(iy < 1)
55
iy +=
IMM1
;
56
if
((temp =
double
(
AM
* iy)) >
RNMX
)
57
return
RNMX
;
58
else
59
return
temp;
60
}
61
62
double
eonc::rng::randomDouble
() {
return
(
random
()); }
63
64
double
eonc::rng::randomDouble
(
int
max) {
65
double
dmax = double(max);
66
return
(dmax *
randomDouble
());
67
}
68
69
double
eonc::rng::randomDouble
(
long
max) {
70
double
dmax = double(max);
71
return
(dmax *
randomDouble
());
72
}
73
74
double
eonc::rng::randomDouble
(
double
dmax) {
return
(dmax *
randomDouble
()); }
75
76
long
eonc::rng::randomInt
(
int
lower,
int
upper) {
77
return
lround((upper - lower) *
randomDouble
() + lower);
78
}
79
80
double
eonc::rng::gaussRandom
(
double
avg,
double
std) {
81
double
r = 2, v1, v2, l, result;
82
while
(r >= 1.0 || r < 1e-300) {
83
v1 = 2.0 *
randomDouble
() - 1.0;
84
v2 = 2.0 *
randomDouble
() - 1.0;
85
r = v1 * v1 + v2 * v2;
86
}
87
l = v1 * sqrt(-2.0 *
::log
(r) / r);
88
result = avg + std * l;
89
return
(result);
90
}
RandomNumbers.h
eonc::log
Definition
EonLogger.h:28
eonc::rng::random
double random(long newSeed=0)
Definition
RandomNumbers.cpp:16
eonc::rng::randomInt
long randomInt(int lower, int upper)
Definition
RandomNumbers.cpp:76
eonc::rng::randomDouble
double randomDouble()
Definition
RandomNumbers.cpp:62
eonc::rng::gaussRandom
double gaussRandom(double avg, double std)
Definition
RandomNumbers.cpp:80
eonc::AM
constexpr double AM
Definition
RandomNumbers.h:18
eonc::NDIV
constexpr int NDIV
Definition
RandomNumbers.h:20
eonc::IA2
constexpr long IA2
Definition
RandomNumbers.h:27
eonc::IR2
constexpr long IR2
Definition
RandomNumbers.h:31
eonc::IQ1
constexpr long IQ1
Definition
RandomNumbers.h:28
eonc::NTAB
constexpr int NTAB
Definition
RandomNumbers.h:19
eonc::IA1
constexpr long IA1
Definition
RandomNumbers.h:26
eonc::IQ2
constexpr long IQ2
Definition
RandomNumbers.h:29
eonc::IM1
constexpr long IM1
Definition
RandomNumbers.h:23
eonc::IMM1
constexpr long IMM1
Definition
RandomNumbers.h:25
eonc::IM2
constexpr long IM2
Definition
RandomNumbers.h:24
eonc::IR1
constexpr long IR1
Definition
RandomNumbers.h:30
eonc::RNMX
constexpr double RNMX
Definition
RandomNumbers.h:22
client
RandomNumbers.cpp
Generated by
1.17.0
Generated by
Doxygen 1.17.0
Analytics by
Antics
provided by
TurtleTech ehf