Bridge++  Ver.2.1.3
mult_Wilson_eo_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  // mult_xp
12  int idir = 0;
13 
14  int iyzt = iy + Ny * (iz + Nz * it);
15  int isn = ((ix + keo) % Nx) + Nx * iyzt;
16  int isg = site + Nst_pad * (ieo + 2*idir);
17 
18  vt1_0 = v1[IDX2_SP_R(0,0,isn)] - v1[IDX2_SP_I(0,3,isn)];
19  vt1_1 = v1[IDX2_SP_I(0,0,isn)] + v1[IDX2_SP_R(0,3,isn)];
20  vt1_2 = v1[IDX2_SP_R(1,0,isn)] - v1[IDX2_SP_I(1,3,isn)];
21  vt1_3 = v1[IDX2_SP_I(1,0,isn)] + v1[IDX2_SP_R(1,3,isn)];
22  vt1_4 = v1[IDX2_SP_R(2,0,isn)] - v1[IDX2_SP_I(2,3,isn)];
23  vt1_5 = v1[IDX2_SP_I(2,0,isn)] + v1[IDX2_SP_R(2,3,isn)];
24 
25  vt2_0 = v1[IDX2_SP_R(0,1,isn)] - v1[IDX2_SP_I(0,2,isn)];
26  vt2_1 = v1[IDX2_SP_I(0,1,isn)] + v1[IDX2_SP_R(0,2,isn)];
27  vt2_2 = v1[IDX2_SP_R(1,1,isn)] - v1[IDX2_SP_I(1,2,isn)];
28  vt2_3 = v1[IDX2_SP_I(1,1,isn)] + v1[IDX2_SP_R(1,2,isn)];
29  vt2_4 = v1[IDX2_SP_R(2,1,isn)] - v1[IDX2_SP_I(2,2,isn)];
30  vt2_5 = v1[IDX2_SP_I(2,1,isn)] + v1[IDX2_SP_R(2,2,isn)];
31 
32  u_0 = u_up[IDX2_G_R(0,0,isg)];
33  u_1 = u_up[IDX2_G_I(0,0,isg)];
34  u_2 = u_up[IDX2_G_R(1,0,isg)];
35  u_3 = u_up[IDX2_G_I(1,0,isg)];
36  u_4 = u_up[IDX2_G_R(2,0,isg)];
37  u_5 = u_up[IDX2_G_I(2,0,isg)];
38 
47 
48  // ic = 0;
49  bc2 = 1.0;
50  if(ix == Nx-1 && keo == 1) bc2 = bc[0];
51 
52  v2_01 = bc2 * wt1r;
53  v2_11 = bc2 * wt1i;
54  v2_02 = bc2 * wt2r;
55  v2_12 = bc2 * wt2i;
56  v2_03 = bc2 * wt2i;
57  v2_13 = -bc2 * wt2r;
58  v2_04 = bc2 * wt1i;
59  v2_14 = -bc2 * wt1r;
60 
61  u_6 = u_up[IDX2_G_R(0,1,isg)];
62  u_7 = u_up[IDX2_G_I(0,1,isg)];
63  u_8 = u_up[IDX2_G_R(1,1,isg)];
64  u_9 = u_up[IDX2_G_I(1,1,isg)];
65  u10 = u_up[IDX2_G_R(2,1,isg)];
66  u11 = u_up[IDX2_G_I(2,1,isg)];
67 
68  wt1r = MULT_GXr(u_6, u_7, u_8, u_9, u10, u11,
70  wt1i = MULT_GXi(u_6, u_7, u_8, u_9, u10, u11,
72  wt2r = MULT_GXr(u_6, u_7, u_8, u_9, u10, u11,
74  wt2i = MULT_GXi(u_6, u_7, u_8, u_9, u10, u11,
76 
77  // ic = 1;
78  v2_21 = bc2 * wt1r;
79  v2_31 = bc2 * wt1i;
80  v2_22 = bc2 * wt2r;
81  v2_32 = bc2 * wt2i;
82  v2_23 = bc2 * wt2i;
83  v2_33 = -bc2 * wt2r;
84  v2_24 = bc2 * wt1i;
85  v2_34 = -bc2 * wt1r;
86 
87 #ifdef SU3_3RD_ROW_RECONST
88  u12 = EXT_IMG_R(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
89  u13 = EXT_IMG_I(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
90  u14 = EXT_IMG_R(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
91  u15 = EXT_IMG_I(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
92  u16 = EXT_IMG_R(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
93  u17 = EXT_IMG_I(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
94 #else
95  u12 = u_up[IDX2_G_R(0,2,isg)];
96  u13 = u_up[IDX2_G_I(0,2,isg)];
97  u14 = u_up[IDX2_G_R(1,2,isg)];
98  u15 = u_up[IDX2_G_I(1,2,isg)];
99  u16 = u_up[IDX2_G_R(2,2,isg)];
100  u17 = u_up[IDX2_G_I(2,2,isg)];
101 #endif
102 
103  wt1r = MULT_GXr(u12, u13, u14, u15, u16, u17,
105  wt1i = MULT_GXi(u12, u13, u14, u15, u16, u17,
107  wt2r = MULT_GXr(u12, u13, u14, u15, u16, u17,
109  wt2i = MULT_GXi(u12, u13, u14, u15, u16, u17,
111 
112  // ic = 2;
118  v2_53 = -bc2 * wt2r;
120  v2_54 = -bc2 * wt1r;
121 
122  // mult_xm
123  int ix2 = (ix - 1 + keo + Nx) % Nx;
124  isn = ix2 + Nx * iyzt;
125  isg = isn + Nst_pad * (1-ieo + 2*idir);
126 
127  vt1_0 = v1[IDX2_SP_R(0,0,isn)] + v1[IDX2_SP_I(0,3,isn)];
128  vt1_1 = v1[IDX2_SP_I(0,0,isn)] - v1[IDX2_SP_R(0,3,isn)];
129  vt1_2 = v1[IDX2_SP_R(1,0,isn)] + v1[IDX2_SP_I(1,3,isn)];
130  vt1_3 = v1[IDX2_SP_I(1,0,isn)] - v1[IDX2_SP_R(1,3,isn)];
131  vt1_4 = v1[IDX2_SP_R(2,0,isn)] + v1[IDX2_SP_I(2,3,isn)];
132  vt1_5 = v1[IDX2_SP_I(2,0,isn)] - v1[IDX2_SP_R(2,3,isn)];
133 
134  vt2_0 = v1[IDX2_SP_R(0,1,isn)] + v1[IDX2_SP_I(0,2,isn)];
135  vt2_1 = v1[IDX2_SP_I(0,1,isn)] - v1[IDX2_SP_R(0,2,isn)];
136  vt2_2 = v1[IDX2_SP_R(1,1,isn)] + v1[IDX2_SP_I(1,2,isn)];
137  vt2_3 = v1[IDX2_SP_I(1,1,isn)] - v1[IDX2_SP_R(1,2,isn)];
138  vt2_4 = v1[IDX2_SP_R(2,1,isn)] + v1[IDX2_SP_I(2,2,isn)];
139  vt2_5 = v1[IDX2_SP_I(2,1,isn)] - v1[IDX2_SP_R(2,2,isn)];
140 
141  u_0 = u_dn[IDX2_G_R(0,0,isg)];
142  u_1 = u_dn[IDX2_G_I(0,0,isg)];
143  u_2 = u_dn[IDX2_G_R(0,1,isg)];
144  u_3 = u_dn[IDX2_G_I(0,1,isg)];
145  u_4 = u_dn[IDX2_G_R(0,2,isg)];
146  u_5 = u_dn[IDX2_G_I(0,2,isg)];
147 
148  wt1r = MULT_GDXr(u_0, u_1, u_2, u_3, u_4, u_5,
150  wt1i = MULT_GDXi(u_0, u_1, u_2, u_3, u_4, u_5,
152  wt2r = MULT_GDXr(u_0, u_1, u_2, u_3, u_4, u_5,
154  wt2i = MULT_GDXi(u_0, u_1, u_2, u_3, u_4, u_5,
156 
157  // ic = 0;
158  bc2 = 1.0;
159  if(ix == 0 && keo == 0) bc2 = bc[0];
160 
161  v2_01 += bc2 * wt1r;
162  v2_11 += bc2 * wt1i;
163  v2_02 += bc2 * wt2r;
164  v2_12 += bc2 * wt2i;
165  v2_03 += -bc2 * wt2i;
166  v2_13 += +bc2 * wt2r;
167  v2_04 += -bc2 * wt1i;
168  v2_14 += +bc2 * wt1r;
169 
170  u_6 = u_dn[IDX2_G_R(1,0,isg)];
171  u_7 = u_dn[IDX2_G_I(1,0,isg)];
172  u_8 = u_dn[IDX2_G_R(1,1,isg)];
173  u_9 = u_dn[IDX2_G_I(1,1,isg)];
174  u10 = u_dn[IDX2_G_R(1,2,isg)];
175  u11 = u_dn[IDX2_G_I(1,2,isg)];
176 
177  wt1r = MULT_GDXr(u_6, u_7, u_8, u_9, u10, u11,
179  wt1i = MULT_GDXi(u_6, u_7, u_8, u_9, u10, u11,
181  wt2r = MULT_GDXr(u_6, u_7, u_8, u_9, u10, u11,
183  wt2i = MULT_GDXi(u_6, u_7, u_8, u_9, u10, u11,
185 
186  // ic = 1;
187  v2_21 += bc2 * wt1r;
188  v2_31 += bc2 * wt1i;
189  v2_22 += bc2 * wt2r;
190  v2_32 += bc2 * wt2i;
191  v2_23 += -bc2 * wt2i;
192  v2_33 += +bc2 * wt2r;
193  v2_24 += -bc2 * wt1i;
194  v2_34 += +bc2 * wt1r;
195 
196 #ifdef SU3_3RD_ROW_RECONST
197  u12 = EXT_IMG_R(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
198  u13 = EXT_IMG_I(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
199  u14 = EXT_IMG_R(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
200  u15 = EXT_IMG_I(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
201  u16 = EXT_IMG_R(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
202  u17 = EXT_IMG_I(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
203 #else
204  u12 = u_dn[IDX2_G_R(2,0,isg)];
205  u13 = u_dn[IDX2_G_I(2,0,isg)];
206  u14 = u_dn[IDX2_G_R(2,1,isg)];
207  u15 = u_dn[IDX2_G_I(2,1,isg)];
208  u16 = u_dn[IDX2_G_R(2,2,isg)];
209  u17 = u_dn[IDX2_G_I(2,2,isg)];
210 #endif
211 
212  wt1r = MULT_GDXr(u12, u13, u14, u15, u16, u17,
214  wt1i = MULT_GDXi(u12, u13, u14, u15, u16, u17,
216  wt2r = MULT_GDXr(u12, u13, u14, u15, u16, u17,
218  wt2i = MULT_GDXi(u12, u13, u14, u15, u16, u17,
220 
221  // ic = 2;
222  v2_41 += bc2 * wt1r;
223  v2_51 += bc2 * wt1i;
224  v2_42 += bc2 * wt2r;
225  v2_52 += bc2 * wt2i;
226  v2_43 += -bc2 * wt2i;
227  v2_53 += +bc2 * wt2r;
228  v2_44 += -bc2 * wt1i;
229  v2_54 += +bc2 * wt1r;
230 
231  // mult_yp
232  int izt = site / Nxy;
233  int nn = (iy + 1) % Ny;
234  idir = 1;
235 
236  isn = ix + nn * Nx + izt * Nxy;
237  isg = ix + iy * Nx + izt * Nxy + Nst_pad * (ieo + 2*idir);
238 
239  vt1_0 = v1[IDX2_SP_R(0,0,isn)] + v1[IDX2_SP_R(0,3,isn)];
240  vt1_1 = v1[IDX2_SP_I(0,0,isn)] + v1[IDX2_SP_I(0,3,isn)];
241  vt1_2 = v1[IDX2_SP_R(1,0,isn)] + v1[IDX2_SP_R(1,3,isn)];
242  vt1_3 = v1[IDX2_SP_I(1,0,isn)] + v1[IDX2_SP_I(1,3,isn)];
243  vt1_4 = v1[IDX2_SP_R(2,0,isn)] + v1[IDX2_SP_R(2,3,isn)];
244  vt1_5 = v1[IDX2_SP_I(2,0,isn)] + v1[IDX2_SP_I(2,3,isn)];
245 
246  vt2_0 = v1[IDX2_SP_R(0,1,isn)] - v1[IDX2_SP_R(0,2,isn)];
247  vt2_1 = v1[IDX2_SP_I(0,1,isn)] - v1[IDX2_SP_I(0,2,isn)];
248  vt2_2 = v1[IDX2_SP_R(1,1,isn)] - v1[IDX2_SP_R(1,2,isn)];
249  vt2_3 = v1[IDX2_SP_I(1,1,isn)] - v1[IDX2_SP_I(1,2,isn)];
250  vt2_4 = v1[IDX2_SP_R(2,1,isn)] - v1[IDX2_SP_R(2,2,isn)];
251  vt2_5 = v1[IDX2_SP_I(2,1,isn)] - v1[IDX2_SP_I(2,2,isn)];
252 
253  u_0 = u_up[IDX2_G_R(0,0,isg)];
254  u_1 = u_up[IDX2_G_I(0,0,isg)];
255  u_2 = u_up[IDX2_G_R(1,0,isg)];
256  u_3 = u_up[IDX2_G_I(1,0,isg)];
257  u_4 = u_up[IDX2_G_R(2,0,isg)];
258  u_5 = u_up[IDX2_G_I(2,0,isg)];
259 
260  wt1r = MULT_GXr(u_0, u_1, u_2, u_3, u_4, u_5,
262  wt1i = MULT_GXi(u_0, u_1, u_2, u_3, u_4, u_5,
264  wt2r = MULT_GXr(u_0, u_1, u_2, u_3, u_4, u_5,
266  wt2i = MULT_GXi(u_0, u_1, u_2, u_3, u_4, u_5,
268 
269  // ic = 0;
270  bc2 = 1.0;
271  if(iy == Ny-1) bc2 = bc[1];
272  v2_01 += bc2 * wt1r;
273  v2_11 += bc2 * wt1i;
274  v2_02 += bc2 * wt2r;
275  v2_12 += bc2 * wt2i;
276  v2_03 += -bc2 * wt2r;
277  v2_13 += -bc2 * wt2i;
278  v2_04 += bc2 * wt1r;
279  v2_14 += bc2 * wt1i;
280 
281  u_6 = u_up[IDX2_G_R(0,1,isg)];
282  u_7 = u_up[IDX2_G_I(0,1,isg)];
283  u_8 = u_up[IDX2_G_R(1,1,isg)];
284  u_9 = u_up[IDX2_G_I(1,1,isg)];
285  u10 = u_up[IDX2_G_R(2,1,isg)];
286  u11 = u_up[IDX2_G_I(2,1,isg)];
287 
288  wt1r = MULT_GXr(u_6, u_7, u_8, u_9, u10, u11,
290  wt1i = MULT_GXi(u_6, u_7, u_8, u_9, u10, u11,
292  wt2r = MULT_GXr(u_6, u_7, u_8, u_9, u10, u11,
294  wt2i = MULT_GXi(u_6, u_7, u_8, u_9, u10, u11,
296 
297  // ic = 1;
298  v2_21 += bc2 * wt1r;
299  v2_31 += bc2 * wt1i;
300  v2_22 += bc2 * wt2r;
301  v2_32 += bc2 * wt2i;
302  v2_23 += -bc2 * wt2r;
303  v2_33 += -bc2 * wt2i;
304  v2_24 += bc2 * wt1r;
305  v2_34 += bc2 * wt1i;
306 
307 #ifdef SU3_3RD_ROW_RECONST
308  u12 = EXT_IMG_R(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
309  u13 = EXT_IMG_I(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
310  u14 = EXT_IMG_R(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
311  u15 = EXT_IMG_I(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
312  u16 = EXT_IMG_R(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
313  u17 = EXT_IMG_I(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
314 #else
315  u12 = u_up[IDX2_G_R(0,2,isg)];
316  u13 = u_up[IDX2_G_I(0,2,isg)];
317  u14 = u_up[IDX2_G_R(1,2,isg)];
318  u15 = u_up[IDX2_G_I(1,2,isg)];
319  u16 = u_up[IDX2_G_R(2,2,isg)];
320  u17 = u_up[IDX2_G_I(2,2,isg)];
321 #endif
322 
323  wt1r = MULT_GXr(u12, u13, u14, u15, u16, u17,
325  wt1i = MULT_GXi(u12, u13, u14, u15, u16, u17,
327  wt2r = MULT_GXr(u12, u13, u14, u15, u16, u17,
329  wt2i = MULT_GXi(u12, u13, u14, u15, u16, u17,
331 
332  // ic = 2;
333  v2_41 += bc2 * wt1r;
334  v2_51 += bc2 * wt1i;
335  v2_42 += bc2 * wt2r;
336  v2_52 += bc2 * wt2i;
337  v2_43 += -bc2 * wt2r;
338  v2_53 += -bc2 * wt2i;
339  v2_44 += bc2 * wt1r;
340  v2_54 += bc2 * wt1i;
341 
342  //mult_ym
343  nn = (iy + Ny - 1) % Ny;
344 
345  isn = ix + nn * Nx + izt * Nxy;
346  isg = ix + nn * Nx + izt * Nxy + Nst_pad * (1-ieo + 2*idir);
347 
348  vt1_0 = v1[IDX2_SP_R(0,0,isn)] - v1[IDX2_SP_R(0,3,isn)];
349  vt1_1 = v1[IDX2_SP_I(0,0,isn)] - v1[IDX2_SP_I(0,3,isn)];
350  vt1_2 = v1[IDX2_SP_R(1,0,isn)] - v1[IDX2_SP_R(1,3,isn)];
351  vt1_3 = v1[IDX2_SP_I(1,0,isn)] - v1[IDX2_SP_I(1,3,isn)];
352  vt1_4 = v1[IDX2_SP_R(2,0,isn)] - v1[IDX2_SP_R(2,3,isn)];
353  vt1_5 = v1[IDX2_SP_I(2,0,isn)] - v1[IDX2_SP_I(2,3,isn)];
354 
355  vt2_0 = v1[IDX2_SP_R(0,1,isn)] + v1[IDX2_SP_R(0,2,isn)];
356  vt2_1 = v1[IDX2_SP_I(0,1,isn)] + v1[IDX2_SP_I(0,2,isn)];
357  vt2_2 = v1[IDX2_SP_R(1,1,isn)] + v1[IDX2_SP_R(1,2,isn)];
358  vt2_3 = v1[IDX2_SP_I(1,1,isn)] + v1[IDX2_SP_I(1,2,isn)];
359  vt2_4 = v1[IDX2_SP_R(2,1,isn)] + v1[IDX2_SP_R(2,2,isn)];
360  vt2_5 = v1[IDX2_SP_I(2,1,isn)] + v1[IDX2_SP_I(2,2,isn)];
361 
362  u_0 = u_dn[IDX2_G_R(0,0,isg)];
363  u_1 = u_dn[IDX2_G_I(0,0,isg)];
364  u_2 = u_dn[IDX2_G_R(0,1,isg)];
365  u_3 = u_dn[IDX2_G_I(0,1,isg)];
366  u_4 = u_dn[IDX2_G_R(0,2,isg)];
367  u_5 = u_dn[IDX2_G_I(0,2,isg)];
368 
369  wt1r = MULT_GDXr(u_0, u_1, u_2, u_3, u_4, u_5,
371  wt1i = MULT_GDXi(u_0, u_1, u_2, u_3, u_4, u_5,
373  wt2r = MULT_GDXr(u_0, u_1, u_2, u_3, u_4, u_5,
375  wt2i = MULT_GDXi(u_0, u_1, u_2, u_3, u_4, u_5,
377 
378  // ic = 0;
379  bc2 = 1.0;
380  if(iy == 0) bc2 = bc[1];
381  v2_01 += bc2 * wt1r;
382  v2_11 += bc2 * wt1i;
383  v2_02 += bc2 * wt2r;
384  v2_12 += bc2 * wt2i;
385  v2_03 += bc2 * wt2r;
386  v2_13 += bc2 * wt2i;
387  v2_04 += -bc2 * wt1r;
388  v2_14 += -bc2 * wt1i;
389 
390  u_6 = u_dn[IDX2_G_R(1,0,isg)];
391  u_7 = u_dn[IDX2_G_I(1,0,isg)];
392  u_8 = u_dn[IDX2_G_R(1,1,isg)];
393  u_9 = u_dn[IDX2_G_I(1,1,isg)];
394  u10 = u_dn[IDX2_G_R(1,2,isg)];
395  u11 = u_dn[IDX2_G_I(1,2,isg)];
396 
397  wt1r = MULT_GDXr(u_6, u_7, u_8, u_9, u10, u11,
399  wt1i = MULT_GDXi(u_6, u_7, u_8, u_9, u10, u11,
401  wt2r = MULT_GDXr(u_6, u_7, u_8, u_9, u10, u11,
403  wt2i = MULT_GDXi(u_6, u_7, u_8, u_9, u10, u11,
405 
406  // ic = 1;
407  v2_21 += bc2 * wt1r;
408  v2_31 += bc2 * wt1i;
409  v2_22 += bc2 * wt2r;
410  v2_32 += bc2 * wt2i;
411  v2_23 += bc2 * wt2r;
412  v2_33 += bc2 * wt2i;
413  v2_24 += -bc2 * wt1r;
414  v2_34 += -bc2 * wt1i;
415 
416 #ifdef SU3_3RD_ROW_RECONST
417  u12 = EXT_IMG_R(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
418  u13 = EXT_IMG_I(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
419  u14 = EXT_IMG_R(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
420  u15 = EXT_IMG_I(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
421  u16 = EXT_IMG_R(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
422  u17 = EXT_IMG_I(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
423 #else
424  u12 = u_dn[IDX2_G_R(2,0,isg)];
425  u13 = u_dn[IDX2_G_I(2,0,isg)];
426  u14 = u_dn[IDX2_G_R(2,1,isg)];
427  u15 = u_dn[IDX2_G_I(2,1,isg)];
428  u16 = u_dn[IDX2_G_R(2,2,isg)];
429  u17 = u_dn[IDX2_G_I(2,2,isg)];
430 #endif
431 
432  wt1r = MULT_GDXr(u12, u13, u14, u15, u16, u17,
434  wt1i = MULT_GDXi(u12, u13, u14, u15, u16, u17,
436  wt2r = MULT_GDXr(u12, u13, u14, u15, u16, u17,
438  wt2i = MULT_GDXi(u12, u13, u14, u15, u16, u17,
440 
441  // ic = 2;
442  v2_41 += bc2 * wt1r;
443  v2_51 += bc2 * wt1i;
444  v2_42 += bc2 * wt2r;
445  v2_52 += bc2 * wt2i;
446  v2_43 += bc2 * wt2r;
447  v2_53 += bc2 * wt2i;
448  v2_44 += -bc2 * wt1r;
449  v2_54 += -bc2 * wt1i;
450 
451  //mult_zp
452  idir = 2;
453  int ixy = site % Nxy;
454 
455  nn = (iz + 1) % Nz;
456 
457  isn = ixy + nn * Nxy + it * Nxyz;
458  isg = ixy + iz * Nxy + it * Nxyz + Nst_pad * (ieo + 2*idir);
459 
460  vt1_0 = v1[IDX2_SP_R(0,0,isn)] - v1[IDX2_SP_I(0,2,isn)];
461  vt1_1 = v1[IDX2_SP_I(0,0,isn)] + v1[IDX2_SP_R(0,2,isn)];
462  vt1_2 = v1[IDX2_SP_R(1,0,isn)] - v1[IDX2_SP_I(1,2,isn)];
463  vt1_3 = v1[IDX2_SP_I(1,0,isn)] + v1[IDX2_SP_R(1,2,isn)];
464  vt1_4 = v1[IDX2_SP_R(2,0,isn)] - v1[IDX2_SP_I(2,2,isn)];
465  vt1_5 = v1[IDX2_SP_I(2,0,isn)] + v1[IDX2_SP_R(2,2,isn)];
466 
467  vt2_0 = v1[IDX2_SP_R(0,1,isn)] + v1[IDX2_SP_I(0,3,isn)];
468  vt2_1 = v1[IDX2_SP_I(0,1,isn)] - v1[IDX2_SP_R(0,3,isn)];
469  vt2_2 = v1[IDX2_SP_R(1,1,isn)] + v1[IDX2_SP_I(1,3,isn)];
470  vt2_3 = v1[IDX2_SP_I(1,1,isn)] - v1[IDX2_SP_R(1,3,isn)];
471  vt2_4 = v1[IDX2_SP_R(2,1,isn)] + v1[IDX2_SP_I(2,3,isn)];
472  vt2_5 = v1[IDX2_SP_I(2,1,isn)] - v1[IDX2_SP_R(2,3,isn)];
473 
474  u_0 = u_up[IDX2_G_R(0,0,isg)];
475  u_1 = u_up[IDX2_G_I(0,0,isg)];
476  u_2 = u_up[IDX2_G_R(1,0,isg)];
477  u_3 = u_up[IDX2_G_I(1,0,isg)];
478  u_4 = u_up[IDX2_G_R(2,0,isg)];
479  u_5 = u_up[IDX2_G_I(2,0,isg)];
480 
481  wt1r = MULT_GXr(u_0, u_1, u_2, u_3, u_4, u_5,
483  wt1i = MULT_GXi(u_0, u_1, u_2, u_3, u_4, u_5,
485  wt2r = MULT_GXr(u_0, u_1, u_2, u_3, u_4, u_5,
487  wt2i = MULT_GXi(u_0, u_1, u_2, u_3, u_4, u_5,
489 
490  // ic = 0;
491  bc2 = 1.0;
492  if(iz == Nz-1) bc2 = bc[2];
493  v2_01 += bc2 * wt1r;
494  v2_11 += bc2 * wt1i;
495  v2_02 += bc2 * wt2r;
496  v2_12 += bc2 * wt2i;
497  v2_03 += bc2 * wt1i;
498  v2_13 += -bc2 * wt1r;
499  v2_04 += -bc2 * wt2i;
500  v2_14 += bc2 * wt2r;
501 
502  u_6 = u_up[IDX2_G_R(0,1,isg)];
503  u_7 = u_up[IDX2_G_I(0,1,isg)];
504  u_8 = u_up[IDX2_G_R(1,1,isg)];
505  u_9 = u_up[IDX2_G_I(1,1,isg)];
506  u10 = u_up[IDX2_G_R(2,1,isg)];
507  u11 = u_up[IDX2_G_I(2,1,isg)];
508 
509  wt1r = MULT_GXr(u_6, u_7, u_8, u_9, u10, u11,
511  wt1i = MULT_GXi(u_6, u_7, u_8, u_9, u10, u11,
513  wt2r = MULT_GXr(u_6, u_7, u_8, u_9, u10, u11,
515  wt2i = MULT_GXi(u_6, u_7, u_8, u_9, u10, u11,
517 
518  // ic = 1;
519  v2_21 += bc2 * wt1r;
520  v2_31 += bc2 * wt1i;
521  v2_22 += bc2 * wt2r;
522  v2_32 += bc2 * wt2i;
523  v2_23 += bc2 * wt1i;
524  v2_33 += -bc2 * wt1r;
525  v2_24 += -bc2 * wt2i;
526  v2_34 += bc2 * wt2r;
527 
528 #ifdef SU3_3RD_ROW_RECONST
529  u12 = EXT_IMG_R(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
530  u13 = EXT_IMG_I(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
531  u14 = EXT_IMG_R(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
532  u15 = EXT_IMG_I(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
533  u16 = EXT_IMG_R(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
534  u17 = EXT_IMG_I(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
535 #else
536  u12 = u_up[IDX2_G_R(0,2,isg)];
537  u13 = u_up[IDX2_G_I(0,2,isg)];
538  u14 = u_up[IDX2_G_R(1,2,isg)];
539  u15 = u_up[IDX2_G_I(1,2,isg)];
540  u16 = u_up[IDX2_G_R(2,2,isg)];
541  u17 = u_up[IDX2_G_I(2,2,isg)];
542 #endif
543 
544  wt1r = MULT_GXr(u12, u13, u14, u15, u16, u17,
546  wt1i = MULT_GXi(u12, u13, u14, u15, u16, u17,
548  wt2r = MULT_GXr(u12, u13, u14, u15, u16, u17,
550  wt2i = MULT_GXi(u12, u13, u14, u15, u16, u17,
552 
553  // ic = 2;
554  v2_41 += bc2 * wt1r;
555  v2_51 += bc2 * wt1i;
556  v2_42 += bc2 * wt2r;
557  v2_52 += bc2 * wt2i;
558  v2_43 += bc2 * wt1i;
559  v2_53 += -bc2 * wt1r;
560  v2_44 += -bc2 * wt2i;
561  v2_54 += bc2 * wt2r;
562 
563  //mult_zm
564  nn = (iz + Nz - 1) % Nz;
565 
566  isn = ixy + nn * Nxy + it * Nxyz;
567  isg = ixy + nn * Nxy + it * Nxyz + Nst_pad * (1-ieo + 2*idir);
568 
569  vt1_0 = v1[IDX2_SP_R(0,0,isn)] + v1[IDX2_SP_I(0,2,isn)];
570  vt1_1 = v1[IDX2_SP_I(0,0,isn)] - v1[IDX2_SP_R(0,2,isn)];
571  vt1_2 = v1[IDX2_SP_R(1,0,isn)] + v1[IDX2_SP_I(1,2,isn)];
572  vt1_3 = v1[IDX2_SP_I(1,0,isn)] - v1[IDX2_SP_R(1,2,isn)];
573  vt1_4 = v1[IDX2_SP_R(2,0,isn)] + v1[IDX2_SP_I(2,2,isn)];
574  vt1_5 = v1[IDX2_SP_I(2,0,isn)] - v1[IDX2_SP_R(2,2,isn)];
575 
576  vt2_0 = v1[IDX2_SP_R(0,1,isn)] - v1[IDX2_SP_I(0,3,isn)];
577  vt2_1 = v1[IDX2_SP_I(0,1,isn)] + v1[IDX2_SP_R(0,3,isn)];
578  vt2_2 = v1[IDX2_SP_R(1,1,isn)] - v1[IDX2_SP_I(1,3,isn)];
579  vt2_3 = v1[IDX2_SP_I(1,1,isn)] + v1[IDX2_SP_R(1,3,isn)];
580  vt2_4 = v1[IDX2_SP_R(2,1,isn)] - v1[IDX2_SP_I(2,3,isn)];
581  vt2_5 = v1[IDX2_SP_I(2,1,isn)] + v1[IDX2_SP_R(2,3,isn)];
582 
583  u_0 = u_dn[IDX2_G_R(0,0,isg)];
584  u_1 = u_dn[IDX2_G_I(0,0,isg)];
585  u_2 = u_dn[IDX2_G_R(0,1,isg)];
586  u_3 = u_dn[IDX2_G_I(0,1,isg)];
587  u_4 = u_dn[IDX2_G_R(0,2,isg)];
588  u_5 = u_dn[IDX2_G_I(0,2,isg)];
589 
590  wt1r = MULT_GDXr(u_0, u_1, u_2, u_3, u_4, u_5,
592  wt1i = MULT_GDXi(u_0, u_1, u_2, u_3, u_4, u_5,
594  wt2r = MULT_GDXr(u_0, u_1, u_2, u_3, u_4, u_5,
596  wt2i = MULT_GDXi(u_0, u_1, u_2, u_3, u_4, u_5,
598 
599  // ic = 0;
600  bc2 = 1.0;
601  if(iz == 0) bc2 = bc[2];
602  v2_01 += bc2 * wt1r;
603  v2_11 += bc2 * wt1i;
604  v2_02 += bc2 * wt2r;
605  v2_12 += bc2 * wt2i;
606  v2_03 += -bc2 * wt1i;
607  v2_13 += bc2 * wt1r;
608  v2_04 += bc2 * wt2i;
609  v2_14 += -bc2 * wt2r;
610 
611  u_6 = u_dn[IDX2_G_R(1,0,isg)];
612  u_7 = u_dn[IDX2_G_I(1,0,isg)];
613  u_8 = u_dn[IDX2_G_R(1,1,isg)];
614  u_9 = u_dn[IDX2_G_I(1,1,isg)];
615  u10 = u_dn[IDX2_G_R(1,2,isg)];
616  u11 = u_dn[IDX2_G_I(1,2,isg)];
617 
618  wt1r = MULT_GDXr(u_6, u_7, u_8, u_9, u10, u11,
620  wt1i = MULT_GDXi(u_6, u_7, u_8, u_9, u10, u11,
622  wt2r = MULT_GDXr(u_6, u_7, u_8, u_9, u10, u11,
624  wt2i = MULT_GDXi(u_6, u_7, u_8, u_9, u10, u11,
626 
627  // ic = 1;
628  v2_21 += bc2 * wt1r;
629  v2_31 += bc2 * wt1i;
630  v2_22 += bc2 * wt2r;
631  v2_32 += bc2 * wt2i;
632  v2_23 += -bc2 * wt1i;
633  v2_33 += bc2 * wt1r;
634  v2_24 += bc2 * wt2i;
635  v2_34 += -bc2 * wt2r;
636 
637 #ifdef SU3_3RD_ROW_RECONST
638  u12 = EXT_IMG_R(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
639  u13 = EXT_IMG_I(u_2, u_3, u_4, u_5, u_8, u_9, u10, u11);
640  u14 = EXT_IMG_R(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
641  u15 = EXT_IMG_I(u_4, u_5, u_0, u_1, u10, u11, u_6, u_7);
642  u16 = EXT_IMG_R(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
643  u17 = EXT_IMG_I(u_0, u_1, u_2, u_3, u_6, u_7, u_8, u_9);
644 #else
645  u12 = u_dn[IDX2_G_R(2,0,isg)];
646  u13 = u_dn[IDX2_G_I(2,0,isg)];
647  u14 = u_dn[IDX2_G_R(2,1,isg)];
648  u15 = u_dn[IDX2_G_I(2,1,isg)];
649  u16 = u_dn[IDX2_G_R(2,2,isg)];
650  u17 = u_dn[IDX2_G_I(2,2,isg)];
651 #endif
652 
653  wt1r = MULT_GDXr(u12, u13, u14, u15, u16, u17,
655  wt1i = MULT_GDXi(u12, u13, u14, u15, u16, u17,
657  wt2r = MULT_GDXr(u12, u13, u14, u15, u16, u17,
659  wt2i = MULT_GDXi(u12, u13, u14, u15, u16, u17,
661 
662  // ic = 2;
663  v2_41 += bc2 * wt1r;
664  v2_51 += bc2 * wt1i;
665  v2_42 += bc2 * wt2r;
666  v2_52 += bc2 * wt2i;
667  v2_43 += -bc2 * wt1i;
668  v2_53 += bc2 * wt1r;
669  v2_44 += bc2 * wt2i;
670  v2_54 += -bc2 * wt2r;
671 
672 //============================================================END=====
v2_44
v2_44
Definition: mult_Wilson_eo_xyz_openacc-inc.h:119
wt2r
wt2r
Definition: mult_Wilson_eo_xyz_openacc-inc.h:43
isn
int isn
Definition: mult_Wilson_eo_xyz_openacc-inc.h:15
v2_13
v2_13
Definition: mult_Wilson_eo_xyz_openacc-inc.h:57
u_0
u_0
Definition: mult_Wilson_eo_xyz_openacc-inc.h:32
v2_22
v2_22
Definition: mult_Wilson_eo_xyz_openacc-inc.h:80
wt2i
wt2i
Definition: mult_Wilson_eo_xyz_openacc-inc.h:45
vt1_1
vt1_1
Definition: mult_Wilson_eo_xyz_openacc-inc.h:19
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
u17
u17
Definition: mult_Wilson_eo_xyz_openacc-inc.h:100
iyzt
int iyzt
Definition: mult_Wilson_eo_xyz_openacc-inc.h:14
vt2_4
vt2_4
Definition: mult_Wilson_eo_xyz_openacc-inc.h:29
u_4
u_4
Definition: mult_Wilson_eo_xyz_openacc-inc.h:36
vt2_1
vt2_1
Definition: mult_Wilson_eo_xyz_openacc-inc.h:26
vt1_0
vt1_0
Definition: mult_Wilson_eo_xyz_openacc-inc.h:18
vt2_0
vt2_0
Definition: mult_Wilson_eo_xyz_openacc-inc.h:25
vt1_5
vt1_5
Definition: mult_Wilson_eo_xyz_openacc-inc.h:23
v2_31
v2_31
Definition: mult_Wilson_eo_xyz_openacc-inc.h:79
u16
u16
Definition: mult_Wilson_eo_xyz_openacc-inc.h:99
vt2_5
vt2_5
Definition: mult_Wilson_eo_xyz_openacc-inc.h:30
u_8
u_8
Definition: mult_Wilson_eo_xyz_openacc-inc.h:63
v2_02
v2_02
Definition: mult_Wilson_eo_xyz_openacc-inc.h:54
vt1_4
vt1_4
Definition: mult_Wilson_eo_xyz_openacc-inc.h:22
IDX2_G_I
#define IDX2_G_I(ic1, ic2, ist)
Definition: define_index.h:52
MULT_GXi
#define MULT_GXi(u0, u1, u2, u3, u4, u5, v0, v1, v2, v3, v4, v5)
Definition: afield_Gauge_openacc-inc.h:17
v2_34
v2_34
Definition: mult_Wilson_eo_xyz_openacc-inc.h:85
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
v2_43
v2_43
Definition: mult_Wilson_eo_xyz_openacc-inc.h:117
u15
u15
Definition: mult_Wilson_eo_xyz_openacc-inc.h:98
v2_01
v2_01
Definition: mult_Wilson_eo_xyz_openacc-inc.h:52
isg
int isg
Definition: mult_Wilson_eo_xyz_openacc-inc.h:16
ixy
int ixy
Definition: mult_Wilson_eo_xyz_openacc-inc.h:453
u_9
u_9
Definition: mult_Wilson_eo_xyz_openacc-inc.h:64
wt1r
wt1r
Definition: mult_Wilson_eo_xyz_openacc-inc.h:39
nn
int nn
Definition: mult_Wilson_eo_xyz_openacc-inc.h:233
vt1_2
vt1_2
Definition: mult_Wilson_eo_xyz_openacc-inc.h:20
u_3
u_3
Definition: mult_Wilson_eo_xyz_openacc-inc.h:35
v2_14
v2_14
Definition: mult_Wilson_eo_xyz_openacc-inc.h:59
u12
u12
Definition: mult_Wilson_eo_xyz_openacc-inc.h:95
u13
u13
Definition: mult_Wilson_eo_xyz_openacc-inc.h:96
v2_11
v2_11
Definition: mult_Wilson_eo_xyz_openacc-inc.h:53
u_7
u_7
Definition: mult_Wilson_eo_xyz_openacc-inc.h:62
v2_33
v2_33
Definition: mult_Wilson_eo_xyz_openacc-inc.h:83
idir
int idir
Definition: mult_Wilson_eo_xyz_openacc-inc.h:12
u_1
u_1
Definition: mult_Wilson_eo_xyz_openacc-inc.h:33
v2_41
v2_41
Definition: mult_Wilson_eo_xyz_openacc-inc.h:113
v2_03
v2_03
Definition: mult_Wilson_eo_xyz_openacc-inc.h:56
u10
u10
Definition: mult_Wilson_eo_xyz_openacc-inc.h:65
u_2
u_2
Definition: mult_Wilson_eo_xyz_openacc-inc.h:34
vt1_3
vt1_3
Definition: mult_Wilson_eo_xyz_openacc-inc.h:21
it
int it
Definition: mult_Wilson_xyz_openacc-inc.h:461
v2_51
v2_51
Definition: mult_Wilson_eo_xyz_openacc-inc.h:114
vt2_2
vt2_2
Definition: mult_Wilson_eo_xyz_openacc-inc.h:27
v2_12
v2_12
Definition: mult_Wilson_eo_xyz_openacc-inc.h:55
v2_24
v2_24
Definition: mult_Wilson_eo_xyz_openacc-inc.h:84
v2_53
v2_53
Definition: mult_Wilson_eo_xyz_openacc-inc.h:118
v2_32
v2_32
Definition: mult_Wilson_eo_xyz_openacc-inc.h:81
MULT_GXr
#define MULT_GXr(u0, u1, u2, u3, u4, u5, v0, v1, v2, v3, v4, v5)
Definition: afield_Gauge_openacc-inc.h:16
v2_54
v2_54
Definition: mult_Wilson_eo_xyz_openacc-inc.h:120
u11
u11
Definition: mult_Wilson_eo_xyz_openacc-inc.h:66
IDX2_SP_R
#define IDX2_SP_R(ic, id, ist)
Definition: define_index.h:31
bc2
bc2
Definition: mult_Wilson_eo_xyz_openacc-inc.h:49
iz
int iz
Definition: mult_Wilson_xyz_openacc-inc.h:462
vt2_3
vt2_3
Definition: mult_Wilson_eo_xyz_openacc-inc.h:28
u_5
u_5
Definition: mult_Wilson_eo_xyz_openacc-inc.h:37
v2_42
v2_42
Definition: mult_Wilson_eo_xyz_openacc-inc.h:115
v2_23
v2_23
Definition: mult_Wilson_eo_xyz_openacc-inc.h:82
u14
u14
Definition: mult_Wilson_eo_xyz_openacc-inc.h:97
IDX2_G_R
#define IDX2_G_R(ic1, ic2, ist)
Definition: define_index.h:51
wt1i
wt1i
Definition: mult_Wilson_eo_xyz_openacc-inc.h:41
ix2
int ix2
Definition: mult_Wilson_eo_xyz_openacc-inc.h:123
v2_52
v2_52
Definition: mult_Wilson_eo_xyz_openacc-inc.h:116
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
v2_21
v2_21
Definition: mult_Wilson_eo_xyz_openacc-inc.h:78
v2_04
v2_04
Definition: mult_Wilson_eo_xyz_openacc-inc.h:58
EXT_IMG_I
#define EXT_IMG_I(v1r, v1i, v2r, v2i, w1r, w1i, w2r, w2i)
Definition: afield_Gauge_openacc-inc.h:20
IDX2_SP_I
#define IDX2_SP_I(ic, id, ist)
Definition: define_index.h:32
izt
int izt
Definition: mult_Wilson_eo_xyz_openacc-inc.h:232
u_6
u_6
Definition: mult_Wilson_eo_xyz_openacc-inc.h:61