ASCOT5
Toggle main menu visibility
Loading...
Searching...
No Matches
random.h
Go to the documentation of this file.
1
5
#ifndef RANDOM_H
6
#define RANDOM_H
7
8
#if defined(RANDOM_MKL)
9
10
#include <mkl_vsl.h>
11
12
/* Use Mersenne Twister as default RNG in MKL */
13
#ifndef RANDOM_MKL_RNG
14
#define RANDOM_MKL_RNG VSL_BRNG_SFMT19937
15
#endif
16
17
typedef
struct
{
18
VSLStreamStatePtr r;
19
}
random_data
;
20
21
void
random_mkl_init(
random_data
*
rdata
,
int
seed);
22
double
random_mkl_uniform(
random_data
*
rdata
);
23
double
random_mkl_normal(
random_data
*
rdata
);
24
void
random_mkl_uniform_simd(
random_data
*
rdata
,
int
n,
double
* r);
25
void
random_mkl_normal_simd(
random_data
*
rdata
,
int
n,
double
* r);
26
27
#define random_init(data, seed) random_mkl_init(data, seed)
28
#define random_uniform(data) random_mkl_uniform(data)
29
#define random_normal(data) random_mkl_normal(data)
30
#define random_uniform_simd(data, n, r) random_mkl_uniform_simd(data, n, r)
31
#define random_normal_simd(data, n, r) random_mkl_normal_simd(data, n, r)
32
33
34
#elif defined(RANDOM_GSL)
35
36
#include <gsl/gsl_rng.h>
37
38
typedef
struct
{
39
gsl_rng* r;
40
}
random_data
;
41
42
void
random_gsl_init(
random_data
*
rdata
,
int
seed);
43
double
random_gsl_uniform(
random_data
*
rdata
);
44
double
random_gsl_normal(
random_data
*
rdata
);
45
void
random_gsl_uniform_simd(
random_data
*
rdata
,
int
n,
double
* r);
46
void
random_gsl_normal_simd(
random_data
*
rdata
,
int
n,
double
* r);
47
48
#define random_init(data, seed) random_gsl_init(data, seed)
49
#define random_uniform(data) random_gsl_uniform(data)
50
#define random_normal(data) random_gsl_normal(data)
51
#define random_uniform_simd(data, n, r) random_gsl_uniform_simd(data, n, r)
52
#define random_normal_simd(data, n, r) random_gsl_normal_simd(data, n, r)
53
54
55
#elif defined(RANDOM_LCG)
56
57
#include <stdint.h>
58
#include "offload.h"
59
60
typedef
struct
{
61
uint64_t r;
62
}
random_data
;
63
64
/* Return the RNG state to use for logical index i.
65
* - CPU: a single RNG state is used
66
* - GPU: one RNG state per parallel slot/lane is used
67
*/
68
static
inline
random_data
* random_lcg_state_at(
random_data
*
rdata
,
int
i) {
69
#ifdef GPU
70
return
&
rdata
[i];
71
#else
72
(void)i;
73
return
rdata
;
74
#endif
75
}
76
77
void
random_lcg_init(
random_data
*
rdata
, uint64_t seed);
78
uint64_t random_lcg_integer(
random_data
*
rdata
);
79
DECLARE_TARGET
80
double
random_lcg_uniform(
random_data
*
rdata
);
81
DECLARE_TARGET_END
82
double
random_lcg_normal(
random_data
*
rdata
);
83
DECLARE_TARGET
84
void
random_lcg_uniform_simd(
random_data
*
rdata
,
int
n,
double
* r);
85
DECLARE_TARGET_END
86
void
random_lcg_normal_simd(
random_data
*
rdata
,
int
n,
double
* r);
87
88
#define random_init(data, seed) random_lcg_init(data, seed)
89
#define random_uniform(data) random_lcg_uniform(data)
90
#define random_normal(data) random_lcg_normal(data)
91
#define random_uniform_simd(data, n, r) random_lcg_uniform_simd(data, n, r)
92
#define random_normal_simd(data, n, r) random_lcg_normal_simd(data, n, r)
93
94
#else
/* No RNG lib defined, use drand48 */
95
96
//#define _XOPEN_SOURCE 500
97
#include <stdlib.h>
98
100
typedef
void
*
random_data
;
101
102
double
random_drand48_normal
();
103
void
random_drand48_uniform_simd
(
int
n,
double
* r);
104
void
random_drand48_normal_simd
(
int
n,
double
* r);
105
107
#define random_init(data, seed) srand48(seed)
109
#define random_uniform(data) drand48()
111
#define random_normal(data) random_drand48_normal()
113
#define random_uniform_simd(data, n, r) random_drand48_uniform_simd(n, r)
115
#define random_normal_simd(data, n, r) random_drand48_normal_simd(n, r)
116
117
#endif
// drand48
118
119
#endif
rdata
random_data rdata
Definition
afsi.c:26
random_drand48_uniform_simd
void random_drand48_uniform_simd(int n, double *r)
Vectorised sampling from uniform distribution.
Definition
random.c:182
random_drand48_normal
double random_drand48_normal()
Initialize random generator which uses the linear congruential algorithm and 48-bit integer arithmeti...
Definition
random.c:168
random_drand48_normal_simd
void random_drand48_normal_simd(int n, double *r)
Vectorised sampling from normal distribution.
Definition
random.c:197
random_data
void * random_data
Definition
random.h:100
Generated on
for ASCOT5 by
1.18.0