HiRep 0.1
Loading...
Searching...
No Matches
boundary_conditions.h
1#ifndef BOUNDARY_CONDITIONS_H
2#define BOUNDARY_CONDITIONS_H
3
4#include "suN_types.h"
5#include "spinor_field.h"
6
7#ifdef __cplusplus
8extern "C" {
9#endif
10
11// boundary_conditions.c
12typedef struct {
13 double gauge_boundary_improvement_cs;
14 double gauge_boundary_improvement_ct;
15 double chiSF_boundary_improvement_ds;
16 double fermion_twisting_theta[4];
17 int SF_BCs;
18 suNg gauge_boundary_up;
19 suNg gauge_boundary_dn;
21
22// Architecture independent functions
23#if (defined(WITH_EXPCLOVER) || defined(WITH_CLOVER)) && (defined(BC_T_SF) || defined(BC_T_SF_ROTATED))
24extern void (*cl_SF_BCs)(clover_term *cl);
25#endif
26
27#if (defined(WITH_EXPCLOVER) || defined(WITH_CLOVER)) && defined(BC_T_OPEN)
28extern void (*cl_open_BCs)(clover_term *cl);
29#endif
30
31#ifdef BC_T_ANTIPERIODIC
32extern void (*sp_T_antiperiodic_BCs)();
33#endif
34
35#ifdef BC_X_ANTIPERIODIC
36extern void (*sp_X_antiperiodic_BCs)();
37#endif
38
39#ifdef BC_Y_ANTIPERIODIC
40extern void (*sp_Y_antiperiodic_BCs)();
41#endif
42
43#ifdef BC_Z_ANTIPERIODIC
44extern void (*sp_Z_antiperiodic_BCs)();
45#endif
46
47#ifdef BC_T_SF_ROTATED
48extern void (*chiSF_ds_BT)(double ds);
49#endif
50
51#if defined(BC_T_SF) || defined(BC_T_SF_ROTATED)
52extern void (*gf_SF_BCs)(suNg *dn, suNg *up);
53extern void (*SF_classical_solution_core)(suNg *U, int it);
54void SF_classical_solution(void);
55#endif
56
57#ifdef BC_T_OPEN
58extern void (*gf_open_BCs)();
59#endif
60
61#if defined(BC_T_SF) || defined(BC_T_SF_ROTATED)
62extern void (*mf_Dirichlet_BCs)(suNg_av_field *force);
63#endif
64
65#ifdef BC_T_OPEN
66extern void (*mf_open_BCs)(suNg_av_field *force);
67#endif
68
69#if defined(BC_T_SF)
70extern void (*sf_Dirichlet_BCs)(spinor_field *sp);
71extern void (*sf_Dirichlet_BCs_flt)(spinor_field_flt *sp);
72#endif
73
74#if defined(BC_T_SF_ROTATED)
75extern void (*sf_open_BCs)(spinor_field *sp);
76extern void (*sf_open_BCs_flt)(spinor_field_flt *sp);
77#endif
78
79#ifdef BC_T_OPEN
80extern void (*sf_open_v2_BCs)(spinor_field *sf);
81extern void (*sf_open_v2_BCs_flt)(spinor_field_flt *sp);
82#endif
83
84#ifdef WITH_GPU
85#ifdef __cplusplus
86extern "C" {
87#endif
88// For testing, core functions need to expose the architecture
89#if (defined(WITH_EXPCLOVER) || defined(WITH_CLOVER)) && (defined(BC_T_SF) || defined(BC_T_SF_ROTATED))
90void cl_SF_BCs_gpu(clover_term *cl);
91#endif
92
93#if (defined(WITH_EXPCLOVER) || defined(WITH_CLOVER)) && defined(BC_T_OPEN)
94void cl_open_BCs_gpu(clover_term *cl);
95#endif
96
97#ifdef BC_T_ANTIPERIODIC
98void sp_T_antiperiodic_BCs_gpu();
99#endif
100
101#ifdef BC_X_ANTIPERIODIC
102void sp_X_antiperiodic_BCs_gpu();
103#endif
104
105#ifdef BC_Y_ANTIPERIODIC
106void sp_Y_antiperiodic_BCs_gpu();
107#endif
108
109#ifdef BC_Z_ANTIPERIODIC
110void sp_Z_antiperiodic_BCs_gpu();
111#endif
112
113#ifdef BC_T_SF_ROTATED
114void chiSF_ds_BT_gpu(double ds);
115#endif
116
117#if defined(BC_T_SF) || defined(BC_T_SF_ROTATED)
118void gf_SF_BCs_gpu(suNg *dn_h, suNg *up_h);
119void SF_classical_solution_core_gpu(suNg *U_h, int it);
120#endif
121
122#ifdef BC_T_OPEN
123void gf_open_BCs_gpu();
124#endif
125
126#if defined(BC_T_SF) || defined(BC_T_SF_ROTATED)
127void mf_Dirichlet_BCs_gpu(suNg_av_field *force);
128#endif
129
130#ifdef BC_T_OPEN
131void mf_open_BCs_gpu(suNg_av_field *force);
132#endif
133
134#if defined(BC_T_SF)
135void sf_Dirichlet_BCs_gpu(spinor_field *sp);
136void sf_Dirichlet_BCs_flt_gpu(spinor_field_flt *sp);
137#endif
138
139#if defined(BC_T_SF_ROTATED)
140void sf_open_BCs_gpu(spinor_field *sp);
141void sf_open_BCs_flt_gpu(spinor_field_flt *sp);
142#endif
143
144#ifdef BC_T_OPEN
145void sf_open_v2_BCs_gpu(spinor_field *sp);
146void sf_open_v2_BCs_flt_gpu(spinor_field_flt *sp);
147#endif
148#ifdef __cplusplus
149}
150#endif
151#endif
152
153// For testing, core functions need to expose the architecture
154#if (defined(WITH_EXPCLOVER) || defined(WITH_CLOVER)) && (defined(BC_T_SF) || defined(BC_T_SF_ROTATED))
155void cl_SF_BCs_cpu(clover_term *cl);
156#endif
157
158#if (defined(WITH_EXPCLOVER) || defined(WITH_CLOVER)) && defined(BC_T_OPEN)
159void cl_open_BCs_cpu(clover_term *cl);
160#endif
161
162#ifdef BC_T_ANTIPERIODIC
163void sp_T_antiperiodic_BCs_cpu();
164#endif
165
166#ifdef BC_X_ANTIPERIODIC
167void sp_X_antiperiodic_BCs_cpu();
168#endif
169
170#ifdef BC_Y_ANTIPERIODIC
171void sp_Y_antiperiodic_BCs_cpu();
172#endif
173
174#ifdef BC_Z_ANTIPERIODIC
175void sp_Z_antiperiodic_BCs_cpu();
176#endif
177
178#ifdef BC_T_SF_ROTATED
179void chiSF_ds_BT_cpu(double ds);
180#endif
181
182#if defined(BC_T_SF) || defined(BC_T_SF_ROTATED)
183void gf_SF_BCs_cpu(suNg *dn, suNg *up);
184void SF_classical_solution_core_cpu(suNg *U, int it);
185#endif
186
187#ifdef BC_T_OPEN
188void gf_open_BCs_cpu();
189#endif
190
191#if defined(BC_T_SF) || defined(BC_T_SF_ROTATED)
192void mf_Dirichlet_BCs_cpu(suNg_av_field *force);
193#endif
194
195#ifdef BC_T_OPEN
196void mf_open_BCs_cpu(suNg_av_field *force);
197#endif
198
199#if defined(BC_T_SF)
200void sf_Dirichlet_BCs_cpu(spinor_field *sp);
201void sf_Dirichlet_BCs_flt_cpu(spinor_field_flt *sp);
202#endif
203
204#if defined(BC_T_SF_ROTATED)
205void sf_open_BCs_cpu(spinor_field *sp);
206void sf_open_BCs_flt_cpu(spinor_field_flt *sp);
207#endif
208
209#ifdef BC_T_OPEN
210void sf_open_v2_BCs_cpu(spinor_field *sf);
211void sf_open_v2_BCs_flt_cpu(spinor_field_flt *sp);
212#endif
213
214#ifdef GAUGE_SPATIAL_TWIST
215void init_plaq_twisted_BCs();
216#endif
217
218void init_BCs(BCs_pars_t *pars);
219void init_plaq_open_BCs(double *plaq_weight, double *rect_weight, double ct, double cs);
220void free_BCs();
221
222extern void (*apply_BCs_on_represented_gauge_field)();
223void apply_BCs_on_represented_gauge_field_cpu();
224#ifdef WITH_GPU
225void apply_BCs_on_represented_gauge_field_gpu();
226#endif
227
228extern void (*apply_BCs_on_fundamental_gauge_field)();
229void apply_BCs_on_fundamental_gauge_field_cpu();
230#ifdef WITH_GPU
231void apply_BCs_on_fundamental_gauge_field_gpu();
232#endif
233
234extern void (*apply_BCs_on_momentum_field)(suNg_av_field *force);
235void apply_BCs_on_momentum_field_cpu(suNg_av_field *force);
236#ifdef WITH_GPU
237void apply_BCs_on_momentum_field_gpu(suNg_av_field *force);
238#endif
239
240extern void (*apply_BCs_on_spinor_field)(spinor_field *sp);
241void apply_BCs_on_spinor_field_cpu(spinor_field *sp);
242#ifdef WITH_GPU
243void apply_BCs_on_spinor_field_gpu(spinor_field *sp);
244#endif
245
246extern void (*apply_BCs_on_spinor_field_flt)(spinor_field_flt *sp);
247void apply_BCs_on_spinor_field_flt_cpu(spinor_field_flt *sp);
248#ifdef WITH_GPU
249void apply_BCs_on_spinor_field_flt_gpu(spinor_field_flt *sp);
250#endif
251
252extern void (*apply_BCs_on_clover_term)(clover_term *cl);
253void apply_BCs_on_clover_term_cpu(clover_term *cl);
254#ifdef WITH_GPU
255void apply_BCs_on_clover_term_gpu(clover_term *cl);
256#endif
257
258void apply_background_field_zdir(suNg_field *V, double Q, int n);
259
260// Schrodinger functional helpers
261void calc_SF_U(suNg *U, int x0);
262void init_gf_SF_BCs(suNg *dn, suNg *up);
263void init_plaq_SF_BCs(double ct);
264
265#ifdef __cplusplus
266}
267#endif
268#endif //BOUNDARY_CONDITIONS_H
The elementary site structures defined in suN.h are used in this file to define field structures that...
Definition boundary_conditions.h:12
Clover term.
Definition spinor_field.h:288
Spinor field array containing single precision SU(N_f) spinors in chosen fermion representation.
Definition spinor_field.h:207
Spinor field array containing SU(N_f) spinors in chosen fermion representation.
Definition spinor_field.h:189
Field of SU(N_g) algebra vectors.
Definition spinor_field.h:224
Gauge field of SU(N_g) matrices.
Definition spinor_field.h:98