Bridge++  Ver.2.1.3
mult_Wilson_xyz_openacc-inc.h
Go to the documentation of this file.
1 
8 // this is a part of Wilson fermion implementation.
9 // [13 Jun 2019 H.Matsufuru]
10 
11 
12  // mult_xp
13  int idir = 0;
14 
15  int iyzt = site/Nx;
16  int ix = site % Nx;
17  int nn = (ix+1) % Nx;
18 
19  int isn = nn + iyzt * Nx;
20  int isg = ix + iyzt * Nx + idir * Nst_pad;
21 
22  vt1_0 = v1[IDX2_SP_R(0,0,isn)] - v1[IDX2_SP_I(0,3,isn)];
23  vt1_1 = v1[IDX2_SP_I(0,0,isn)] + v1[IDX2_SP_R(0,3,isn)];
24  vt1_2 = v1[IDX2_SP_R(1,0,isn)] - v1[IDX2_SP_I(1,3,isn)];
25  vt1_3 = v1[IDX2_SP_I(1,0,isn)] + v1[IDX2_SP_R(1,3,isn)];
26  vt1_4 = v1[IDX2_SP_R(2,0,isn)] - v1[IDX2_SP_I(2,3,isn)];
27  vt1_5 = v1[IDX2_SP_I(2,0,isn)] + v1[IDX2_SP_R(2,3,isn)];
28 
29  vt2_0 = v1[IDX2_SP_R(0,1,isn)] - v1[IDX2_SP_I(0,2,isn)];
30  vt2_1 = v1[IDX2_SP_I(0,1,isn)] + v1[IDX2_SP_R(0,2,isn)];
31  vt2_2 = v1[IDX2_SP_R(1,1,isn)] - v1[IDX2_SP_I(1,2,isn)];
32  vt2_3 = v1[IDX2_SP_I(1,1,isn)] + v1[IDX2_SP_R(1,2,isn)];
33  vt2_4 = v1[IDX2_SP_R(2,1,isn)] - v1[IDX2_SP_I(2,2,isn)];
34  vt2_5 = v1[IDX2_SP_I(2,1,isn)] + v1[IDX2_SP_R(2,2,isn)];
35 
36  u_0 = u_up[IDX2_G_R(0,0,isg)];
37  u_1 = u_up[IDX2_G_I(0,0,isg)];
38  u_2 = u_up[IDX2_G_R(1,0,isg)];
39  u_3 = u_up[IDX2_G_I(1,0,isg)];
40  u_4 = u_up[IDX2_G_R(2,0,isg)];
41  u_5 = u_up[IDX2_G_I(2,0,isg)];
42 
51 
52  // ic = 0;
53  {
54  real_t bc2 = 1.0;
55  if(ix == Nx-1) bc2 = bc[0];
56  v2_01 = bc2 * wt1r;
57  v2_11 = bc2 * wt1i;
58  v2_02 = bc2 * wt2r;
59  v2_12 = bc2 * wt2i;
60  v2_03 = bc2 * wt2i;
61  v2_13 = -bc2 * wt2r;
62  v2_04 = bc2 * wt1i;
63  v2_14 = -bc2 * wt1r;
64 
65  u_6 = u_up[IDX2_G_R(0,1,isg)];
66  u_7 = u_up[IDX2_G_I(0,1,isg)];
67  u_8 = u_up[IDX2_G_R(1,1,isg)];
68  u_9 = u_up[IDX2_G_I(1,1,isg)];
69  u10 = u_up[IDX2_G_R(2,1,isg)];
70  u11 = u_up[IDX2_G_I(2,1,isg)];
71 
72  wt1r = MULT_GXr(u_6, u_7, u_8, u_9, u10, u11,
74  wt1i = MULT_GXi(u_6, u_7, u_8, u_9, u10, u11,
76  wt2r = MULT_GXr(u_6, u_7, u_8, u_9, u10, u11,
78  wt2i = MULT_GXi(u_6, u_7, u_8, u_9, u10, u11,
80 
81  // ic = 1;
82  v2_21 = bc2 * wt1r;
83  v2_31 = bc2 * wt1i;
84  v2_22 = bc2 * wt2r;
85  v2_32 = bc2 * wt2i;
86  v2_23 = bc2 * wt2i;
87  v2_33 = -bc2 * wt2r;
88  v2_24 = bc2 * wt1i;
89  v2_34 = -bc2 * wt1r;
90 
91 #ifdef SU3_3RD_ROW_RECONST
92  u12 = EXT_IMG_R(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
93  u13 = EXT_IMG_I(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
94  u14 = EXT_IMG_R(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
95  u15 = EXT_IMG_I(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
96  u16 = EXT_IMG_R(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
97  u17 = EXT_IMG_I(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
98 #else
99  u12 = u_up[IDX2_G_R(0,2,isg)];
100  u13 = u_up[IDX2_G_I(0,2,isg)];
101  u14 = u_up[IDX2_G_R(1,2,isg)];
102  u15 = u_up[IDX2_G_I(1,2,isg)];
103  u16 = u_up[IDX2_G_R(2,2,isg)];
104  u17 = u_up[IDX2_G_I(2,2,isg)];
105 #endif
106 
107  wt1r = MULT_GXr(u12, u13, u14, u15, u16, u17,
109  wt1i = MULT_GXi(u12, u13, u14, u15, u16, u17,
111  wt2r = MULT_GXr(u12, u13, u14, u15, u16, u17,
113  wt2i = MULT_GXi(u12, u13, u14, u15, u16, u17,
115 
116  // ic = 2;
122  v2_53 = -bc2 * wt2r;
124  v2_54 = -bc2 * wt1r;
125  }
126  // mult_xm
127  nn = (ix+Nx-1) % Nx;
128 
129  isn = nn + iyzt * Nx;
130  isg = nn + iyzt * Nx + idir * Nst_pad;
131 
132  vt1_0 = v1[IDX2_SP_R(0,0,isn)] + v1[IDX2_SP_I(0,3,isn)];
133  vt1_1 = v1[IDX2_SP_I(0,0,isn)] - v1[IDX2_SP_R(0,3,isn)];
134  vt1_2 = v1[IDX2_SP_R(1,0,isn)] + v1[IDX2_SP_I(1,3,isn)];
135  vt1_3 = v1[IDX2_SP_I(1,0,isn)] - v1[IDX2_SP_R(1,3,isn)];
136  vt1_4 = v1[IDX2_SP_R(2,0,isn)] + v1[IDX2_SP_I(2,3,isn)];
137  vt1_5 = v1[IDX2_SP_I(2,0,isn)] - v1[IDX2_SP_R(2,3,isn)];
138 
139  vt2_0 = v1[IDX2_SP_R(0,1,isn)] + v1[IDX2_SP_I(0,2,isn)];
140  vt2_1 = v1[IDX2_SP_I(0,1,isn)] - v1[IDX2_SP_R(0,2,isn)];
141  vt2_2 = v1[IDX2_SP_R(1,1,isn)] + v1[IDX2_SP_I(1,2,isn)];
142  vt2_3 = v1[IDX2_SP_I(1,1,isn)] - v1[IDX2_SP_R(1,2,isn)];
143  vt2_4 = v1[IDX2_SP_R(2,1,isn)] + v1[IDX2_SP_I(2,2,isn)];
144  vt2_5 = v1[IDX2_SP_I(2,1,isn)] - v1[IDX2_SP_R(2,2,isn)];
145 
146  u_0 = u_dn[IDX2_G_R(0,0,isg)];
147  u_1 = u_dn[IDX2_G_I(0,0,isg)];
148  u_2 = u_dn[IDX2_G_R(0,1,isg)];
149  u_3 = u_dn[IDX2_G_I(0,1,isg)];
150  u_4 = u_dn[IDX2_G_R(0,2,isg)];
151  u_5 = u_dn[IDX2_G_I(0,2,isg)];
152 
153  wt1r = MULT_GDXr(u_0, u_1, u_2, u_3, u_4, u_5,
155  wt1i = MULT_GDXi(u_0, u_1, u_2, u_3, u_4, u_5,
157  wt2r = MULT_GDXr(u_0, u_1, u_2, u_3, u_4, u_5,
159  wt2i = MULT_GDXi(u_0, u_1, u_2, u_3, u_4, u_5,
161 
162  // ic = 0;
163  {
164  real_t bc2 = 1.0;
165  if(ix == 0) bc2 = bc[0];
166  v2_01 += bc2 * wt1r;
167  v2_11 += bc2 * wt1i;
168  v2_02 += bc2 * wt2r;
169  v2_12 += bc2 * wt2i;
170  v2_03 += -bc2 * wt2i;
171  v2_13 += +bc2 * wt2r;
172  v2_04 += -bc2 * wt1i;
173  v2_14 += +bc2 * wt1r;
174 
175  u_6 = u_dn[IDX2_G_R(1,0,isg)];
176  u_7 = u_dn[IDX2_G_I(1,0,isg)];
177  u_8 = u_dn[IDX2_G_R(1,1,isg)];
178  u_9 = u_dn[IDX2_G_I(1,1,isg)];
179  u10 = u_dn[IDX2_G_R(1,2,isg)];
180  u11 = u_dn[IDX2_G_I(1,2,isg)];
181 
182  wt1r = MULT_GDXr(u_6, u_7, u_8, u_9, u10, u11,
184  wt1i = MULT_GDXi(u_6, u_7, u_8, u_9, u10, u11,
186  wt2r = MULT_GDXr(u_6, u_7, u_8, u_9, u10, u11,
188  wt2i = MULT_GDXi(u_6, u_7, u_8, u_9, u10, u11,
190 
191  // ic = 1;
192  v2_21 += bc2 * wt1r;
193  v2_31 += bc2 * wt1i;
194  v2_22 += bc2 * wt2r;
195  v2_32 += bc2 * wt2i;
196  v2_23 += -bc2 * wt2i;
197  v2_33 += +bc2 * wt2r;
198  v2_24 += -bc2 * wt1i;
199  v2_34 += +bc2 * wt1r;
200 
201 #ifdef SU3_3RD_ROW_RECONST
202  u12 = EXT_IMG_R(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
203  u13 = EXT_IMG_I(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
204  u14 = EXT_IMG_R(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
205  u15 = EXT_IMG_I(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
206  u16 = EXT_IMG_R(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
207  u17 = EXT_IMG_I(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
208 #else
209  u12 = u_dn[IDX2_G_R(2,0,isg)];
210  u13 = u_dn[IDX2_G_I(2,0,isg)];
211  u14 = u_dn[IDX2_G_R(2,1,isg)];
212  u15 = u_dn[IDX2_G_I(2,1,isg)];
213  u16 = u_dn[IDX2_G_R(2,2,isg)];
214  u17 = u_dn[IDX2_G_I(2,2,isg)];
215 #endif
216 
217  wt1r = MULT_GDXr(u12, u13, u14, u15, u16, u17,
219  wt1i = MULT_GDXi(u12, u13, u14, u15, u16, u17,
221  wt2r = MULT_GDXr(u12, u13, u14, u15, u16, u17,
223  wt2i = MULT_GDXi(u12, u13, u14, u15, u16, u17,
225 
226  // ic = 2;
227  v2_41 += bc2 * wt1r;
228  v2_51 += bc2 * wt1i;
229  v2_42 += bc2 * wt2r;
230  v2_52 += bc2 * wt2i;
231  v2_43 += -bc2 * wt2i;
232  v2_53 += +bc2 * wt2r;
233  v2_44 += -bc2 * wt1i;
234  v2_54 += +bc2 * wt1r;
235  }
236 
237  // mult_yp
238  int izt = site/(Nx*Ny);
239  int iy = (site/Nx) % Ny;
240  ix = site % Nx;
241  nn = (iy + 1) % Ny;
242  idir = 1;
243 
244  isn = ix + nn * Nx + izt * Nxy;
245  isg = ix + iy * Nx + izt * Nxy + idir * Nst_pad;
246 
247  vt1_0 = v1[IDX2_SP_R(0,0,isn)] + v1[IDX2_SP_R(0,3,isn)];
248  vt1_1 = v1[IDX2_SP_I(0,0,isn)] + v1[IDX2_SP_I(0,3,isn)];
249  vt1_2 = v1[IDX2_SP_R(1,0,isn)] + v1[IDX2_SP_R(1,3,isn)];
250  vt1_3 = v1[IDX2_SP_I(1,0,isn)] + v1[IDX2_SP_I(1,3,isn)];
251  vt1_4 = v1[IDX2_SP_R(2,0,isn)] + v1[IDX2_SP_R(2,3,isn)];
252  vt1_5 = v1[IDX2_SP_I(2,0,isn)] + v1[IDX2_SP_I(2,3,isn)];
253 
254  vt2_0 = v1[IDX2_SP_R(0,1,isn)] - v1[IDX2_SP_R(0,2,isn)];
255  vt2_1 = v1[IDX2_SP_I(0,1,isn)] - v1[IDX2_SP_I(0,2,isn)];
256  vt2_2 = v1[IDX2_SP_R(1,1,isn)] - v1[IDX2_SP_R(1,2,isn)];
257  vt2_3 = v1[IDX2_SP_I(1,1,isn)] - v1[IDX2_SP_I(1,2,isn)];
258  vt2_4 = v1[IDX2_SP_R(2,1,isn)] - v1[IDX2_SP_R(2,2,isn)];
259  vt2_5 = v1[IDX2_SP_I(2,1,isn)] - v1[IDX2_SP_I(2,2,isn)];
260 
261  u_0 = u_up[IDX2_G_R(0,0,isg)];
262  u_1 = u_up[IDX2_G_I(0,0,isg)];
263  u_2 = u_up[IDX2_G_R(1,0,isg)];
264  u_3 = u_up[IDX2_G_I(1,0,isg)];
265  u_4 = u_up[IDX2_G_R(2,0,isg)];
266  u_5 = u_up[IDX2_G_I(2,0,isg)];
267 
268  wt1r = MULT_GXr(u_0, u_1, u_2, u_3, u_4, u_5,
270  wt1i = MULT_GXi(u_0, u_1, u_2, u_3, u_4, u_5,
272  wt2r = MULT_GXr(u_0, u_1, u_2, u_3, u_4, u_5,
274  wt2i = MULT_GXi(u_0, u_1, u_2, u_3, u_4, u_5,
276 
277  // ic = 0;
278  bc2 = 1.0;
279  if(iy == Ny-1) bc2 = bc[1];
280  v2_01 += bc2 * wt1r;
281  v2_11 += bc2 * wt1i;
282  v2_02 += bc2 * wt2r;
283  v2_12 += bc2 * wt2i;
284  v2_03 += -bc2 * wt2r;
285  v2_13 += -bc2 * wt2i;
286  v2_04 += bc2 * wt1r;
287  v2_14 += bc2 * wt1i;
288 
289  u_6 = u_up[IDX2_G_R(0,1,isg)];
290  u_7 = u_up[IDX2_G_I(0,1,isg)];
291  u_8 = u_up[IDX2_G_R(1,1,isg)];
292  u_9 = u_up[IDX2_G_I(1,1,isg)];
293  u10 = u_up[IDX2_G_R(2,1,isg)];
294  u11 = u_up[IDX2_G_I(2,1,isg)];
295 
296  wt1r = MULT_GXr(u_6, u_7, u_8, u_9, u10, u11,
298  wt1i = MULT_GXi(u_6, u_7, u_8, u_9, u10, u11,
300  wt2r = MULT_GXr(u_6, u_7, u_8, u_9, u10, u11,
302  wt2i = MULT_GXi(u_6, u_7, u_8, u_9, u10, u11,
304 
305  // ic = 1;
306  v2_21 += bc2 * wt1r;
307  v2_31 += bc2 * wt1i;
308  v2_22 += bc2 * wt2r;
309  v2_32 += bc2 * wt2i;
310  v2_23 += -bc2 * wt2r;
311  v2_33 += -bc2 * wt2i;
312  v2_24 += bc2 * wt1r;
313  v2_34 += bc2 * wt1i;
314 
315 #ifdef SU3_3RD_ROW_RECONST
316  u12 = EXT_IMG_R(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
317  u13 = EXT_IMG_I(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
318  u14 = EXT_IMG_R(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
319  u15 = EXT_IMG_I(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
320  u16 = EXT_IMG_R(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
321  u17 = EXT_IMG_I(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
322 #else
323  u12 = u_up[IDX2_G_R(0,2,isg)];
324  u13 = u_up[IDX2_G_I(0,2,isg)];
325  u14 = u_up[IDX2_G_R(1,2,isg)];
326  u15 = u_up[IDX2_G_I(1,2,isg)];
327  u16 = u_up[IDX2_G_R(2,2,isg)];
328  u17 = u_up[IDX2_G_I(2,2,isg)];
329 #endif
330 
331  wt1r = MULT_GXr(u12, u13, u14, u15, u16, u17,
333  wt1i = MULT_GXi(u12, u13, u14, u15, u16, u17,
335  wt2r = MULT_GXr(u12, u13, u14, u15, u16, u17,
337  wt2i = MULT_GXi(u12, u13, u14, u15, u16, u17,
339 
340  // ic = 2;
341  v2_41 += bc2 * wt1r;
342  v2_51 += bc2 * wt1i;
343  v2_42 += bc2 * wt2r;
344  v2_52 += bc2 * wt2i;
345  v2_43 += -bc2 * wt2r;
346  v2_53 += -bc2 * wt2i;
347  v2_44 += bc2 * wt1r;
348  v2_54 += bc2 * wt1i;
349 
350  //mult_ym
351  nn = (iy + Ny - 1) % Ny;
352 
353  isn = ix + nn * Nx + izt * Nxy;
354  isg = ix + nn * Nx + izt * Nxy + idir * Nst_pad;
355 
356  vt1_0 = v1[IDX2_SP_R(0,0,isn)] - v1[IDX2_SP_R(0,3,isn)];
357  vt1_1 = v1[IDX2_SP_I(0,0,isn)] - v1[IDX2_SP_I(0,3,isn)];
358  vt1_2 = v1[IDX2_SP_R(1,0,isn)] - v1[IDX2_SP_R(1,3,isn)];
359  vt1_3 = v1[IDX2_SP_I(1,0,isn)] - v1[IDX2_SP_I(1,3,isn)];
360  vt1_4 = v1[IDX2_SP_R(2,0,isn)] - v1[IDX2_SP_R(2,3,isn)];
361  vt1_5 = v1[IDX2_SP_I(2,0,isn)] - v1[IDX2_SP_I(2,3,isn)];
362 
363  vt2_0 = v1[IDX2_SP_R(0,1,isn)] + v1[IDX2_SP_R(0,2,isn)];
364  vt2_1 = v1[IDX2_SP_I(0,1,isn)] + v1[IDX2_SP_I(0,2,isn)];
365  vt2_2 = v1[IDX2_SP_R(1,1,isn)] + v1[IDX2_SP_R(1,2,isn)];
366  vt2_3 = v1[IDX2_SP_I(1,1,isn)] + v1[IDX2_SP_I(1,2,isn)];
367  vt2_4 = v1[IDX2_SP_R(2,1,isn)] + v1[IDX2_SP_R(2,2,isn)];
368  vt2_5 = v1[IDX2_SP_I(2,1,isn)] + v1[IDX2_SP_I(2,2,isn)];
369 
370  u_0 = u_dn[IDX2_G_R(0,0,isg)];
371  u_1 = u_dn[IDX2_G_I(0,0,isg)];
372  u_2 = u_dn[IDX2_G_R(0,1,isg)];
373  u_3 = u_dn[IDX2_G_I(0,1,isg)];
374  u_4 = u_dn[IDX2_G_R(0,2,isg)];
375  u_5 = u_dn[IDX2_G_I(0,2,isg)];
376 
377  wt1r = MULT_GDXr(u_0, u_1, u_2, u_3, u_4, u_5,
379  wt1i = MULT_GDXi(u_0, u_1, u_2, u_3, u_4, u_5,
381  wt2r = MULT_GDXr(u_0, u_1, u_2, u_3, u_4, u_5,
383  wt2i = MULT_GDXi(u_0, u_1, u_2, u_3, u_4, u_5,
385 
386  // ic = 0;
387  bc2 = 1.0;
388  if(iy == 0) bc2 = bc[1];
389  v2_01 += bc2 * wt1r;
390  v2_11 += bc2 * wt1i;
391  v2_02 += bc2 * wt2r;
392  v2_12 += bc2 * wt2i;
393  v2_03 += bc2 * wt2r;
394  v2_13 += bc2 * wt2i;
395  v2_04 += -bc2 * wt1r;
396  v2_14 += -bc2 * wt1i;
397 
398  u_6 = u_dn[IDX2_G_R(1,0,isg)];
399  u_7 = u_dn[IDX2_G_I(1,0,isg)];
400  u_8 = u_dn[IDX2_G_R(1,1,isg)];
401  u_9 = u_dn[IDX2_G_I(1,1,isg)];
402  u10 = u_dn[IDX2_G_R(1,2,isg)];
403  u11 = u_dn[IDX2_G_I(1,2,isg)];
404 
405  wt1r = MULT_GDXr(u_6, u_7, u_8, u_9, u10, u11,
407  wt1i = MULT_GDXi(u_6, u_7, u_8, u_9, u10, u11,
409  wt2r = MULT_GDXr(u_6, u_7, u_8, u_9, u10, u11,
411  wt2i = MULT_GDXi(u_6, u_7, u_8, u_9, u10, u11,
413 
414  // ic = 1;
415  v2_21 += bc2 * wt1r;
416  v2_31 += bc2 * wt1i;
417  v2_22 += bc2 * wt2r;
418  v2_32 += bc2 * wt2i;
419  v2_23 += bc2 * wt2r;
420  v2_33 += bc2 * wt2i;
421  v2_24 += -bc2 * wt1r;
422  v2_34 += -bc2 * wt1i;
423 
424 #ifdef SU3_3RD_ROW_RECONST
425  u12 = EXT_IMG_R(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
426  u13 = EXT_IMG_I(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
427  u14 = EXT_IMG_R(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
428  u15 = EXT_IMG_I(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
429  u16 = EXT_IMG_R(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
430  u17 = EXT_IMG_I(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
431 #else
432  u12 = u_dn[IDX2_G_R(2,0,isg)];
433  u13 = u_dn[IDX2_G_I(2,0,isg)];
434  u14 = u_dn[IDX2_G_R(2,1,isg)];
435  u15 = u_dn[IDX2_G_I(2,1,isg)];
436  u16 = u_dn[IDX2_G_R(2,2,isg)];
437  u17 = u_dn[IDX2_G_I(2,2,isg)];
438 #endif
439 
440  wt1r = MULT_GDXr(u12, u13, u14, u15, u16, u17,
442  wt1i = MULT_GDXi(u12, u13, u14, u15, u16, u17,
444  wt2r = MULT_GDXr(u12, u13, u14, u15, u16, u17,
446  wt2i = MULT_GDXi(u12, u13, u14, u15, u16, u17,
448 
449  // ic = 2;
450  v2_41 += bc2 * wt1r;
451  v2_51 += bc2 * wt1i;
452  v2_42 += bc2 * wt2r;
453  v2_52 += bc2 * wt2i;
454  v2_43 += bc2 * wt2r;
455  v2_53 += bc2 * wt2i;
456  v2_44 += -bc2 * wt1r;
457  v2_54 += -bc2 * wt1i;
458 
459  //mult_zp
460  idir = 2;
461  int it = site/(Nx*Ny*Nz);
462  int iz = (site/(Nx*Ny)) % Nz;
463  int ixy = site % (Nx*Ny);
464 
465  nn = (iz + 1) % Nz;
466 
467  isn = ixy + nn * Nxy + it * Nxyz;
468  isg = ixy + iz * Nxy + it * Nxyz + idir * Nst_pad;
469 
470  vt1_0 = v1[IDX2_SP_R(0,0,isn)] - v1[IDX2_SP_I(0,2,isn)];
471  vt1_1 = v1[IDX2_SP_I(0,0,isn)] + v1[IDX2_SP_R(0,2,isn)];
472  vt1_2 = v1[IDX2_SP_R(1,0,isn)] - v1[IDX2_SP_I(1,2,isn)];
473  vt1_3 = v1[IDX2_SP_I(1,0,isn)] + v1[IDX2_SP_R(1,2,isn)];
474  vt1_4 = v1[IDX2_SP_R(2,0,isn)] - v1[IDX2_SP_I(2,2,isn)];
475  vt1_5 = v1[IDX2_SP_I(2,0,isn)] + v1[IDX2_SP_R(2,2,isn)];
476 
477  vt2_0 = v1[IDX2_SP_R(0,1,isn)] + v1[IDX2_SP_I(0,3,isn)];
478  vt2_1 = v1[IDX2_SP_I(0,1,isn)] - v1[IDX2_SP_R(0,3,isn)];
479  vt2_2 = v1[IDX2_SP_R(1,1,isn)] + v1[IDX2_SP_I(1,3,isn)];
480  vt2_3 = v1[IDX2_SP_I(1,1,isn)] - v1[IDX2_SP_R(1,3,isn)];
481  vt2_4 = v1[IDX2_SP_R(2,1,isn)] + v1[IDX2_SP_I(2,3,isn)];
482  vt2_5 = v1[IDX2_SP_I(2,1,isn)] - v1[IDX2_SP_R(2,3,isn)];
483 
484  u_0 = u_up[IDX2_G_R(0,0,isg)];
485  u_1 = u_up[IDX2_G_I(0,0,isg)];
486  u_2 = u_up[IDX2_G_R(1,0,isg)];
487  u_3 = u_up[IDX2_G_I(1,0,isg)];
488  u_4 = u_up[IDX2_G_R(2,0,isg)];
489  u_5 = u_up[IDX2_G_I(2,0,isg)];
490 
491  wt1r = MULT_GXr(u_0, u_1, u_2, u_3, u_4, u_5,
493  wt1i = MULT_GXi(u_0, u_1, u_2, u_3, u_4, u_5,
495  wt2r = MULT_GXr(u_0, u_1, u_2, u_3, u_4, u_5,
497  wt2i = MULT_GXi(u_0, u_1, u_2, u_3, u_4, u_5,
499 
500  // ic = 0;
501  bc2 = 1.0;
502  if(iz == Nz-1) bc2 = bc[2];
503  v2_01 += bc2 * wt1r;
504  v2_11 += bc2 * wt1i;
505  v2_02 += bc2 * wt2r;
506  v2_12 += bc2 * wt2i;
507  v2_03 += bc2 * wt1i;
508  v2_13 += -bc2 * wt1r;
509  v2_04 += -bc2 * wt2i;
510  v2_14 += bc2 * wt2r;
511 
512  u_6 = u_up[IDX2_G_R(0,1,isg)];
513  u_7 = u_up[IDX2_G_I(0,1,isg)];
514  u_8 = u_up[IDX2_G_R(1,1,isg)];
515  u_9 = u_up[IDX2_G_I(1,1,isg)];
516  u10 = u_up[IDX2_G_R(2,1,isg)];
517  u11 = u_up[IDX2_G_I(2,1,isg)];
518 
519  wt1r = MULT_GXr(u_6, u_7, u_8, u_9, u10, u11,
521  wt1i = MULT_GXi(u_6, u_7, u_8, u_9, u10, u11,
523  wt2r = MULT_GXr(u_6, u_7, u_8, u_9, u10, u11,
525  wt2i = MULT_GXi(u_6, u_7, u_8, u_9, u10, u11,
527 
528  // ic = 1;
529  v2_21 += bc2 * wt1r;
530  v2_31 += bc2 * wt1i;
531  v2_22 += bc2 * wt2r;
532  v2_32 += bc2 * wt2i;
533  v2_23 += bc2 * wt1i;
534  v2_33 += -bc2 * wt1r;
535  v2_24 += -bc2 * wt2i;
536  v2_34 += bc2 * wt2r;
537 
538 #ifdef SU3_3RD_ROW_RECONST
539  u12 = EXT_IMG_R(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
540  u13 = EXT_IMG_I(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
541  u14 = EXT_IMG_R(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
542  u15 = EXT_IMG_I(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
543  u16 = EXT_IMG_R(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
544  u17 = EXT_IMG_I(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
545 #else
546  u12 = u_up[IDX2_G_R(0,2,isg)];
547  u13 = u_up[IDX2_G_I(0,2,isg)];
548  u14 = u_up[IDX2_G_R(1,2,isg)];
549  u15 = u_up[IDX2_G_I(1,2,isg)];
550  u16 = u_up[IDX2_G_R(2,2,isg)];
551  u17 = u_up[IDX2_G_I(2,2,isg)];
552 #endif
553 
554  wt1r = MULT_GXr(u12, u13, u14, u15, u16, u17,
556  wt1i = MULT_GXi(u12, u13, u14, u15, u16, u17,
558  wt2r = MULT_GXr(u12, u13, u14, u15, u16, u17,
560  wt2i = MULT_GXi(u12, u13, u14, u15, u16, u17,
562 
563  // ic = 2;
564  v2_41 += bc2 * wt1r;
565  v2_51 += bc2 * wt1i;
566  v2_42 += bc2 * wt2r;
567  v2_52 += bc2 * wt2i;
568  v2_43 += bc2 * wt1i;
569  v2_53 += -bc2 * wt1r;
570  v2_44 += -bc2 * wt2i;
571  v2_54 += bc2 * wt2r;
572 
573  //mult_zm
574  nn = (iz + Nz - 1) % Nz;
575 
576  isn = ixy + nn * Nxy + it * Nxyz;
577  isg = ixy + nn * Nxy + it * Nxyz + idir * Nst_pad;
578 
579  vt1_0 = v1[IDX2_SP_R(0,0,isn)] + v1[IDX2_SP_I(0,2,isn)];
580  vt1_1 = v1[IDX2_SP_I(0,0,isn)] - v1[IDX2_SP_R(0,2,isn)];
581  vt1_2 = v1[IDX2_SP_R(1,0,isn)] + v1[IDX2_SP_I(1,2,isn)];
582  vt1_3 = v1[IDX2_SP_I(1,0,isn)] - v1[IDX2_SP_R(1,2,isn)];
583  vt1_4 = v1[IDX2_SP_R(2,0,isn)] + v1[IDX2_SP_I(2,2,isn)];
584  vt1_5 = v1[IDX2_SP_I(2,0,isn)] - v1[IDX2_SP_R(2,2,isn)];
585 
586  vt2_0 = v1[IDX2_SP_R(0,1,isn)] - v1[IDX2_SP_I(0,3,isn)];
587  vt2_1 = v1[IDX2_SP_I(0,1,isn)] + v1[IDX2_SP_R(0,3,isn)];
588  vt2_2 = v1[IDX2_SP_R(1,1,isn)] - v1[IDX2_SP_I(1,3,isn)];
589  vt2_3 = v1[IDX2_SP_I(1,1,isn)] + v1[IDX2_SP_R(1,3,isn)];
590  vt2_4 = v1[IDX2_SP_R(2,1,isn)] - v1[IDX2_SP_I(2,3,isn)];
591  vt2_5 = v1[IDX2_SP_I(2,1,isn)] + v1[IDX2_SP_R(2,3,isn)];
592 
593  u_0 = u_dn[IDX2_G_R(0,0,isg)];
594  u_1 = u_dn[IDX2_G_I(0,0,isg)];
595  u_2 = u_dn[IDX2_G_R(0,1,isg)];
596  u_3 = u_dn[IDX2_G_I(0,1,isg)];
597  u_4 = u_dn[IDX2_G_R(0,2,isg)];
598  u_5 = u_dn[IDX2_G_I(0,2,isg)];
599 
600  wt1r = MULT_GDXr(u_0, u_1, u_2, u_3, u_4, u_5,
602  wt1i = MULT_GDXi(u_0, u_1, u_2, u_3, u_4, u_5,
604  wt2r = MULT_GDXr(u_0, u_1, u_2, u_3, u_4, u_5,
606  wt2i = MULT_GDXi(u_0, u_1, u_2, u_3, u_4, u_5,
608 
609  // ic = 0;
610  bc2 = 1.0;
611  if(iz == 0) bc2 = bc[2];
612  v2_01 += bc2 * wt1r;
613  v2_11 += bc2 * wt1i;
614  v2_02 += bc2 * wt2r;
615  v2_12 += bc2 * wt2i;
616  v2_03 += -bc2 * wt1i;
617  v2_13 += bc2 * wt1r;
618  v2_04 += bc2 * wt2i;
619  v2_14 += -bc2 * wt2r;
620 
621  u_6 = u_dn[IDX2_G_R(1,0,isg)];
622  u_7 = u_dn[IDX2_G_I(1,0,isg)];
623  u_8 = u_dn[IDX2_G_R(1,1,isg)];
624  u_9 = u_dn[IDX2_G_I(1,1,isg)];
625  u10 = u_dn[IDX2_G_R(1,2,isg)];
626  u11 = u_dn[IDX2_G_I(1,2,isg)];
627 
628  wt1r = MULT_GDXr(u_6, u_7, u_8, u_9, u10, u11,
630  wt1i = MULT_GDXi(u_6, u_7, u_8, u_9, u10, u11,
632  wt2r = MULT_GDXr(u_6, u_7, u_8, u_9, u10, u11,
634  wt2i = MULT_GDXi(u_6, u_7, u_8, u_9, u10, u11,
636 
637  // ic = 1;
638  v2_21 += bc2 * wt1r;
639  v2_31 += bc2 * wt1i;
640  v2_22 += bc2 * wt2r;
641  v2_32 += bc2 * wt2i;
642  v2_23 += -bc2 * wt1i;
643  v2_33 += bc2 * wt1r;
644  v2_24 += bc2 * wt2i;
645  v2_34 += -bc2 * wt2r;
646 
647 #ifdef SU3_3RD_ROW_RECONST
648  u12 = EXT_IMG_R(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
649  u13 = EXT_IMG_I(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
650  u14 = EXT_IMG_R(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
651  u15 = EXT_IMG_I(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
652  u16 = EXT_IMG_R(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
653  u17 = EXT_IMG_I(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
654 #else
655  u12 = u_dn[IDX2_G_R(2,0,isg)];
656  u13 = u_dn[IDX2_G_I(2,0,isg)];
657  u14 = u_dn[IDX2_G_R(2,1,isg)];
658  u15 = u_dn[IDX2_G_I(2,1,isg)];
659  u16 = u_dn[IDX2_G_R(2,2,isg)];
660  u17 = u_dn[IDX2_G_I(2,2,isg)];
661 #endif
662 
663  wt1r = MULT_GDXr(u12, u13, u14, u15, u16, u17,
665  wt1i = MULT_GDXi(u12, u13, u14, u15, u16, u17,
667  wt2r = MULT_GDXr(u12, u13, u14, u15, u16, u17,
669  wt2i = MULT_GDXi(u12, u13, u14, u15, u16, u17,
671 
672  // ic = 2;
673  v2_41 += bc2 * wt1r;
674  v2_51 += bc2 * wt1i;
675  v2_42 += bc2 * wt2r;
676  v2_52 += bc2 * wt2i;
677  v2_43 += -bc2 * wt1i;
678  v2_53 += bc2 * wt1r;
679  v2_44 += bc2 * wt2i;
680  v2_54 += -bc2 * wt2r;
681 
682 //============================================================END=====
v2_14
v2_14
Definition: mult_Wilson_xyz_openacc-inc.h:63
v2_43
v2_43
Definition: mult_Wilson_xyz_openacc-inc.h:121
iyzt
int iyzt
Definition: mult_Wilson_xyz_openacc-inc.h:15
v2_13
v2_13
Definition: mult_Wilson_xyz_openacc-inc.h:61
v2_32
v2_32
Definition: mult_Wilson_xyz_openacc-inc.h:85
v2_31
v2_31
Definition: mult_Wilson_xyz_openacc-inc.h:83
v2_33
v2_33
Definition: mult_Wilson_xyz_openacc-inc.h:87
v2_53
v2_53
Definition: mult_Wilson_xyz_openacc-inc.h:122
EXT_IMG_R
#define EXT_IMG_R(v1r, v1i, v2r, v2i, w1r, w1i, w2r, w2i)
Definition: afield_Gauge_openacc-inc.h:19
iy
int iy
Definition: mult_Wilson_xyz_openacc-inc.h:239
u11
u11
Definition: mult_Wilson_xyz_openacc-inc.h:70
idir
int idir
Definition: mult_Wilson_xyz_openacc-inc.h:13
u_5
u_5
Definition: mult_Wilson_xyz_openacc-inc.h:41
v2_22
v2_22
Definition: mult_Wilson_xyz_openacc-inc.h:84
u_0
u_0
Definition: mult_Wilson_xyz_openacc-inc.h:36
wt1i
wt1i
Definition: mult_Wilson_xyz_openacc-inc.h:45
v2_34
v2_34
Definition: mult_Wilson_xyz_openacc-inc.h:89
v2_04
v2_04
Definition: mult_Wilson_xyz_openacc-inc.h:62
u_4
u_4
Definition: mult_Wilson_xyz_openacc-inc.h:40
v2_02
v2_02
Definition: mult_Wilson_xyz_openacc-inc.h:58
u_7
u_7
Definition: mult_Wilson_xyz_openacc-inc.h:66
v2_01
v2_01
Definition: mult_Wilson_xyz_openacc-inc.h:56
v2_12
v2_12
Definition: mult_Wilson_xyz_openacc-inc.h:59
wt2r
wt2r
Definition: mult_Wilson_xyz_openacc-inc.h:47
bc2
bc2
Definition: mult_Wilson_xyz_openacc-inc.h:278
vt2_1
vt2_1
Definition: mult_Wilson_xyz_openacc-inc.h:30
IDX2_G_I
#define IDX2_G_I(ic1, ic2, ist)
Definition: define_index.h:52
u15
u15
Definition: mult_Wilson_xyz_openacc-inc.h:102
vt1_1
vt1_1
Definition: mult_Wilson_xyz_openacc-inc.h:23
MULT_GXi
#define MULT_GXi(u0, u1, u2, u3, u4, u5, v0, v1, v2, v3, v4, v5)
Definition: afield_Gauge_openacc-inc.h:17
vt2_2
vt2_2
Definition: mult_Wilson_xyz_openacc-inc.h:31
ix
int ix
Definition: mult_Wilson_xyz_openacc-inc.h:16
MULT_GDXi
#define MULT_GDXi(u0, u1, u2, u3, u4, u5, v0, v1, v2, v3, v4, v5)
Definition: mult_Wilson_inline_openacc-inc.h:19
isg
int isg
Definition: mult_Wilson_xyz_openacc-inc.h:20
v2_51
v2_51
Definition: mult_Wilson_xyz_openacc-inc.h:118
v2_52
v2_52
Definition: mult_Wilson_xyz_openacc-inc.h:120
ixy
int ixy
Definition: mult_Wilson_xyz_openacc-inc.h:463
vt1_2
vt1_2
Definition: mult_Wilson_xyz_openacc-inc.h:24
v2_54
v2_54
Definition: mult_Wilson_xyz_openacc-inc.h:124
u13
u13
Definition: mult_Wilson_xyz_openacc-inc.h:100
nn
int nn
Definition: mult_Wilson_xyz_openacc-inc.h:17
vt2_5
vt2_5
Definition: mult_Wilson_xyz_openacc-inc.h:34
wt1r
wt1r
Definition: mult_Wilson_xyz_openacc-inc.h:43
it
int it
Definition: mult_Wilson_xyz_openacc-inc.h:461
u14
u14
Definition: mult_Wilson_xyz_openacc-inc.h:101
v2_24
v2_24
Definition: mult_Wilson_xyz_openacc-inc.h:88
real_t
double real_t
Definition: bridgeACC_AField_double.cpp:14
u10
u10
Definition: mult_Wilson_xyz_openacc-inc.h:69
u16
u16
Definition: mult_Wilson_xyz_openacc-inc.h:103
vt2_3
vt2_3
Definition: mult_Wilson_xyz_openacc-inc.h:32
vt1_5
vt1_5
Definition: mult_Wilson_xyz_openacc-inc.h:27
u_3
u_3
Definition: mult_Wilson_xyz_openacc-inc.h:39
v2_11
v2_11
Definition: mult_Wilson_xyz_openacc-inc.h:57
v2_44
v2_44
Definition: mult_Wilson_xyz_openacc-inc.h:123
vt2_0
vt2_0
Definition: mult_Wilson_xyz_openacc-inc.h:29
u_8
u_8
Definition: mult_Wilson_xyz_openacc-inc.h:67
v2_23
v2_23
Definition: mult_Wilson_xyz_openacc-inc.h:86
vt2_4
vt2_4
Definition: mult_Wilson_xyz_openacc-inc.h:33
v2_42
v2_42
Definition: mult_Wilson_xyz_openacc-inc.h:119
wt2i
wt2i
Definition: mult_Wilson_xyz_openacc-inc.h:49
isn
int isn
Definition: mult_Wilson_xyz_openacc-inc.h:19
MULT_GXr
#define MULT_GXr(u0, u1, u2, u3, u4, u5, v0, v1, v2, v3, v4, v5)
Definition: afield_Gauge_openacc-inc.h:16
u12
u12
Definition: mult_Wilson_xyz_openacc-inc.h:99
izt
int izt
Definition: mult_Wilson_xyz_openacc-inc.h:238
u_9
u_9
Definition: mult_Wilson_xyz_openacc-inc.h:68
IDX2_SP_R
#define IDX2_SP_R(ic, id, ist)
Definition: define_index.h:31
iz
int iz
Definition: mult_Wilson_xyz_openacc-inc.h:462
u_6
u_6
Definition: mult_Wilson_xyz_openacc-inc.h:65
v2_21
v2_21
Definition: mult_Wilson_xyz_openacc-inc.h:82
u_1
u_1
Definition: mult_Wilson_xyz_openacc-inc.h:37
IDX2_G_R
#define IDX2_G_R(ic1, ic2, ist)
Definition: define_index.h:51
v2_03
v2_03
Definition: mult_Wilson_xyz_openacc-inc.h:60
vt1_3
vt1_3
Definition: mult_Wilson_xyz_openacc-inc.h:25
v2_41
v2_41
Definition: mult_Wilson_xyz_openacc-inc.h:117
MULT_GDXr
#define MULT_GDXr(u0, u1, u2, u3, u4, u5, v0, v1, v2, v3, v4, v5)
Definition: mult_Wilson_inline_openacc-inc.h:18
EXT_IMG_I
#define EXT_IMG_I(v1r, v1i, v2r, v2i, w1r, w1i, w2r, w2i)
Definition: afield_Gauge_openacc-inc.h:20
vt1_4
vt1_4
Definition: mult_Wilson_xyz_openacc-inc.h:26
vt1_0
vt1_0
Definition: mult_Wilson_xyz_openacc-inc.h:22
u_2
u_2
Definition: mult_Wilson_xyz_openacc-inc.h:38
IDX2_SP_I
#define IDX2_SP_I(ic, id, ist)
Definition: define_index.h:32
u17
u17
Definition: mult_Wilson_xyz_openacc-inc.h:104