-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathks_action_paths.h
80 lines (67 loc) · 2.37 KB
/
ks_action_paths.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
#ifndef _KS_ACTION_PATHS_H
#define _KS_ACTION_PATHS_H
#include "../include/complex.h"
/* Structure specifying each rotation and reflection of each kind of
path. */
#define MAX_PATH_LENGTH 16
typedef struct {
int dir[MAX_PATH_LENGTH]; /* directions in path */
int length; /* length of path */
Real coeff; /* coefficient, including minus sign if backwards */
Real forwback; /* +1 if in forward Dslash, -1 if in backward */
} Q_path;
/* Structure defining the fermion action using paths or optimized
coefficients */
#define MAX_NAIK 12 // max number of quarks that require Naik epsilon correction
// without c quark this is normally 1, however this
// constant should be set to at least 2
typedef struct {
Real one_link;
Real naik;
Real three_staple;
Real five_staple;
Real seven_staple;
Real lepage;
} asqtad_coeffs_t;
typedef struct {
asqtad_coeffs_t act_path_coeff; /* For optimized Asqtad action */
int num_q_paths; /* For all actions */
Q_path *q_paths; /* For all actions */
} ks_component_paths;
typedef struct {
int n_naiks;
double eps_naik[MAX_NAIK];
ks_component_paths p1, p2, p3;
int umethod;
int ugroup;
int constructed; /* Boolean */
} ks_action_paths_hisq;
typedef struct {
int n_naiks;
double eps_naik[MAX_NAIK];
ks_component_paths p1, p2, p3; // TO BE DECIDED
int umethod;
int ugroup;
int constructed; /* Boolean */
} ks_action_paths_hypisq;
typedef struct {
ks_component_paths p;
int constructed; /* Boolean */
} ks_action_paths;
/* ks_action_paths.c */
ks_action_paths *create_path_table(void);
void destroy_path_table(ks_action_paths *ap);
int make_path_table(ks_action_paths *ap, ks_action_paths *ap_dmdu0);
char *get_ap_string(ks_action_paths *ap);
/* ks_action_paths_hisq.c */
ks_action_paths_hisq *create_path_table_hisq(void);
void destroy_path_table_hisq(ks_action_paths_hisq *ap);
void load_act_path_coeff_hisq(ks_action_paths_hisq *ap, int n_naiks,
double *eps_naik);
int make_path_table_hisq(ks_action_paths_hisq *ap, int n_naiks, double *eps_naik);
int get_n_naiks(ks_action_paths_hisq *ap);
double *get_eps_naik(ks_action_paths_hisq *ap);
int get_umethod(ks_action_paths_hisq *ap);
int get_ugroup(ks_action_paths_hisq *ap);
char *get_ap_string_hisq(ks_action_paths_hisq *ap);
#endif /* _KS_ACTION_PATHS_H */