10 #ifndef AFIELD_GAUGE_OPENACC_INC_INCLUDED
11 #define AFIELD_GAUGE_OPENACC_INC_INCLUDED
16 #define MULT_GXr(u0,u1,u2,u3,u4,u5,v0,v1,v2,v3,v4,v5) (u0*v0-u1*v1 + u2*v2-u3*v3 + u4*v4-u5*v5)
17 #define MULT_GXi(u0,u1,u2,u3,u4,u5,v0,v1,v2,v3,v4,v5) (u0*v1+u1*v0 + u2*v3+u3*v2 + u4*v5+u5*v4)
19 #define EXT_IMG_R(v1r,v1i,v2r,v2i,w1r,w1i,w2r,w2i) (v1r*w2r - v1i*w2i - v2r*w1r + v2i*w1i)
20 #define EXT_IMG_I(v1r,v1i,v2r,v2i,w1r,w1i,w2r,w2i) (- v1r*w2i - v1i*w2r + v2r*w1i + v2i*w1r)
22 #define MULT_R(v1r, v1i, v2r, v2i) (v1r * v2r - v1i * v2i)
23 #define MULT_I(v1r, v1i, v2r, v2i) (v1r * v2i + v1i * v2r)
28 return v1r * v2r - v1i * v2i;
33 return v1r * v2i + v1i * v2r;
38 real_t *RESTRICT v,
const int exv,
39 real_t *RESTRICT w,
const int exw,
40 const real_t a,
const int Nst)
44 int ngst =
NDF * Nst_pad;
45 int up =
NDF * Nst_pad * exu;
46 int vp =
NDF * Nst_pad * exv;
47 int wp =
NDF * Nst_pad * exw;
49 #pragma acc data present(u[up:ngst], v[vp:ngst], w[wp:ngst]) \
50 copyin(a, Nst, Nst_pad, exu, exv, exw)
51 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
54 #pragma acc loop gang worker vector
55 for(
int ist = 0; ist < Nst; ++ist){
56 int igw = ist + Nst_pad * exw;
57 int igv = ist + Nst_pad * exv;
58 int igu = ist + Nst_pad * exu;
60 #ifdef SU3_3RD_ROW_RECONST
62 for(
int ic2 = 0; ic2 <
NC-1; ++ic2){
63 for(
int ic1 = 0; ic1 <
NC; ++ic1){
64 int icr = 2*ic1 +
NVC * ic2;
65 int ici = 2*ic1+1 +
NVC * ic2;
66 vt[icr] = v[
IDX2_G_R(ic1, ic2, igv)];
67 vt[ici] = v[
IDX2_G_I(ic1, ic2, igv)];
71 vt[12] =
EXT_IMG_R(vt[ 2], vt[ 3], vt[ 4], vt[ 5],
72 vt[ 8], vt[ 9], vt[10], vt[11]);
73 vt[13] =
EXT_IMG_I(vt[ 2], vt[ 3], vt[ 4], vt[ 5],
74 vt[ 8], vt[ 9], vt[10], vt[11]);
75 vt[14] =
EXT_IMG_R(vt[ 4], vt[ 5], vt[ 0], vt[ 1],
76 vt[10], vt[11], vt[ 6], vt[ 7]);
77 vt[15] =
EXT_IMG_I(vt[ 4], vt[ 5], vt[ 0], vt[ 1],
78 vt[10], vt[11], vt[ 6], vt[ 7]);
79 vt[16] =
EXT_IMG_R(vt[ 0], vt[ 1], vt[ 2], vt[ 3],
80 vt[ 6], vt[ 7], vt[ 8], vt[ 9]);
81 vt[17] =
EXT_IMG_I(vt[ 0], vt[ 1], vt[ 2], vt[ 3],
82 vt[ 6], vt[ 7], vt[ 8], vt[ 9]);
85 for(
int ic2 = 0; ic2 <
NC; ++ic2){
86 for(
int ic1 = 0; ic1 <
NC; ++ic1){
87 int icr = 2*ic1 +
NVC * ic2;
88 int ici = 2*ic1+1 +
NVC * ic2;
89 vt[icr] = v[
IDX2_G_R(ic1, ic2, igv)];
90 vt[ici] = v[
IDX2_G_I(ic1, ic2, igv)];
95 for(
int ic2 = 0; ic2 <
NC; ++ic2){
97 for(
int ic1 = 0; ic1 <
NC; ++ic1){
104 for(
int ic1 = 0; ic1 <
NC; ++ic1){
107 ur =
MULT_GXr(vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j],
109 ui =
MULT_GXi(vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j],
111 u[
IDX2_G_R(ic2, ic1, igu)] += a * ur;
112 u[
IDX2_G_I(ic2, ic1, igu)] += a * ui;
125 real_t *RESTRICT v,
const int exv,
126 real_t *RESTRICT w,
const int exw,
const int Nst)
130 int ngst =
NDF * Nst_pad;
131 int up =
NDF * Nst_pad * exu;
132 int vp =
NDF * Nst_pad * exv;
133 int wp =
NDF * Nst_pad * exw;
135 #pragma acc data present(u[up:ngst], v[vp:ngst], w[wp:ngst]) \
136 copyin(Nst, Nst_pad, exu, exv, exw)
137 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
140 #pragma acc loop gang worker vector
141 for(
int ist = 0; ist < Nst; ++ist){
142 int igw = ist + Nst_pad * exw;
143 int igv = ist + Nst_pad * exv;
144 int igu = ist + Nst_pad * exu;
146 #ifdef SU3_3RD_ROW_RECONST
148 for(
int ic2 = 0; ic2 <
NC-1; ++ic2){
149 for(
int ic1 = 0; ic1 <
NC; ++ic1){
150 int icr = 2*ic1 +
NVC * ic2;
151 int ici = 2*ic1+1 +
NVC * ic2;
152 vt[icr] = v[
IDX2_G_R(ic1, ic2, igv)];
153 vt[ici] = v[
IDX2_G_I(ic1, ic2, igv)];
157 vt[12] =
EXT_IMG_R(vt[ 2], vt[ 3], vt[ 4], vt[ 5],
158 vt[ 8], vt[ 9], vt[10], vt[11]);
159 vt[13] =
EXT_IMG_I(vt[ 2], vt[ 3], vt[ 4], vt[ 5],
160 vt[ 8], vt[ 9], vt[10], vt[11]);
161 vt[14] =
EXT_IMG_R(vt[ 4], vt[ 5], vt[ 0], vt[ 1],
162 vt[10], vt[11], vt[ 6], vt[ 7]);
163 vt[15] =
EXT_IMG_I(vt[ 4], vt[ 5], vt[ 0], vt[ 1],
164 vt[10], vt[11], vt[ 6], vt[ 7]);
165 vt[16] =
EXT_IMG_R(vt[ 0], vt[ 1], vt[ 2], vt[ 3],
166 vt[ 6], vt[ 7], vt[ 8], vt[ 9]);
167 vt[17] =
EXT_IMG_I(vt[ 0], vt[ 1], vt[ 2], vt[ 3],
168 vt[ 6], vt[ 7], vt[ 8], vt[ 9]);
171 for(
int ic2 = 0; ic2 <
NC; ++ic2){
172 for(
int ic1 = 0; ic1 <
NC; ++ic1){
173 int icr = 2*ic1 +
NVC * ic2;
174 int ici = 2*ic1+1 +
NVC * ic2;
175 vt[icr] = v[
IDX2_G_R(ic1, ic2, igv)];
176 vt[ici] = v[
IDX2_G_I(ic1, ic2, igv)];
181 for(
int ic2 = 0; ic2 <
NC; ++ic2){
183 for(
int ic1 = 0; ic1 <
NC; ++ic1){
190 for(
int ic1 = 0; ic1 <
NC; ++ic1){
193 ur =
MULT_GXr(vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j],
195 ui =
MULT_GXi(vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j],
211 real_t *RESTRICT v,
const int exv,
212 real_t *RESTRICT w,
const int exw,
213 const real_t a,
const int Nst)
217 int ngst =
NDF * Nst_pad;
218 int up =
NDF * Nst_pad * exu;
219 int vp =
NDF * Nst_pad * exv;
220 int wp =
NDF * Nst_pad * exw;
222 #pragma acc data present(u[up:ngst], v[vp:ngst], w[wp:ngst]) \
223 copyin(a, Nst, Nst_pad, exu, exv, exw)
224 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
227 #pragma acc loop gang worker vector
228 for(
int ist = 0; ist < Nst; ++ist){
229 int igw = ist + Nst_pad * exw;
230 int igv = ist + Nst_pad * exv;
231 int igu = ist + Nst_pad * exu;
233 #ifdef SU3_3RD_ROW_RECONST
235 for(
int ic2 = 0; ic2 <
NC-1; ++ic2){
236 for(
int ic1 = 0; ic1 <
NC; ++ic1){
237 int icr = 2*ic1 +
NVC * ic2;
238 int ici = 2*ic1+1 +
NVC * ic2;
239 vt[icr] = v[
IDX2_G_R(ic1, ic2, igv)];
240 vt[ici] = v[
IDX2_G_I(ic1, ic2, igv)];
244 vt[12] =
EXT_IMG_R(vt[ 2], vt[ 3], vt[ 4], vt[ 5],
245 vt[ 8], vt[ 9], vt[10], vt[11]);
246 vt[13] =
EXT_IMG_I(vt[ 2], vt[ 3], vt[ 4], vt[ 5],
247 vt[ 8], vt[ 9], vt[10], vt[11]);
248 vt[14] =
EXT_IMG_R(vt[ 4], vt[ 5], vt[ 0], vt[ 1],
249 vt[10], vt[11], vt[ 6], vt[ 7]);
250 vt[15] =
EXT_IMG_I(vt[ 4], vt[ 5], vt[ 0], vt[ 1],
251 vt[10], vt[11], vt[ 6], vt[ 7]);
252 vt[16] =
EXT_IMG_R(vt[ 0], vt[ 1], vt[ 2], vt[ 3],
253 vt[ 6], vt[ 7], vt[ 8], vt[ 9]);
254 vt[17] =
EXT_IMG_I(vt[ 0], vt[ 1], vt[ 2], vt[ 3],
255 vt[ 6], vt[ 7], vt[ 8], vt[ 9]);
258 for(
int ic2 = 0; ic2 <
NC; ++ic2){
259 for(
int ic1 = 0; ic1 <
NC; ++ic1){
260 int icr = 2*ic1 +
NVC * ic2;
261 int ici = 2*ic1+1 +
NVC * ic2;
262 vt[icr] = v[
IDX2_G_R(ic1, ic2, igv)];
263 vt[ici] = v[
IDX2_G_I(ic1, ic2, igv)];
268 for(
int ic2 = 0; ic2 <
NC; ++ic2){
270 for(
int ic1 = 0; ic1 <
NC; ++ic1){
277 for(
int ic1 = 0; ic1 <
NC; ++ic1){
280 ur =
MULT_GXr(vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j],
282 ui =
MULT_GXi(vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j],
284 u[
IDX2_G_R(ic2, ic1, igu)] += a * ur;
285 u[
IDX2_G_I(ic2, ic1, igu)] += a * ui;
298 real_t *RESTRICT v,
const int exv,
299 real_t *RESTRICT w,
const int exw,
const int Nst)
303 int ngst =
NDF * Nst_pad;
304 int up =
NDF * Nst_pad * exu;
305 int vp =
NDF * Nst_pad * exv;
306 int wp =
NDF * Nst_pad * exw;
308 #pragma acc data present(u[up:ngst], v[vp:ngst], w[wp:ngst]) \
309 copyin(Nst, Nst_pad, exu, exv, exw)
310 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
313 #pragma acc loop gang worker vector
314 for(
int ist = 0; ist < Nst; ++ist){
315 int igw = ist + Nst_pad * exw;
316 int igv = ist + Nst_pad * exv;
317 int igu = ist + Nst_pad * exu;
319 #ifdef SU3_3RD_ROW_RECONST
321 for(
int ic2 = 0; ic2 <
NC-1; ++ic2){
322 for(
int ic1 = 0; ic1 <
NC; ++ic1){
323 int icr = 2*ic1 +
NVC * ic2;
324 int ici = 2*ic1+1 +
NVC * ic2;
325 vt[icr] = v[
IDX2_G_R(ic1, ic2, igv)];
326 vt[ici] = v[
IDX2_G_I(ic1, ic2, igv)];
330 vt[12] =
EXT_IMG_R(vt[ 2], vt[ 3], vt[ 4], vt[ 5],
331 vt[ 8], vt[ 9], vt[10], vt[11]);
332 vt[13] =
EXT_IMG_I(vt[ 2], vt[ 3], vt[ 4], vt[ 5],
333 vt[ 8], vt[ 9], vt[10], vt[11]);
334 vt[14] =
EXT_IMG_R(vt[ 4], vt[ 5], vt[ 0], vt[ 1],
335 vt[10], vt[11], vt[ 6], vt[ 7]);
336 vt[15] =
EXT_IMG_I(vt[ 4], vt[ 5], vt[ 0], vt[ 1],
337 vt[10], vt[11], vt[ 6], vt[ 7]);
338 vt[16] =
EXT_IMG_R(vt[ 0], vt[ 1], vt[ 2], vt[ 3],
339 vt[ 6], vt[ 7], vt[ 8], vt[ 9]);
340 vt[17] =
EXT_IMG_I(vt[ 0], vt[ 1], vt[ 2], vt[ 3],
341 vt[ 6], vt[ 7], vt[ 8], vt[ 9]);
344 for(
int ic2 = 0; ic2 <
NC; ++ic2){
345 for(
int ic1 = 0; ic1 <
NC; ++ic1){
346 int icr = 2*ic1 +
NVC * ic2;
347 int ici = 2*ic1+1 +
NVC * ic2;
348 vt[icr] = v[
IDX2_G_R(ic1, ic2, igv)];
349 vt[ici] = v[
IDX2_G_I(ic1, ic2, igv)];
354 for(
int ic2 = 0; ic2 <
NC; ++ic2){
356 for(
int ic1 = 0; ic1 <
NC; ++ic1){
363 for(
int ic1 = 0; ic1 <
NC; ++ic1){
366 ur =
MULT_GXr(vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j],
368 ui =
MULT_GXi(vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j],
384 real_t *RESTRICT v,
const int exv,
385 real_t *RESTRICT w,
const int exw,
386 const real_t a,
const int Nst)
390 int ngst =
NDF * Nst_pad;
391 int up =
NDF * Nst_pad * exu;
392 int vp =
NDF * Nst_pad * exv;
393 int wp =
NDF * Nst_pad * exw;
395 #pragma acc data present(u[up:ngst], v[vp:ngst], w[wp:ngst]) \
396 copyin(a, Nst, Nst_pad, exu, exv, exw)
397 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
400 #pragma acc loop gang worker vector
401 for(
int ist = 0; ist < Nst; ++ist){
402 int igw = ist + Nst_pad * exw;
403 int igv = ist + Nst_pad * exv;
404 int igu = ist + Nst_pad * exu;
406 #ifdef SU3_3RD_ROW_RECONST
408 for(
int ic2 = 0; ic2 <
NC-1; ++ic2){
409 for(
int ic1 = 0; ic1 <
NC; ++ic1){
410 int icr = 2*ic1 +
NVC * ic2;
411 int ici = 2*ic1+1 +
NVC * ic2;
412 vt[icr] = v[
IDX2_G_R(ic2, ic1, igv)];
413 vt[ici] = -v[
IDX2_G_I(ic2, ic1, igv)];
417 vt[12] =
EXT_IMG_R(vt[ 2], vt[ 3], vt[ 4], vt[ 5],
418 vt[ 8], vt[ 9], vt[10], vt[11]);
419 vt[13] =
EXT_IMG_I(vt[ 2], vt[ 3], vt[ 4], vt[ 5],
420 vt[ 8], vt[ 9], vt[10], vt[11]);
421 vt[14] =
EXT_IMG_R(vt[ 4], vt[ 5], vt[ 0], vt[ 1],
422 vt[10], vt[11], vt[ 6], vt[ 7]);
423 vt[15] =
EXT_IMG_I(vt[ 4], vt[ 5], vt[ 0], vt[ 1],
424 vt[10], vt[11], vt[ 6], vt[ 7]);
425 vt[16] =
EXT_IMG_R(vt[ 0], vt[ 1], vt[ 2], vt[ 3],
426 vt[ 6], vt[ 7], vt[ 8], vt[ 9]);
427 vt[17] =
EXT_IMG_I(vt[ 0], vt[ 1], vt[ 2], vt[ 3],
428 vt[ 6], vt[ 7], vt[ 8], vt[ 9]);
431 for(
int ic2 = 0; ic2 <
NC; ++ic2){
432 for(
int ic1 = 0; ic1 <
NC; ++ic1){
433 int icr = 2*ic1 +
NVC * ic2;
434 int ici = 2*ic1+1 +
NVC * ic2;
435 vt[icr] = v[
IDX2_G_R(ic2, ic1, igv)];
436 vt[ici] = -v[
IDX2_G_I(ic2, ic1, igv)];
441 for(
int ic2 = 0; ic2 <
NC; ++ic2){
443 for(
int ic1 = 0; ic1 <
NC; ++ic1){
450 for(
int ic1 = 0; ic1 <
NC; ++ic1){
453 ur =
MULT_GXr(vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j],
455 ui =
MULT_GXi(vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j],
457 u[
IDX2_G_R(ic2, ic1, igu)] += a * ur;
458 u[
IDX2_G_I(ic2, ic1, igu)] += a * ui;
471 real_t *RESTRICT v,
const int exv,
472 real_t *RESTRICT w,
const int exw,
const int Nst)
476 int ngst =
NDF * Nst_pad;
477 int up =
NDF * Nst_pad * exu;
478 int vp =
NDF * Nst_pad * exv;
479 int wp =
NDF * Nst_pad * exw;
481 #pragma acc data present(u[up:ngst], v[vp:ngst], w[wp:ngst]) \
482 copyin(Nst, Nst_pad, exu, exv, exw)
483 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
486 #pragma acc loop gang worker vector
487 for(
int ist = 0; ist < Nst; ++ist){
488 int igw = ist + Nst_pad * exw;
489 int igv = ist + Nst_pad * exv;
490 int igu = ist + Nst_pad * exu;
492 #ifdef SU3_3RD_ROW_RECONST
494 for(
int ic2 = 0; ic2 <
NC-1; ++ic2){
495 for(
int ic1 = 0; ic1 <
NC; ++ic1){
496 int icr = 2*ic1 +
NVC * ic2;
497 int ici = 2*ic1+1 +
NVC * ic2;
498 vt[icr] = v[
IDX2_G_R(ic2, ic1, igv)];
499 vt[ici] = -v[
IDX2_G_I(ic2, ic1, igv)];
503 vt[12] =
EXT_IMG_R(vt[ 2], vt[ 3], vt[ 4], vt[ 5],
504 vt[ 8], vt[ 9], vt[10], vt[11]);
505 vt[13] =
EXT_IMG_I(vt[ 2], vt[ 3], vt[ 4], vt[ 5],
506 vt[ 8], vt[ 9], vt[10], vt[11]);
507 vt[14] =
EXT_IMG_R(vt[ 4], vt[ 5], vt[ 0], vt[ 1],
508 vt[10], vt[11], vt[ 6], vt[ 7]);
509 vt[15] =
EXT_IMG_I(vt[ 4], vt[ 5], vt[ 0], vt[ 1],
510 vt[10], vt[11], vt[ 6], vt[ 7]);
511 vt[16] =
EXT_IMG_R(vt[ 0], vt[ 1], vt[ 2], vt[ 3],
512 vt[ 6], vt[ 7], vt[ 8], vt[ 9]);
513 vt[17] =
EXT_IMG_I(vt[ 0], vt[ 1], vt[ 2], vt[ 3],
514 vt[ 6], vt[ 7], vt[ 8], vt[ 9]);
517 for(
int ic2 = 0; ic2 <
NC; ++ic2){
518 for(
int ic1 = 0; ic1 <
NC; ++ic1){
519 int icr = 2*ic1 +
NVC * ic2;
520 int ici = 2*ic1+1 +
NVC * ic2;
521 vt[icr] = v[
IDX2_G_R(ic2, ic1, igv)];
522 vt[ici] = -v[
IDX2_G_I(ic2, ic1, igv)];
527 for(
int ic2 = 0; ic2 <
NC; ++ic2){
529 for(
int ic1 = 0; ic1 <
NC; ++ic1){
536 for(
int ic1 = 0; ic1 <
NC; ++ic1){
539 ur =
MULT_GXr(vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j],
541 ui =
MULT_GXi(vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j],
557 real_t *RESTRICT v,
const int exv,
558 real_t *RESTRICT w,
const int exw,
const int Nst)
562 int ngst =
NDF * Nst_pad;
563 int up =
NDF * Nst_pad * exu;
564 int vp =
NDF * Nst_pad * exv;
565 int wp =
NDF * Nst_pad * exw;
567 #pragma acc data present(u[up:ngst], v[vp:ngst], w[wp:ngst]) \
568 copyin(Nst, Nst_pad, exu, exv, exw)
569 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
572 #pragma acc loop gang worker vector
573 for(
int ist = 0; ist < Nst; ++ist){
574 int igw = ist + Nst_pad * exw;
575 int igv = ist + Nst_pad * exv;
576 int igu = ist + Nst_pad * exu;
578 #ifdef SU3_3RD_ROW_RECONST
580 for(
int ic2 = 0; ic2 <
NC-1; ++ic2){
581 for(
int ic1 = 0; ic1 <
NC; ++ic1){
582 int icr = 2*ic1 +
NVC * ic2;
583 int ici = 2*ic1+1 +
NVC * ic2;
584 vt[icr] = v[
IDX2_G_R(ic2, ic1, igv)];
585 vt[ici] = -v[
IDX2_G_I(ic2, ic1, igv)];
589 vt[12] =
EXT_IMG_R(vt[ 2], vt[ 3], vt[ 4], vt[ 5],
590 vt[ 8], vt[ 9], vt[10], vt[11]);
591 vt[13] =
EXT_IMG_I(vt[ 2], vt[ 3], vt[ 4], vt[ 5],
592 vt[ 8], vt[ 9], vt[10], vt[11]);
593 vt[14] =
EXT_IMG_R(vt[ 4], vt[ 5], vt[ 0], vt[ 1],
594 vt[10], vt[11], vt[ 6], vt[ 7]);
595 vt[15] =
EXT_IMG_I(vt[ 4], vt[ 5], vt[ 0], vt[ 1],
596 vt[10], vt[11], vt[ 6], vt[ 7]);
597 vt[16] =
EXT_IMG_R(vt[ 0], vt[ 1], vt[ 2], vt[ 3],
598 vt[ 6], vt[ 7], vt[ 8], vt[ 9]);
599 vt[17] =
EXT_IMG_I(vt[ 0], vt[ 1], vt[ 2], vt[ 3],
600 vt[ 6], vt[ 7], vt[ 8], vt[ 9]);
603 for(
int ic2 = 0; ic2 <
NC; ++ic2){
604 for(
int ic1 = 0; ic1 <
NC; ++ic1){
605 int icr = 2*ic1 +
NVC * ic2;
606 int ici = 2*ic1+1 +
NVC * ic2;
607 vt[icr] = v[
IDX2_G_R(ic2, ic1, igv)];
608 vt[ici] = -v[
IDX2_G_I(ic2, ic1, igv)];
613 for(
int ic2 = 0; ic2 <
NC; ++ic2){
615 for(
int ic1 = 0; ic1 <
NC; ++ic1){
622 for(
int ic1 = 0; ic1 <
NC; ++ic1){
625 ur =
MULT_GXr(vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j],
627 ui =
MULT_GXi(vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j],
647 int ngst =
NDF * Nst_pad;
648 int up =
NDF * Nst_pad * ex;
650 #pragma acc data present(u[up:ngst]) copyin(ex, Nst, Nst_pad)
651 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
654 #pragma acc loop gang worker vector
655 for(
int ist = 0; ist < Nst; ++ist){
656 int igu = ist + Nst_pad * ex;
659 for(
int ic2 = 0; ic2 <
NC; ++ic2){
660 for(
int ic1 = 0; ic1 <
NC; ++ic1){
661 int icr = 2*ic1 +
NVC * ic2;
662 int ici = 2*ic1+1 +
NVC * ic2;
663 ut[icr] = u[
IDX2_G_R(ic1, ic2, igu)];
664 ut[ici] = u[
IDX2_G_I(ic1, ic2, igu)];
671 vt[ 2] = 0.5 *(ut[ 2] - ut[ 6]);
672 vt[ 3] = 0.5 *(ut[ 3] + ut[ 7]);
673 vt[ 4] = 0.5 *(ut[ 4] - ut[12]);
674 vt[ 5] = 0.5 *(ut[ 5] + ut[13]);
679 vt[10] = 0.5 *(ut[10] - ut[14]);
680 vt[11] = 0.5 *(ut[11] + ut[15]);
688 for(
int ic2 = 0; ic2 <
NC; ++ic2){
689 for(
int ic1 = 0; ic1 <
NC; ++ic1){
690 int icr = 2*ic1 +
NVC * ic2;
691 int ici = 2*ic1+1 +
NVC * ic2;
692 u[
IDX2_G_R(ic1, ic2, igu)] = vt[icr];
693 u[
IDX2_G_I(ic1, ic2, igu)] = vt[ici];
709 int ngst =
NDF * Nst_pad;
710 int up =
NDF * Nst_pad * ex;
712 #pragma acc data present(u[up:ngst]) copyin(ex, Nst, Nst_pad)
713 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
716 #pragma acc loop gang worker vector
717 for(
int ist = 0; ist < Nst; ++ist){
718 int igu = ist + Nst_pad * ex;
721 for(
int ic2 = 0; ic2 <
NC; ++ic2){
722 for(
int ic1 = 0; ic1 <
NC; ++ic1){
723 int icr = 2*ic1 +
NVC * ic2;
724 int ici = 2*ic1+1 +
NVC * ic2;
725 ut[icr] = u[
IDX2_G_R(ic1, ic2, igu)];
726 ut[ici] = u[
IDX2_G_I(ic1, ic2, igu)];
731 real_t tr = (ut[ 1] + ut[9] + ut[17])/3.0;
733 vt[ 1] = ut[ 1] - tr;
734 vt[ 2] = 0.5 *(ut[ 2] - ut[ 6]);
735 vt[ 3] = 0.5 *(ut[ 3] + ut[ 7]);
736 vt[ 4] = 0.5 *(ut[ 4] - ut[12]);
737 vt[ 5] = 0.5 *(ut[ 5] + ut[13]);
741 vt[ 9] = ut[ 9] - tr;
742 vt[10] = 0.5 *(ut[10] - ut[14]);
743 vt[11] = 0.5 *(ut[11] + ut[15]);
749 vt[17] = ut[17] - tr;
751 for(
int ic2 = 0; ic2 <
NC; ++ic2){
752 for(
int ic1 = 0; ic1 <
NC; ++ic1){
753 int icr = 2*ic1 +
NVC * ic2;
754 int ici = 2*ic1+1 +
NVC * ic2;
755 u[
IDX2_G_R(ic1, ic2, igu)] = vt[icr];
756 u[
IDX2_G_I(ic1, ic2, igu)] = vt[ici];
772 int ngst =
NDF * Nst_pad;
773 int up =
NDF * Nst_pad * ex;
775 #pragma acc data present(u[up:ngst]) copyin(a, ex, Nst, Nst_pad)
776 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
779 #pragma acc loop gang worker vector
780 for(
int ist = 0; ist < Nst; ++ist){
781 int igu = ist + Nst_pad * ex;
783 for(
int ic = 0; ic <
NC; ++ic){
797 const real_t *RESTRICT v,
const int ex2,
803 int ngst =
NDF * Nst_pad;
804 int up =
NDF * Nst_pad * ex1;
805 int vp =
NDF * Nst_pad * ex2;
807 #pragma acc data present(v[vp:ngst], u[up:ngst]) \
808 copyin(ex1, ex2, Nst, Nst_pad)
809 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
812 #pragma acc loop gang worker vector
813 for(
int ist = 0; ist < Nst; ++ist){
815 int ist1 = ist + Nst_pad * ex1;
816 int ist2 = ist + Nst_pad * ex2;
841 wt[ 0] =
MULT_R(vt[ 8], vt[ 9], vt[16], vt[17])
842 -
MULT_R(vt[10], vt[11], vt[14], vt[15]);
843 wt[ 1] =
MULT_I(vt[ 8], vt[ 9], vt[16], vt[17])
844 -
MULT_I(vt[10], vt[11], vt[14], vt[15]);
846 wt[ 2] =
MULT_R(vt[10], vt[11], vt[12], vt[13])
847 -
MULT_R(vt[ 6], vt[ 7], vt[16], vt[17]);
848 wt[ 3] =
MULT_I(vt[10], vt[11], vt[12], vt[13])
849 -
MULT_I(vt[ 6], vt[ 7], vt[16], vt[17]);
851 wt[ 4] =
MULT_R(vt[ 6], vt[ 7], vt[14], vt[15])
852 -
MULT_R(vt[ 8], vt[ 9], vt[12], vt[13]);
853 wt[ 5] =
MULT_I(vt[ 6], vt[ 7], vt[14], vt[15])
854 -
MULT_I(vt[ 8], vt[ 9], vt[12], vt[13]);
856 wt[ 6] =
MULT_R(vt[14], vt[15], vt[ 4], vt[ 5])
857 -
MULT_R(vt[16], vt[17], vt[ 2], vt[ 3]);
858 wt[ 7] =
MULT_I(vt[14], vt[15], vt[ 4], vt[ 5])
859 -
MULT_I(vt[16], vt[17], vt[ 2], vt[ 3]);
861 wt[ 8] =
MULT_R(vt[16], vt[17], vt[ 0], vt[ 1])
862 -
MULT_R(vt[12], vt[13], vt[ 4], vt[ 5]);
863 wt[ 9] =
MULT_I(vt[16], vt[17], vt[ 0], vt[ 1])
864 -
MULT_I(vt[12], vt[13], vt[ 4], vt[ 5]);
866 wt[10] =
MULT_R(vt[12], vt[13], vt[ 2], vt[ 3])
867 -
MULT_R(vt[14], vt[15], vt[ 0], vt[ 1]);
868 wt[11] =
MULT_I(vt[12], vt[13], vt[ 2], vt[ 3])
869 -
MULT_I(vt[14], vt[15], vt[ 0], vt[ 1]);
871 wt[12] =
MULT_R(vt[ 2], vt[ 3], vt[10], vt[11])
872 -
MULT_R(vt[ 4], vt[ 5], vt[ 8], vt[ 9]);
873 wt[13] =
MULT_I(vt[ 2], vt[ 3], vt[10], vt[11])
874 -
MULT_I(vt[ 4], vt[ 5], vt[ 8], vt[ 9]);
876 wt[14] =
MULT_R(vt[ 4], vt[ 5], vt[ 6], vt[ 7])
877 -
MULT_R(vt[ 0], vt[ 1], vt[10], vt[11]);
878 wt[15] =
MULT_I(vt[ 4], vt[ 5], vt[ 6], vt[ 7])
879 -
MULT_I(vt[ 0], vt[ 1], vt[10], vt[11]);
881 wt[16] =
MULT_R(vt[ 0], vt[ 1], vt[ 8], vt[ 9])
882 -
MULT_R(vt[ 2], vt[ 3], vt[ 6], vt[ 7]);
883 wt[17] =
MULT_I(vt[ 0], vt[ 1], vt[ 8], vt[ 9])
884 -
MULT_I(vt[ 2], vt[ 3], vt[ 6], vt[ 7]);
893 real_t det2 = det_r * det_r + det_i * det_i;
894 real_t detinv_r = det_r/det2;
895 real_t detinv_i = - det_i/det2;
897 ut[ 0] =
MULT_R(
wt[ 0],
wt[ 1], detinv_r, detinv_i);
898 ut[ 1] =
MULT_I(
wt[ 0],
wt[ 1], detinv_r, detinv_i);
900 ut[ 2] =
MULT_R(
wt[ 6],
wt[ 7], detinv_r, detinv_i);
901 ut[ 3] =
MULT_I(
wt[ 6],
wt[ 7], detinv_r, detinv_i);
903 ut[ 4] =
MULT_R(
wt[12],
wt[13], detinv_r, detinv_i);
904 ut[ 5] =
MULT_I(
wt[12],
wt[13], detinv_r, detinv_i);
906 ut[ 6] =
MULT_R(
wt[ 2],
wt[ 3], detinv_r, detinv_i);
907 ut[ 7] =
MULT_I(
wt[ 2],
wt[ 3], detinv_r, detinv_i);
909 ut[ 8] =
MULT_R(
wt[ 8],
wt[ 9], detinv_r, detinv_i);
910 ut[ 9] =
MULT_I(
wt[ 8],
wt[ 9], detinv_r, detinv_i);
912 ut[10] =
MULT_R(
wt[14],
wt[15], detinv_r, detinv_i);
913 ut[11] =
MULT_I(
wt[14],
wt[15], detinv_r, detinv_i);
915 ut[12] =
MULT_R(
wt[ 4],
wt[ 5], detinv_r, detinv_i);
916 ut[13] =
MULT_I(
wt[ 4],
wt[ 5], detinv_r, detinv_i);
918 ut[14] =
MULT_R(
wt[10],
wt[11], detinv_r, detinv_i);
919 ut[15] =
MULT_I(
wt[10],
wt[11], detinv_r, detinv_i);
921 ut[16] =
MULT_R(
wt[16],
wt[17], detinv_r, detinv_i);
922 ut[17] =
MULT_I(
wt[16],
wt[17], detinv_r, detinv_i);