Bridge++  Ver.2.1.3
mult_Wilson_2xyz_openacc-inc.h
Go to the documentation of this file.
1 
9  // idir = 0
10  if(do_comm[0] > 0){
11 
12  if(ix == Nx-1){
13  int iyzt = iy + Ny * (iz + Nz * it);
14 
15  real_t vt1[NVC], vt2[NVC], ut[NDF];
16  real_t wt1[2], wt2[2];
17 
18  for(int ivc = 0; ivc < NVC; ++ivc){
19  vt1[ivc] = buf_xp[IDXBF(ivc, 0, iyzt)];
20  vt2[ivc] = buf_xp[IDXBF(ivc, 1, iyzt)];
21  }
22 
23  for(int ic = 0; ic < NC; ++ic){
24 
25  for(int ic2 = 0; ic2 < NC; ++ic2){
26  ut[2*ic2 ] = u[IDX2_G_R(ic2, ic, ist)];
27  ut[2*ic2+1] = u[IDX2_G_I(ic2, ic, ist)];
28  }
29 
30  wt1[0] = MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
31  vt1[0],vt1[1],vt1[2],vt1[3],vt1[4],vt1[5]);
32  wt1[1] = MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
33  vt1[0],vt1[1],vt1[2],vt1[3],vt1[4],vt1[5]);
34  wt2[0] = MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
35  vt2[0],vt2[1],vt2[2],vt2[3],vt2[4],vt2[5]);
36  wt2[1] = MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
37  vt2[0],vt2[1],vt2[2],vt2[3],vt2[4],vt2[5]);
38 
39  v2L[2*ic + ID1] += wt1[0];
40  v2L[2*ic+1 + ID1] += wt1[1];
41  v2L[2*ic + ID2] += wt2[0];
42  v2L[2*ic+1 + ID2] += wt2[1];
43  v2L[2*ic + ID3] += wt2[1];
44  v2L[2*ic+1 + ID3] += -wt2[0];
45  v2L[2*ic + ID4] += wt1[1];
46  v2L[2*ic+1 + ID4] += -wt1[0];
47 
48  }
49  ++opr_any;
50  }
51 
52  if(ix == 0){
53  int iyzt = iy + Ny * (iz + Nz * it);
54  real_t bc2 = bc[0];
55  real_t wt1[2], wt2[2];
56 
57  for(int ic = 0; ic < NC; ++ic){
58 
59  wt1[0] = bc2 * buf_xm[IDXBF_R(ic, 0, iyzt)];
60  wt1[1] = bc2 * buf_xm[IDXBF_I(ic, 0, iyzt)];
61  wt2[0] = bc2 * buf_xm[IDXBF_R(ic, 1, iyzt)];
62  wt2[1] = bc2 * buf_xm[IDXBF_I(ic, 1, iyzt)];
63 
64  v2L[2*ic + ID1] += wt1[0];
65  v2L[2*ic+1 + ID1] += wt1[1];
66  v2L[2*ic + ID2] += wt2[0];
67  v2L[2*ic+1 + ID2] += wt2[1];
68  v2L[2*ic + ID3] += -wt2[1];
69  v2L[2*ic+1 + ID3] += wt2[0];
70  v2L[2*ic + ID4] += -wt1[1];
71  v2L[2*ic+1 + ID4] += wt1[0];
72  }
73  ++opr_any;
74  }
75 
76  }
77 
78  // idir = 1
79  if(do_comm[1] > 0){
80 
81  if(iy == Ny-1){
82  int ixzt = ix + Nx * (iz + Nz * it);
83  int istu = ist + Nst_pad;
84 
85  real_t vt1[NVC], vt2[NVC], ut[NDF];
86  real_t wt1[2], wt2[2];
87 
88  for(int ivc = 0; ivc < NVC; ++ivc){
89  vt1[ivc] = buf_yp[IDXBF(ivc, 0, ixzt)];
90  vt2[ivc] = buf_yp[IDXBF(ivc, 1, ixzt)];
91  }
92 
93  for(int ic = 0; ic < NC; ++ic){
94  for(int ic2 = 0; ic2 < NC; ++ic2){
95  ut[2*ic2 ] = u[IDX2_G_R(ic2, ic, istu)];
96  ut[2*ic2+1] = u[IDX2_G_I(ic2, ic, istu)];
97  }
98  wt1[0] = MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
99  vt1[0],vt1[1],vt1[2],vt1[3],vt1[4],vt1[5]);
100  wt1[1] = MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
101  vt1[0],vt1[1],vt1[2],vt1[3],vt1[4],vt1[5]);
102  wt2[0] = MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
103  vt2[0],vt2[1],vt2[2],vt2[3],vt2[4],vt2[5]);
104  wt2[1] = MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
105  vt2[0],vt2[1],vt2[2],vt2[3],vt2[4],vt2[5]);
106 
107  v2L[ic*2 + ID1] += wt1[0];
108  v2L[ic*2+1 + ID1] += wt1[1];
109  v2L[ic*2 + ID2] += wt2[0];
110  v2L[ic*2+1 + ID2] += wt2[1];
111  v2L[ic*2 + ID3] += -wt2[0];
112  v2L[ic*2+1 + ID3] += -wt2[1];
113  v2L[ic*2 + ID4] += wt1[0];
114  v2L[ic*2+1 + ID4] += wt1[1];
115  }
116  ++opr_any;
117  }
118 
119  if(iy == 0){
120  int ixzt = ix + Nx * (iz + Nz * it);
121  real_t wt1[2], wt2[2];
122  real_t bc2 = bc[1];
123 
124  for(int ic = 0; ic < NC; ++ic){
125  wt1[0] = bc2 * buf_ym[IDXBF_R(ic, 0, ixzt)];
126  wt1[1] = bc2 * buf_ym[IDXBF_I(ic, 0, ixzt)];
127  wt2[0] = bc2 * buf_ym[IDXBF_R(ic, 1, ixzt)];
128  wt2[1] = bc2 * buf_ym[IDXBF_I(ic, 1, ixzt)];
129  v2L[ic*2 + ID1] += wt1[0];
130  v2L[ic*2+1 + ID1] += wt1[1];
131  v2L[ic*2 + ID2] += wt2[0];
132  v2L[ic*2+1 + ID2] += wt2[1];
133  v2L[ic*2 + ID3] += wt2[0];
134  v2L[ic*2+1 + ID3] += wt2[1];
135  v2L[ic*2 + ID4] += -wt1[0];
136  v2L[ic*2+1 + ID4] += -wt1[1];
137  }
138  ++opr_any;
139  }
140 
141  }
142 
143  // idir = 2
144  if(do_comm[2] > 0){
145 
146  if(iz == Nz-1){
147  int ixyt = ix + Nx * (iy + Ny * it);
148  int istu = ist + Nst_pad * 2;
149 
150  real_t vt1[NVC], vt2[NVC];
151  for(int ivc = 0; ivc < NVC; ++ivc){
152  vt1[ivc] = buf_zp[IDXBF(ivc, 0, ixyt)];
153  vt2[ivc] = buf_zp[IDXBF(ivc, 1, ixyt)];
154  }
155 
156  for(int ic = 0; ic < NC; ++ic){
157  real_t ut[NVC], wt1[2], wt2[2];
158  for(int ic2 = 0; ic2 < NC; ++ic2){
159  ut[2*ic2 ] = u[IDX2_G_R(ic2, ic, istu)];
160  ut[2*ic2+1] = u[IDX2_G_I(ic2, ic, istu)];
161  }
162  wt1[0] = MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
163  vt1[0],vt1[1],vt1[2],vt1[3],vt1[4],vt1[5]);
164  wt1[1] = MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
165  vt1[0],vt1[1],vt1[2],vt1[3],vt1[4],vt1[5]);
166  wt2[0] = MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
167  vt2[0],vt2[1],vt2[2],vt2[3],vt2[4],vt2[5]);
168  wt2[1] = MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
169  vt2[0],vt2[1],vt2[2],vt2[3],vt2[4],vt2[5]);
170 
171  v2L[ic*2 + ID1] += wt1[0];
172  v2L[ic*2+1 + ID1] += wt1[1];
173  v2L[ic*2 + ID2] += wt2[0];
174  v2L[ic*2+1 + ID2] += wt2[1];
175  v2L[ic*2 + ID3] += wt1[1];
176  v2L[ic*2+1 + ID3] += -wt1[0];
177  v2L[ic*2 + ID4] += -wt2[1];
178  v2L[ic*2+1 + ID4] += wt2[0];
179  }
180  ++opr_any;
181  }
182 
183  if(iz == 0){
184  int ixyt = ix + Nx * (iy + Ny * it);
185  real_t bc2 = bc[2];
186  for(int ic = 0; ic < NC; ++ic){
187  real_t wt1[2], wt2[2];
188  wt1[0] = bc2 * buf_zm[IDXBF_R(ic, 0, ixyt)];
189  wt1[1] = bc2 * buf_zm[IDXBF_I(ic, 0, ixyt)];
190  wt2[0] = bc2 * buf_zm[IDXBF_R(ic, 1, ixyt)];
191  wt2[1] = bc2 * buf_zm[IDXBF_I(ic, 1, ixyt)];
192  v2L[ic*2 + ID1] += wt1[0];
193  v2L[ic*2+1 + ID1] += wt1[1];
194  v2L[ic*2 + ID2] += wt2[0];
195  v2L[ic*2+1 + ID2] += wt2[1];
196  v2L[ic*2 + ID3] += -wt1[1];
197  v2L[ic*2+1 + ID3] += wt1[0];
198  v2L[ic*2 + ID4] += wt2[1];
199  v2L[ic*2+1 + ID4] += -wt2[0];
200  }
201  ++opr_any;
202  }
203 
204  }
205 
206 //============================================================END=====
iy
int iy
Definition: mult_Wilson_xyz_openacc-inc.h:239
ID1
#define ID1
Definition: fopr_Wilson_impl_SU2-inc.h:18
NDF
#define NDF
Definition: field_F_imp_SU2-inc.h:17
IDXBF_I
#define IDXBF_I(ic, id, ist)
Definition: define_index.h:42
IDX2_G_I
#define IDX2_G_I(ic1, ic2, ist)
Definition: define_index.h:52
ID2
#define ID2
Definition: fopr_Wilson_impl_SU2-inc.h:19
ID4
#define ID4
Definition: fopr_Wilson_impl_SU2-inc.h:21
iyzt
int iyzt
Definition: mult_Domainwall_eo_xyz_openacc-inc.h:14
ix
int ix
Definition: mult_Wilson_xyz_openacc-inc.h:16
NC
#define NC
Definition: field_F_imp_SU2-inc.h:15
vt1
real_t vt1
Definition: mult_Staggered_uvdn1_openacc-inc.h:8
bc2
int bc2
Definition: mult_Domainwall_eo_t_dirac_openacc-inc.h:62
IDXBF
#define IDXBF(ivc, id, ist)
Definition: define_index.h:43
it
int it
Definition: mult_Wilson_xyz_openacc-inc.h:461
real_t
double real_t
Definition: bridgeACC_AField_double.cpp:14
ID3
#define ID3
Definition: fopr_Wilson_impl_SU2-inc.h:20
NVC
#define NVC
Definition: fopr_Wilson_impl_SU2-inc.h:15
MULT_UV_I
#define MULT_UV_I(u0, u1, u2, u3, u4, u5, v0, v1, v2, v3, v4, v5)
Definition: mult_Wilson_inline_openacc-inc.h:14
IDXBF_R
#define IDXBF_R(ic, id, ist)
Definition: define_index.h:41
MULT_UV_R
#define MULT_UV_R(u0, u1, u2, u3, u4, u5, v0, v1, v2, v3, v4, v5)
Definition: mult_Wilson_inline_openacc-inc.h:13
iz
int iz
Definition: mult_Wilson_xyz_openacc-inc.h:462
IDX2_G_R
#define IDX2_G_R(ic1, ic2, ist)
Definition: define_index.h:51
vt2
real_t vt2
Definition: mult_Staggered_uvdn1_openacc-inc.h:8