-
Notifications
You must be signed in to change notification settings - Fork 0
/
global.h
124 lines (100 loc) · 2.79 KB
/
global.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
//
// Created by maximilian on 30.08.21.
//
#ifndef MODELAB_CUDA_GLOBAL_H
#define MODELAB_CUDA_GLOBAL_H
#include <string>
typedef float TFloat;
#define POWER_TWO(a) ((a)*(a))
#define POWER_THREE(a) ((a)*(a)*(a))
#define DYNAMIC_CHANGE_MODE_RE_INIT 0
#define DYNAMIC_CHANGE_MODE_AVG_SUBTRACT 1
#define DYNAMIC_CHANGE_MODE_ZERO 2
#define curandStateType curandStateMRG32k3a
//Cuda threads for each block.
const int NUM_THREADS = 128;
/**
* Lattice - struct
* Contains all pointers (DEVCIE) for the field-arrays
*/
typedef struct {
//Main fields
TFloat *d_lattice_sigma;
TFloat *d_lattice_pi;
TFloat *d_lattice_n;
TFloat *d_lattice_nu;
//Buffer field for leapfrog integration
TFloat *d_next_lattice_sigma;
TFloat *d_next_lattice_pi;
TFloat *d_next_lattice_n;
TFloat *d_next_lattice_nu;
//Random states
void * d_curandStateArray; //type: curandStateMRG32k3a_t, can't use this type because .h-file is no .cuh file
//vector random noise
TFloat * d_random_noise; // [ dim1,dim2,(dim3)]
TFloat * d_next_random_noise;
//Observables arrays
TFloat * d_obs_sigma_avg;
TFloat * d_obs_sigma_sq_avg;
TFloat * d_obs_pi_avg;
TFloat * d_obs_pi_sq_avg;
TFloat * d_obs_n_avg;
TFloat * d_obs_n_sq_avg;
TFloat * d_obs_nu_avg;
TFloat * d_obs_nu_sq_avg;
} Lattice;
/**
* Parameters - struct
* Contains physical constants, program Options and calculated values
* Is passed by copy-by-value
*/
typedef struct {
//lattice props
unsigned int dimension;
unsigned int sites;
unsigned int volume; // = sites^dimension
//LatticeEquation
TFloat msq_A;
TFloat lambda_A;
TFloat gamma_A;
TFloat msq_B;
TFloat gamma_B;
TFloat J;
TFloat C;
TFloat mu;
TFloat temperature;
//Time Integration / Simulation
TFloat integrator_timeDelta;
bool fastThermalization;
unsigned int thermalization_time_1;
unsigned int thermalization_time_2;
unsigned int thermalization_time_3;
unsigned int measure_time;
unsigned long long seed;
unsigned int number_of_simulations;
unsigned int dynamicChangeMode;
//Cached variables to avoid sqrt computation in kernel
TFloat integrator_timeDelta_SQRT;
TFloat standard_deviation_B;
TFloat standard_deviation_A;
//External field for thermalization
TFloat symmetryBreakingJ;
//InputOutput vars/flags
bool flag_printEveryStep;
std::string outFileName;
} Parameters;
/**
* Observalbes - struct
* Used on the the host-system. The calculated observables form the lattices are stored here
*/
typedef struct {
TFloat sigma_avg;
TFloat sigma_sq_avg;
TFloat pi_avg;
TFloat pi_sq_avg;
TFloat n_avg;
TFloat n_sq_avg;
TFloat nu_avg;
TFloat nu_sq_avg;
} Observables;
#endif //MODELAB_CUDA_GLOBAL_H