NEURON
nrnran123.h
Go to the documentation of this file.
1 #ifndef nrnran123_h
2 #define nrnran123_h
3 
4 /* interface to Random123 */
5 /* http://www.thesalmons.org/john/random123/papers/random123sc11.pdf */
6 
7 /*
8 The 4x32 generators utilize a uint32x4 counter and uint32x4 key to transform
9 into an almost cryptographic quality uint32x4 random result.
10 There are many possibilites for balancing the sharing of the internal
11 state instances while reserving a uint32 counter for the stream sequence
12 and reserving other portions of the counter vector for stream identifiers
13 and global index used by all streams.
14 
15 We currently provide a single instance by default in which the policy is
16 to use the 0th counter uint32 as the stream sequence, words 2, 3 and 4 as the
17 stream identifier, and word 0 of the key as the global index. Unused words
18 are constant uint32 0.
19 
20 It is also possible to use Random123 directly without reference to this
21 interface. See Random123-1.02/docs/html/index.html
22 of the full distribution available from
23 http://www.deshawresearch.com/resources_random123.html
24 */
25 
26 #include <inttypes.h>
27 
28 
29 typedef struct nrnran123_State nrnran123_State;
30 
31 typedef struct nrnran123_array4x32 {
32  uint32_t v[4];
34 
35 /* global index. eg. run number */
36 /* all generator instances share this global index */
37 extern void nrnran123_set_globalindex(uint32_t gix);
38 extern uint32_t nrnran123_get_globalindex();
39 
40 /* minimal data stream */
41 #if defined(__cplusplus)
42 extern "C" {
43 #endif
44 
45 extern nrnran123_State* nrnran123_newstream(uint32_t id1, uint32_t id2);
46 extern nrnran123_State* nrnran123_newstream3(uint32_t id1, uint32_t id2, uint32_t id3);
48 extern void nrnran123_getseq(nrnran123_State*, uint32_t* seq, char* which);
49 extern void nrnran123_setseq(nrnran123_State*, uint32_t seq, char which);
50 extern void nrnran123_getids(nrnran123_State*, uint32_t* id1, uint32_t* id2);
51 extern void nrnran123_getids3(nrnran123_State*, uint32_t* id1, uint32_t* id2, uint32_t* id3);
52 
53 extern double nrnran123_negexp(nrnran123_State*); /* mean 1.0 */
54 extern uint32_t nrnran123_ipick(nrnran123_State*); /* uniform 0 to 2^32-1 */
55 extern double nrnran123_dblpick(nrnran123_State*); /* uniform open interval (0,1)*/
56 /* nrnran123_dblpick minimum value is 2.3283064e-10 and max value is 1-min */
57 
58 /* nrnran123_negexp min value is 2.3283064e-10, max is 22.18071 */
59 extern double nrnran123_normal(nrnran123_State*); /* mean 0.0, std 1.0 */
60 
61 #if defined(__cplusplus)
62 }
63 #endif
64 
65 /* more fundamental (stateless) (though the global index is still used) */
66 extern nrnran123_array4x32 nrnran123_iran(uint32_t seq, uint32_t id1, uint32_t id2);
67 extern nrnran123_array4x32 nrnran123_iran3(uint32_t seq, uint32_t id1, uint32_t id2, uint32_t id3);
68 extern double nrnran123_uint2dbl(uint32_t);
69 
70 
71 #endif
double nrnran123_uint2dbl(uint32_t)
Definition: nrnran123.cpp:130
nrnran123_array4x32 nrnran123_iran(uint32_t seq, uint32_t id1, uint32_t id2)
Definition: nrnran123.cpp:112
struct nrnran123_array4x32 nrnran123_array4x32
uint32_t nrnran123_ipick(nrnran123_State *)
Definition: nrnran123.cpp:71
void nrnran123_set_globalindex(uint32_t gix)
Definition: nrnran123.cpp:19
void nrnran123_setseq(nrnran123_State *, uint32_t seq, char which)
Definition: nrnran123.cpp:50
void nrnran123_getids3(nrnran123_State *, uint32_t *id1, uint32_t *id2, uint32_t *id3)
Definition: nrnran123.cpp:65
double nrnran123_normal(nrnran123_State *)
Definition: nrnran123.cpp:96
double nrnran123_dblpick(nrnran123_State *)
Definition: nrnran123.cpp:85
nrnran123_State * nrnran123_newstream(uint32_t id1, uint32_t id2)
Definition: nrnran123.cpp:28
uint32_t nrnran123_get_globalindex()
Definition: nrnran123.cpp:24
nrnran123_array4x32 nrnran123_iran3(uint32_t seq, uint32_t id1, uint32_t id2, uint32_t id3)
Definition: nrnran123.cpp:115
void nrnran123_getids(nrnran123_State *, uint32_t *id1, uint32_t *id2)
Definition: nrnran123.cpp:60
nrnran123_State * nrnran123_newstream3(uint32_t id1, uint32_t id2, uint32_t id3)
Definition: nrnran123.cpp:31
double nrnran123_negexp(nrnran123_State *)
Definition: nrnran123.cpp:89
void nrnran123_deletestream(nrnran123_State *)
Definition: nrnran123.cpp:41
void nrnran123_getseq(nrnran123_State *, uint32_t *seq, char *which)
Definition: nrnran123.cpp:45
uint32_t v[4]
Definition: nrnran123.h:32