Bridge++  Ver.2.1.3
mult_Wilson_eo_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 && keo == 1){
13  int iyzt = iy + Ny * (iz + Nz * it);
14  int iyzt2 = iyzt/2;
15  int istu = ist + Nst_pad * (ieo + 2*0);
16 
17  real_t vt1[NVC], vt2[NVC], ut[NDF];
18  real_t wt1[2], wt2[2];
19 
20  for(int ivc = 0; ivc < NVC; ++ivc){
21  vt1[ivc] = buf_xp[IDXBF(ivc, 0, iyzt2)];
22  vt2[ivc] = buf_xp[IDXBF(ivc, 1, iyzt2)];
23  }
24 
25  for(int ic = 0; ic < NC; ++ic){
26  for(int ic2 = 0; ic2 < NC; ++ic2){
27  ut[2*ic2 ] = u[IDX2_G_R(ic2, ic, istu)];
28  ut[2*ic2+1] = u[IDX2_G_I(ic2, ic, istu)];
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  v2L[2*ic + ID1] += wt1[0];
39  v2L[2*ic+1 + ID1] += wt1[1];
40  v2L[2*ic + ID2] += wt2[0];
41  v2L[2*ic+1 + ID2] += wt2[1];
42  v2L[2*ic + ID3] += wt2[1];
43  v2L[2*ic+1 + ID3] += -wt2[0];
44  v2L[2*ic + ID4] += wt1[1];
45  v2L[2*ic+1 + ID4] += -wt1[0];
46  }
47  ++opr_any;
48  }
49 
50  if(ix == 0 && keo == 0){
51  int iyzt = iy + Ny * (iz + Nz * it);
52  int iyzt2 = iyzt/2;
53  real_t bc2 = bc[0];
54  real_t wt1[2], wt2[2];
55 
56  for(int ic = 0; ic < NC; ++ic){
57  wt1[0] = bc2 * buf_xm[IDXBF_R(ic, 0, iyzt2)];
58  wt1[1] = bc2 * buf_xm[IDXBF_I(ic, 0, iyzt2)];
59  wt2[0] = bc2 * buf_xm[IDXBF_R(ic, 1, iyzt2)];
60  wt2[1] = bc2 * buf_xm[IDXBF_I(ic, 1, iyzt2)];
61 
62  v2L[2*ic + ID1] += wt1[0];
63  v2L[2*ic+1 + ID1] += wt1[1];
64  v2L[2*ic + ID2] += wt2[0];
65  v2L[2*ic+1 + ID2] += wt2[1];
66  v2L[2*ic + ID3] += -wt2[1];
67  v2L[2*ic+1 + ID3] += wt2[0];
68  v2L[2*ic + ID4] += -wt1[1];
69  v2L[2*ic+1 + ID4] += wt1[0];
70  }
71  ++opr_any;
72  }
73 
74  }
75 
76  // idir = 1
77  if(do_comm[1] > 0){
78 
79  if(iy == Ny-1){
80  int ixzt = ix + Nx * (iz + Nz * it);
81  int istu = ist + Nst_pad * (ieo + 2*1);
82 
83  real_t vt1[NVC], vt2[NVC], ut[NDF];
84  real_t wt1[2], wt2[2];
85 
86  for(int ivc = 0; ivc < NVC; ++ivc){
87  vt1[ivc] = buf_yp[IDXBF(ivc, 0, ixzt)];
88  vt2[ivc] = buf_yp[IDXBF(ivc, 1, ixzt)];
89  }
90 
91  for(int ic = 0; ic < NC; ++ic){
92  for(int ic2 = 0; ic2 < NC; ++ic2){
93  ut[2*ic2 ] = u[IDX2_G_R(ic2, ic, istu)];
94  ut[2*ic2+1] = u[IDX2_G_I(ic2, ic, istu)];
95  }
96  wt1[0] = MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
97  vt1[0],vt1[1],vt1[2],vt1[3],vt1[4],vt1[5]);
98  wt1[1] = MULT_UV_I(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  wt2[0] = MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
101  vt2[0],vt2[1],vt2[2],vt2[3],vt2[4],vt2[5]);
102  wt2[1] = MULT_UV_I(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  v2L[ic*2 + ID1] += wt1[0];
105  v2L[ic*2+1 + ID1] += wt1[1];
106  v2L[ic*2 + ID2] += wt2[0];
107  v2L[ic*2+1 + ID2] += wt2[1];
108  v2L[ic*2 + ID3] += -wt2[0];
109  v2L[ic*2+1 + ID3] += -wt2[1];
110  v2L[ic*2 + ID4] += wt1[0];
111  v2L[ic*2+1 + ID4] += wt1[1];
112  }
113  ++opr_any;
114  }
115 
116  if(iy == 0){
117  int ixzt = ix + Nx * (iz + Nz * it);
118  real_t wt1[2], wt2[2];
119  real_t bc2 = bc[1];
120 
121  for(int ic = 0; ic < NC; ++ic){
122  wt1[0] = bc2 * buf_ym[IDXBF_R(ic, 0, ixzt)];
123  wt1[1] = bc2 * buf_ym[IDXBF_I(ic, 0, ixzt)];
124  wt2[0] = bc2 * buf_ym[IDXBF_R(ic, 1, ixzt)];
125  wt2[1] = bc2 * buf_ym[IDXBF_I(ic, 1, ixzt)];
126  v2L[ic*2 + ID1] += wt1[0];
127  v2L[ic*2+1 + ID1] += wt1[1];
128  v2L[ic*2 + ID2] += wt2[0];
129  v2L[ic*2+1 + ID2] += wt2[1];
130  v2L[ic*2 + ID3] += wt2[0];
131  v2L[ic*2+1 + ID3] += wt2[1];
132  v2L[ic*2 + ID4] += -wt1[0];
133  v2L[ic*2+1 + ID4] += -wt1[1];
134  }
135  ++opr_any;
136  }
137 
138  }
139 
140  // idir = 2
141  if(do_comm[2] > 0){
142 
143  if(iz == Nz-1){
144  int ixyt = ix + Nx * (iy + Ny * it);
145  int istu = ist + Nst_pad * (ieo + 2*2);
146 
147  real_t vt1[NVC], vt2[NVC];
148  for(int ivc = 0; ivc < NVC; ++ivc){
149  vt1[ivc] = buf_zp[IDXBF(ivc, 0, ixyt)];
150  vt2[ivc] = buf_zp[IDXBF(ivc, 1, ixyt)];
151  }
152 
153  for(int ic = 0; ic < NC; ++ic){
154  real_t ut[NVC], wt1[2], wt2[2];
155  for(int ic2 = 0; ic2 < NC; ++ic2){
156  ut[2*ic2 ] = u[IDX2_G_R(ic2, ic, istu)];
157  ut[2*ic2+1] = u[IDX2_G_I(ic2, ic, istu)];
158  }
159  wt1[0] = MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
160  vt1[0],vt1[1],vt1[2],vt1[3],vt1[4],vt1[5]);
161  wt1[1] = MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
162  vt1[0],vt1[1],vt1[2],vt1[3],vt1[4],vt1[5]);
163  wt2[0] = MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
164  vt2[0],vt2[1],vt2[2],vt2[3],vt2[4],vt2[5]);
165  wt2[1] = MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
166  vt2[0],vt2[1],vt2[2],vt2[3],vt2[4],vt2[5]);
167  v2L[ic*2 + ID1] += wt1[0];
168  v2L[ic*2+1 + ID1] += wt1[1];
169  v2L[ic*2 + ID2] += wt2[0];
170  v2L[ic*2+1 + ID2] += wt2[1];
171  v2L[ic*2 + ID3] += wt1[1];
172  v2L[ic*2+1 + ID3] += -wt1[0];
173  v2L[ic*2 + ID4] += -wt2[1];
174  v2L[ic*2+1 + ID4] += wt2[0];
175  }
176  ++opr_any;
177  }
178 
179  if(iz == 0){
180  int ixyt = ix + Nx * (iy + Ny * it);
181  real_t bc2 = bc[2];
182  for(int ic = 0; ic < NC; ++ic){
183  real_t wt1[2], wt2[2];
184  wt1[0] = bc2 * buf_zm[IDXBF_R(ic, 0, ixyt)];
185  wt1[1] = bc2 * buf_zm[IDXBF_I(ic, 0, ixyt)];
186  wt2[0] = bc2 * buf_zm[IDXBF_R(ic, 1, ixyt)];
187  wt2[1] = bc2 * buf_zm[IDXBF_I(ic, 1, ixyt)];
188  v2L[ic*2 + ID1] += wt1[0];
189  v2L[ic*2+1 + ID1] += wt1[1];
190  v2L[ic*2 + ID2] += wt2[0];
191  v2L[ic*2+1 + ID2] += wt2[1];
192  v2L[ic*2 + ID3] += -wt1[1];
193  v2L[ic*2+1 + ID3] += wt1[0];
194  v2L[ic*2 + ID4] += wt2[1];
195  v2L[ic*2+1 + ID4] += -wt2[0];
196  }
197  ++opr_any;
198  }
199 
200  }
201 
202 //============================================================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