Go to the documentation of this file.
10 #ifndef MULT_DOMAINWALL_5DIN_ACC_INCLUDED
11 #define MULT_DOMAINWALL_5DIN_ACC_INCLUDED
23 int Nst = Nx * Ny * Nz * Nt;
27 int size = Nin5 * Nst;
29 #pragma acc data present(vp[0:size], yp[0:size], wp[0:size]) \
30 copyin(Nst, Nst_pad, Ns, Nin5, mq, M0, \
31 b[0:Ns], c[0:Ns], alpha)
33 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
36 #pragma acc loop gang worker vector
40 int idx_out = idx2_wp /
NVC;
41 int site = idx_in +
NWP * idx_out;
42 int ivc = idx2_wp %
NVC;
46 for (
int is = 0; is < Ns; ++is) {
52 int is_up = (is+1) % Ns;
54 if (is == Ns-1) Fup = -0.5 * mq;
56 wt1 = wp[
IDX2(Nin5,
ID1 + ivc +
NVCD * is_up, site)];
57 wt2 = wp[
IDX2(Nin5,
ID2 + ivc +
NVCD * is_up, site)];
58 wt3 = wp[
IDX2(Nin5,
ID3 + ivc +
NVCD * is_up, site)];
59 wt4 = wp[
IDX2(Nin5,
ID4 + ivc +
NVCD * is_up, site)];
61 vt1 = Fup * (wt1 - wt3);
62 vt2 = Fup * (wt2 - wt4);
63 vt3 = Fup * (wt3 - wt1);
64 vt4 = Fup * (wt4 - wt2);
66 int is_dn = (is-1 + Ns) % Ns;
68 if (is == 0) Fdn = -0.5 * mq;
70 wt1 = wp[
IDX2(Nin5,
ID1 + ivc +
NVCD * is_dn, site)];
71 wt2 = wp[
IDX2(Nin5,
ID2 + ivc +
NVCD * is_dn, site)];
72 wt3 = wp[
IDX2(Nin5,
ID3 + ivc +
NVCD * is_dn, site)];
73 wt4 = wp[
IDX2(Nin5,
ID4 + ivc +
NVCD * is_dn, site)];
75 vt1 += Fdn * (wt1 + wt3);
76 vt2 += Fdn * (wt2 + wt4);
77 vt3 += Fdn * (wt3 + wt1);
78 vt4 += Fdn * (wt4 + wt2);
85 real_t B1 = b[is] * (4.0 - M0) + 1.0;
86 real_t C1 = c[is] * (4.0 - M0) - 1.0;
92 real_t F1 = 0.5 * ( 1.0 + alpha);
93 real_t F2 = 0.5 * (-1.0 + alpha);
94 xt1 = F1 * wt1 + F2 * wt3;
95 xt2 = F1 * wt2 + F2 * wt4;
96 xt3 = F1 * wt3 + F2 * wt1;
97 xt4 = F1 * wt4 + F2 * wt2;
102 }
else if(is == Ns-1){
103 real_t F1 = 0.5 * (1.0 + alpha);
104 real_t F2 = 0.5 * (1.0 - alpha);
105 xt1 = F1 * wt1 + F2 * wt3;
106 xt2 = F1 * wt2 + F2 * wt4;
107 xt3 = F1 * wt3 + F2 * wt1;
108 xt4 = F1 * wt4 + F2 * wt2;
119 int ivcs = ivc +
NVCD * is;
120 vp[
IDX2(Nin5,
ID1 + ivcs, site)] = B1 * wt1 + C1 *
vt1;
121 vp[
IDX2(Nin5,
ID2 + ivcs, site)] = B1 * wt2 + C1 *
vt2;
122 vp[
IDX2(Nin5,
ID3 + ivcs, site)] = B1 * wt3 + C1 *
vt3;
123 vp[
IDX2(Nin5,
ID4 + ivcs, site)] = B1 * wt4 + C1 *
vt4;
125 yp[
IDX2(Nin5,
ID1 + ivcs, site)] = B2 * wt1 + C2 *
vt1;
126 yp[
IDX2(Nin5,
ID2 + ivcs, site)] = B2 * wt2 + C2 *
vt2;
127 yp[
IDX2(Nin5,
ID3 + ivcs, site)] = B2 * wt3 + C2 *
vt3;
128 yp[
IDX2(Nin5,
ID4 + ivcs, site)] = B2 * wt4 + C2 *
vt4;
149 int Nst = Nx * Ny * Nz * Nt;
152 int Nin5 =
NVCD * Ns;
153 int size = Nin5 * Nst_pad;
155 #pragma acc data present(vp[0:size], yp[0:size], wp[0:size]) \
156 copyin(Nst, Nst_pad, Ns, Nin5, mq, M0, \
157 b[0:Ns], c[0:Ns], alpha)
159 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
162 #pragma acc loop gang worker vector
166 int idx_out = idx2_wp /
NVC;
167 int site = idx_in +
NWP * idx_out;
168 int ivc = idx2_wp %
NVC;
172 for (
int is = 0; is < Ns; ++is) {
174 real_t yt1, yt2, yt3, yt4;
175 real_t wt1, wt2, wt3, wt4;
190 real_t B1 = b[is] * (4.0 - M0) + 1.0;
192 xt1 = B1 * wt1 + a1 * yt3;
193 xt2 = B1 * wt2 + a1 * yt4;
194 xt3 = B1 * wt3 + a1 * yt1;
195 xt4 = B1 * wt4 + a1 * yt2;
197 real_t F1 = 0.5 * ( 1.0 + alpha);
198 real_t F2 = 0.5 * (-1.0 + alpha);
203 }
else if(is == Ns-1){
204 real_t B1 = b[is] * (4.0 - M0) + 1.0;
206 xt1 = B1 * wt1 + a1 * yt3;
207 xt2 = B1 * wt2 + a1 * yt4;
208 xt3 = B1 * wt3 + a1 * yt1;
209 xt4 = B1 * wt4 + a1 * yt2;
211 real_t F1 = 0.5 * (1.0 + alpha);
212 real_t F2 = 0.5 * (1.0 - alpha);
218 real_t B1 = (b[is] * (4.0 - M0) + 1.0) * alpha;
219 real_t a1 = -0.5 * b[is] * alpha;
220 vt1 = B1 * wt1 + a1 * yt3;
221 vt2 = B1 * wt2 + a1 * yt4;
222 vt3 = B1 * wt3 + a1 * yt1;
223 vt4 = B1 * wt4 + a1 * yt2;
226 int is_up = (is+1) % Ns;
227 real_t C1 = c[is_up] * (4.0 - M0) - 1.0;
228 real_t aup = -0.5 * c[is_up];
230 yt1 = yp[
IDX2(Nin5,
ID1 + ivc +
NVCD * is_up, site)];
231 yt2 = yp[
IDX2(Nin5,
ID2 + ivc +
NVCD * is_up, site)];
232 yt3 = yp[
IDX2(Nin5,
ID3 + ivc +
NVCD * is_up, site)];
233 yt4 = yp[
IDX2(Nin5,
ID4 + ivc +
NVCD * is_up, site)];
235 wt1 = wp[
IDX2(Nin5,
ID1 + ivc +
NVCD * is_up, site)];
236 wt2 = wp[
IDX2(Nin5,
ID2 + ivc +
NVCD * is_up, site)];
237 wt3 = wp[
IDX2(Nin5,
ID3 + ivc +
NVCD * is_up, site)];
238 wt4 = wp[
IDX2(Nin5,
ID4 + ivc +
NVCD * is_up, site)];
240 xt1 = C1 * wt1 + aup * yt3;
241 xt2 = C1 * wt2 + aup * yt4;
242 xt3 = C1 * wt3 + aup * yt1;
243 xt4 = C1 * wt4 + aup * yt2;
246 if (is == Ns-1) Fup = -0.5 * mq;
253 int is_dn = (is-1 + Ns) % Ns;
254 real_t C2 = c[is_dn] * (4.0 - M0) - 1.0;
255 real_t adn = -0.5 * c[is_dn];
257 yt1 = yp[
IDX2(Nin5,
ID1 + ivc +
NVCD * is_dn, site)];
258 yt2 = yp[
IDX2(Nin5,
ID2 + ivc +
NVCD * is_dn, site)];
259 yt3 = yp[
IDX2(Nin5,
ID3 + ivc +
NVCD * is_dn, site)];
260 yt4 = yp[
IDX2(Nin5,
ID4 + ivc +
NVCD * is_dn, site)];
262 wt1 = wp[
IDX2(Nin5,
ID1 + ivc +
NVCD * is_dn, site)];
263 wt2 = wp[
IDX2(Nin5,
ID2 + ivc +
NVCD * is_dn, site)];
264 wt3 = wp[
IDX2(Nin5,
ID3 + ivc +
NVCD * is_dn, site)];
265 wt4 = wp[
IDX2(Nin5,
ID4 + ivc +
NVCD * is_dn, site)];
267 xt1 = C2 * wt1 + adn * yt3;
268 xt2 = C2 * wt2 + adn * yt4;
269 xt3 = C2 * wt3 + adn * yt1;
270 xt4 = C2 * wt4 + adn * yt2;
273 if (is == 0) Fdn = -0.5 * mq;
294 real_t *RESTRICT vp,
real_t *RESTRICT wp,
int Ns,
int *Nsize)
300 int Nst = Nx * Ny * Nz * Nt;
303 int Nin5 =
NVCD * Ns;
304 int size = Nin5 * Nst_pad;
306 #pragma acc data present(vp[0:size], wp[0:size]) copyin(Nst, Nst_pad, Ns, Nin5)
308 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
311 #pragma acc loop gang worker vector
312 for (
int idx = 0;
idx < Ns * Nst_pad; ++
idx) {
315 int idx_out = idx2_wp / Ns;
316 int site = idx_in +
NWP * idx_out;
317 int is = idx2_wp % Ns;
320 for (
int ivc = 0; ivc <
NVC; ++ivc) {
342 real_t *RESTRICT vp,
real_t *RESTRICT wp,
int Ns,
int *Nsize)
348 int Nst = Nx * Ny * Nz * Nt;
351 int Nin5 =
NVCD * Ns;
352 int size = Nin5 * Nst_pad;
354 #pragma acc data present(vp[0:size], wp[0:size]) copyin(Nst, Nst_pad, Ns, Nin5)
356 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
359 #pragma acc loop gang worker vector
360 for (
int site = 0; site < Nst_pad; ++site) {
363 for (
int is = 0; is < Ns; ++is) {
368 for (
int ivcd = 0; ivcd <
NVCD; ++ivcd) {
369 vt[ivcd] = wp[
IDX2(Nin5, ivcd +
NVCD * isR, site)];
372 for (
int ivcd = 0; ivcd <
NVCD; ++ivcd) {
373 vp[
IDX2(Nin5, ivcd +
NVCD * is, site)] = vt[ivcd];
386 real_t *RESTRICT vp,
real_t *RESTRICT wp,
int Ns,
int *Nsize)
392 int Nst = Nx * Ny * Nz * Nt;
395 int Nin5 =
NVCD * Ns;
396 int size = Nin5 * Nst_pad;
398 #pragma acc data present(vp[0:size], wp[0:size]) copyin(Nst, Nst_pad, Ns, Nin5)
400 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
403 #pragma acc loop gang worker vector
404 for (
int site = 0; site < Nst_pad; ++site) {
407 for (
int is = 0; is < Ns; ++is) {
412 for (
int ivcd = 0; ivcd <
NVCD; ++ivcd) {
413 wt[ivcd] = wp[
IDX2(Nin5, ivcd +
NVCD*isR, site)];
416 for (
int ivc = 0; ivc <
NVC; ++ivc) {
423 for (
int ivcd = 0; ivcd <
NVCD; ++ivcd) {
424 vp[
IDX2(Nin5, ivcd +
NVCD*is, site)] = vt[ivcd];
438 int Ns,
int *bc,
int *Nsize,
int *do_comm,
int flag)
444 int Nst = Nx * Ny * Nz * Nt;
447 int Nin5 =
NVCD * Ns;
449 int size = Nin5 * Nst_pad;
450 int size_u =
NDF * Nst_pad *
NDIM;
452 #pragma acc data present(vp[0:size], up[0:size_u], wp[0:size]) \
453 copyin(Nst, Nst_pad, Nx, Ny, Nz, Nt, Nin5, Ns, \
454 bc[0:NDIM], do_comm[0:NDIM])
456 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
459 #pragma acc loop gang worker vector
460 for (
int idx = 0;
idx < Ns * Nst_pad; ++
idx) {
463 int is = idx2_wp % Ns;
464 int idx_out = idx2_wp / Ns;
466 int site = idx_in +
NWP*idx_out;
473 int iyzt = site / Nx;
474 int ixy = site % Nxy;
476 int izt = site / Nxy;
479 int ixyz = site % Nxyz;
486 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
490 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
491 vL[ivcd] = vp[
IDX2(Nin5, ivcd +
NVCD * is, site)];
497 if ((
ix < Nx-1) || (do_comm[
idir] == 0)) {
498 int ix2 = (
ix + 1) % Nx;
501 if(
ix == Nx-1)
bc2 = bc[0];
507 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
513 if ((
ix > 0) || (do_comm[
idir] == 0)) {
514 int ix2 = (
ix - 1 + Nx) % Nx;
517 if(
ix == 0)
bc2 = bc[0];
523 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
531 if ((
iy < Ny-1) || (do_comm[
idir] == 0)) {
532 int iy2 = (
iy + 1) % Ny;
533 int nei =
ix + Nx * (iy2 + Ny *
izt);
535 if(
iy == Ny-1)
bc2 = bc[1];
541 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
547 if ((
iy > 0) || (do_comm[
idir] == 0)) {
548 int iy2 = (
iy - 1 + Ny) % Ny;
549 int nei =
ix + Nx * (iy2 + Ny *
izt);
551 if(
iy == 0)
bc2 = bc[1];
557 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
565 if ((
iz < Nz-1) || (do_comm[
idir] == 0)) {
566 int iz2 = (
iz + 1) % Nz;
567 int nei =
ixy + Nxy * (iz2 + Nz *
it);
569 if(
iz == Nz-1)
bc2 = bc[2];
575 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
581 if ((
iz > 0) || (do_comm[
idir] == 0)) {
582 int iz2 = (
iz - 1 + Nz) % Nz;
583 int nei =
ixy + Nxy * (iz2 + Nz *
it);
585 if(
iz == 0)
bc2 = bc[2];
591 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
599 if ((
it < Nt-1) || (do_comm[
idir] == 0)) {
600 int it2 = (
it + 1) % Nt;
601 int nei =
ixyz + Nxyz * it2;
603 if(
it == Nt-1)
bc2 = bc[3];
609 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
615 if ((
it > 0) || (do_comm[
idir] == 0)) {
616 int it2 = (
it - 1 + Nt) % Nt;
617 int nei =
ixyz + Nxyz * it2;
619 if(
it == 0)
bc2 = bc[3];
625 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
631 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
632 vp[
IDX2(Nin5, ivcd +
NVCD * is, site)] = vL[ivcd];
651 int Ns,
int *bc,
int *Nsize,
int *do_comm)
657 int Nst = Nx * Ny * Nz * Nt;
658 int Nst_pad =
CEIL_NWP(Nx * Ny * Nz * Nt);
660 int Nin5 =
NVCD * Ns;
661 int Nin5bd = NVCD2 * Ns;
663 int size = Nin5 * Nst_pad;
664 int size_u =
NDF * Nst_pad *
NDIM;
666 int size_bx = Nin5bd *
CEIL_NWP(Ny * Nz * Nt);
667 int size_by = Nin5bd *
CEIL_NWP(Nx * Nz * Nt);
668 int size_bz = Nin5bd *
CEIL_NWP(Nx * Ny * Nt);
669 int size_bt = Nin5bd *
CEIL_NWP(Nx * Ny * Nz);
671 #pragma acc data present(up[0:size_u], wp[0:size], \
672 buf_xp[0:size_bx], buf_xm[0:size_bx], \
673 buf_yp[0:size_by], buf_ym[0:size_by], \
674 buf_zp[0:size_bz], buf_zm[0:size_bz], \
675 buf_tp[0:size_bt], buf_tm[0:size_bt] ) \
676 copyin(Nst, Nst_pad, Nx, Ny, Nz, Nt, Nin5, Nin5bd, \
677 Ns, bc[0:NDIM], do_comm[0:4])
679 if (do_comm[0] > 0) {
681 int Nyzt = Ny * Nz * Nt;
683 #pragma acc parallel async \
684 num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
688 #pragma acc loop gang worker vector
693 int site =
ix + Nx *
iyzt;
695 for (
int is = 0; is < Ns; ++is) {
697 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
698 wt[ivcd] = wp[
IDX2(Nin5, ivcd +
NVCD * is, site)];
701 for(
int ivcd = 0; ivcd < NVCD2; ++ivcd){
702 buf_xp[
IDX2(Nin5bd, ivcd + NVCD2 * is,
iyzt)] =
bc2 * vt[ivcd];
710 for (
int is = 0; is < Ns; ++is) {
712 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
713 wt[ivcd] = wp[
IDX2(Nin5, ivcd +
NVCD * is, site)];
716 for(
int ivcd = 0; ivcd < NVCD2; ++ivcd){
717 buf_xm[
IDX2(Nin5bd, ivcd + NVCD2 * is,
iyzt)] = vt[ivcd];
725 if (do_comm[1] > 0) {
727 int Nxzt = Nx * Nz * Nt;
729 #pragma acc parallel async \
730 num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
734 #pragma acc loop gang worker vector
735 for (
int ixzt = 0; ixzt < Nxzt_pad; ++ixzt) {
740 int site =
ix + Nx * (
iy + Ny *
izt);
742 for (
int is = 0; is < Ns; ++is) {
744 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
745 wt[ivcd] = wp[
IDX2(Nin5, ivcd +
NVCD * is, site)];
748 for(
int ivcd = 0; ivcd < NVCD2; ++ivcd){
749 buf_yp[
IDX2(Nin5bd, ivcd + NVCD2 * is, ixzt)] =
bc2 * vt[ivcd];
754 site =
ix + Nx * (
iy + Ny *
izt);
757 for (
int is = 0; is < Ns; ++is) {
759 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
760 wt[ivcd] = wp[
IDX2(Nin5, ivcd +
NVCD * is, site)];
763 for(
int ivcd = 0; ivcd < NVCD2; ++ivcd){
764 buf_ym[
IDX2(Nin5bd, ivcd + NVCD2 * is, ixzt)] = vt[ivcd];
772 if (do_comm[2] > 0) {
775 int Nxyt = Nx * Ny * Nt;
777 #pragma acc parallel async \
778 num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
782 #pragma acc loop gang worker vector
783 for (
int ixyt = 0; ixyt < Nxyt_pad; ++ixyt) {
786 int ixy = ixyt % Nxy;
788 int site =
ixy + Nxy * (
iz + Nz *
it);
790 for (
int is = 0; is < Ns; ++is) {
792 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
793 wt[ivcd] = wp[
IDX2(Nin5, ivcd +
NVCD * is, site)];
796 for(
int ivcd = 0; ivcd < NVCD2; ++ivcd){
797 buf_zp[
IDX2(Nin5bd, ivcd + NVCD2 * is, ixyt)] =
bc2 * vt[ivcd];
802 site =
ixy + Nxy * (
iz + Nz *
it);
805 for (
int is = 0; is < Ns; ++is) {
807 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
808 wt[ivcd] = wp[
IDX2(Nin5, ivcd +
NVCD * is, site)];
811 for(
int ivcd = 0; ivcd < NVCD2; ++ivcd){
812 buf_zm[
IDX2(Nin5bd, ivcd + NVCD2 * is, ixyt)] = vt[ivcd];
820 if (do_comm[3] > 0) {
822 int Nxyz = Nx * Ny * Nz;
824 #pragma acc parallel async \
825 num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
829 #pragma acc loop gang worker vector
833 int site =
ixyz + Nxyz *
it;
835 for (
int is = 0; is < Ns; ++is) {
837 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
838 wt[ivcd] = wp[
IDX2(Nin5, ivcd +
NVCD * is, site)];
841 for(
int ivcd = 0; ivcd < NVCD2; ++ivcd){
842 buf_tp[
IDX2(Nin5bd, ivcd + NVCD2 * is,
ixyz)] =
bc2 * vt[ivcd];
850 for (
int is = 0; is < Ns; ++is) {
852 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
853 wt[ivcd] = wp[
IDX2(Nin5, ivcd +
NVCD * is, site)];
856 for(
int ivcd = 0; ivcd < NVCD2; ++ivcd){
857 buf_tm[
IDX2(Nin5bd, ivcd + NVCD2 * is,
ixyz)] = vt[ivcd];
870 #pragma acc update async host (buf_xp[0:size_bx])
871 #pragma acc update async host (buf_xm[0:size_bx])
874 #pragma acc update async host (buf_yp[0:size_by])
875 #pragma acc update async host (buf_ym[0:size_by])
878 #pragma acc update async host (buf_zp[0:size_bz])
879 #pragma acc update async host (buf_zm[0:size_bz])
882 #pragma acc update async host (buf_tp[0:size_bt])
883 #pragma acc update async host (buf_tm[0:size_bt])
897 int Ns,
int *bc,
int *Nsize,
int *do_comm)
903 int Nst = Nx * Ny * Nz * Nt;
906 int Nin5 =
NVCD * Ns;
907 int Nin5bd = (
NVCD/2) * Ns;
909 int size = Nin5 * Nst_pad;
910 int size_u =
NDF * Nst_pad * 4;
911 int size_bx = Nin5bd *
CEIL_NWP(Ny * Nz * Nt);
912 int size_by = Nin5bd *
CEIL_NWP(Nx * Nz * Nt);
913 int size_bz = Nin5bd *
CEIL_NWP(Nx * Ny * Nt);
914 int size_bt = Nin5bd *
CEIL_NWP(Nx * Ny * Nz);
917 #pragma acc update async device (buf_xp[0:size_bx])
918 #pragma acc update async device (buf_xm[0:size_bx])
921 #pragma acc update async device (buf_yp[0:size_by])
922 #pragma acc update async device (buf_ym[0:size_by])
925 #pragma acc update async device (buf_zp[0:size_bz])
926 #pragma acc update async device (buf_zm[0:size_bz])
929 #pragma acc update async device (buf_tp[0:size_bt])
930 #pragma acc update async device (buf_tm[0:size_bt])
935 #pragma acc data present(buf_xp[0:size_bx], buf_xm[0:size_bx], \
936 buf_yp[0:size_by], buf_ym[0:size_by], \
937 buf_zp[0:size_bz], buf_zm[0:size_bz], \
938 buf_tp[0:size_bt], buf_tm[0:size_bt], \
939 vp[0:size], up[0:size_u]) \
940 copyin(Nst, Nst_pad, Nx, Ny, Nz, Nt, Nin5, Nin5bd, Ns, \
941 bc[0:NDIM], do_comm[0:4])
944 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
947 int Nxyz = Nx * Ny * Nz;
949 #pragma acc loop gang worker vector
950 for (
int site = 0; site < Nst_pad; ++site) {
954 int iyzt = site / Nx;
955 int ixy = site % Nxy;
957 int izt = site / Nxy;
960 int ixyz = site % Nxyz;
964 for(
int is = 0; is < Ns; ++is){
968 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
975 if (do_comm[
idir] > 0) {
981 for(
int ivcd = 0; ivcd < NVCD2; ++ivcd){
982 wt[ivcd] = buf_xp[
IDX2(Nin5bd, ivcd + NVCD2 * is,
iyzt)];
991 for(
int ivcd = 0; ivcd < NVCD2; ++ivcd){
992 wt[ivcd] =
bc2 * buf_xm[
IDX2(Nin5bd, ivcd + NVCD2 * is,
iyzt)];
1000 if (do_comm[
idir] > 0) {
1001 int ixzt =
ix + Nx *
izt;
1007 for(
int ivcd = 0; ivcd < NVCD2; ++ivcd){
1008 wt[ivcd] = buf_yp[
IDX2(Nin5bd, ivcd + NVCD2 * is, ixzt)];
1017 for(
int ivcd = 0; ivcd < NVCD2; ++ivcd){
1018 wt[ivcd] =
bc2 * buf_ym[
IDX2(Nin5bd, ivcd + NVCD2 * is, ixzt)];
1026 if (do_comm[
idir] > 0) {
1027 int ixyt =
ixy + Nxy *
it;
1032 for(
int ivcd = 0; ivcd < NVCD2; ++ivcd){
1033 wt[ivcd] = buf_zp[
IDX2(Nin5bd, ivcd + NVCD2 * is, ixyt)];
1042 for(
int ivcd = 0; ivcd < NVCD2; ++ivcd){
1043 wt[ivcd] =
bc2 * buf_zm[
IDX2(Nin5bd, ivcd + NVCD2 * is, ixyt)];
1051 if (do_comm[
idir] > 0) {
1056 for(
int ivcd = 0; ivcd < NVCD2; ++ivcd){
1057 wt[ivcd] = buf_tp[
IDX2(Nin5bd, ivcd + NVCD2 * is,
ixyz)];
1066 for(
int ivcd = 0; ivcd < NVCD2; ++ivcd){
1067 wt[ivcd] =
bc2 * buf_tm[
IDX2(Nin5bd, ivcd + NVCD2 * is,
ixyz)];
1075 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
1076 vp[
IDX2(Nin5, ivcd +
NVCD * is, site)] += vL[ivcd];
void mult_domainwall_5din_mult_gm5R_dirac(real_t *RESTRICT vp, real_t *RESTRICT wp, int Ns, int *Nsize)
void mult_wilson_yp2(double *RESTRICT v2, double *RESTRICT u, double *RESTRICT buf, int *Nsize, int *bc, int Nc)
void mult_domainwall_5din_5dir_dirac(real_t *RESTRICT vp, real_t *RESTRICT yp, real_t *RESTRICT wp, real_t mq, real_t M0, int Ns, real_t *b, real_t *c, real_t alpha, int *Nsize)
void mult_wilson_xpb(double *RESTRICT v2, double *RESTRICT u, double *RESTRICT v1, int *Nsize, int *bc, int Nc)
void mult_wilson_xm2(double *RESTRICT v2, double *RESTRICT buf, int *Nsize, int *bc, int Nc)
void mult_wilson_yp1(double *RESTRICT buf, double *RESTRICT v1, int *Nsize, int *bc, int Nc)
void mult_domainwall_5din_mult_gm5_dirac(real_t *RESTRICT vp, real_t *RESTRICT wp, int Ns, int *Nsize)
void mult_domainwall_5din_hop2_dirac(real_t *RESTRICT vp, real_t *RESTRICT up, real_t *RESTRICT wp, real_t *RESTRICT buf_xp, real_t *RESTRICT buf_xm, real_t *RESTRICT buf_yp, real_t *RESTRICT buf_ym, real_t *RESTRICT buf_zp, real_t *RESTRICT buf_zm, real_t *RESTRICT buf_tp, real_t *RESTRICT buf_tm, int Ns, int *bc, int *Nsize, int *do_comm)
void mult_wilson_zp1(double *RESTRICT buf, double *RESTRICT v1, int *Nsize, int *bc, int Nc)
void mult_domainwall_5din_5dirdag_dirac(real_t *RESTRICT vp, real_t *RESTRICT yp, real_t *RESTRICT wp, real_t mq, real_t M0, int Ns, real_t *b, real_t *c, real_t alpha, int *Nsize)
void mult_wilson_tp2_dirac(double *RESTRICT v2, double *RESTRICT u, double *RESTRICT buf, int *Nsize, int *bc, int Nc)
void mult_wilson_tm2_dirac(double *RESTRICT v2, double *RESTRICT buf, int *Nsize, int *bc, int Nc)
void mult_domainwall_5din_hopb_dirac_5d(real_t *RESTRICT vp, real_t *RESTRICT up, real_t *RESTRICT wp, int Ns, int *bc, int *Nsize, int *do_comm, int flag)
void mult_wilson_tmb_dirac(double *RESTRICT v2, double *RESTRICT u, double *RESTRICT v1, int *Nsize, int *bc, int Nc)
void mult_wilson_xmb(double *RESTRICT v2, double *RESTRICT u, double *RESTRICT v1, int *Nsize, int *bc, int Nc)
void mult_wilson_xm1(double *RESTRICT buf, double *RESTRICT u, double *RESTRICT v1, int *Nsize, int *bc, int Nc)
void mult_wilson_ym2(double *RESTRICT v2, double *RESTRICT buf, int *Nsize, int *bc, int Nc)
void mult_wilson_zpb(double *RESTRICT v2, double *RESTRICT u, double *RESTRICT v1, int *Nsize, int *bc, int Nc)
void mult_wilson_tpb_dirac(double *RESTRICT v2, double *RESTRICT u, double *RESTRICT v1, int *Nsize, int *bc, int Nc)
int idx(const int in, const int Nin, const int ist, const int leo, const int Nvol2, const int ex)
void mult_domainwall_5din_mult_R(real_t *RESTRICT vp, real_t *RESTRICT wp, int Ns, int *Nsize)
void mult_wilson_tm1_dirac(double *RESTRICT buf, double *RESTRICT u, double *RESTRICT v1, int *Nsize, int *bc, int Nc)
void mult_wilson_zmb(double *RESTRICT v2, double *RESTRICT u, double *RESTRICT v1, int *Nsize, int *bc, int Nc)
void mult_wilson_tp1_dirac(double *RESTRICT buf, double *RESTRICT v1, int *Nsize, int *bc, int Nc)
void mult_wilson_xp2(double *RESTRICT v2, double *RESTRICT u, double *RESTRICT buf, int *Nsize, int *bc, int Nc)
void mult_wilson_ypb(double *RESTRICT v2, double *RESTRICT u, double *RESTRICT v1, int *Nsize, int *bc, int Nc)
#define IDX2(nin, in, ist)
void mult_wilson_zm2(double *RESTRICT v2, double *RESTRICT buf, int *Nsize, int *bc, int Nc)
void mult_wilson_ymb(double *RESTRICT v2, double *RESTRICT u, double *RESTRICT v1, int *Nsize, int *bc, int Nc)
void load_u(real_t *ut, real_t *up, int site)
void mult_wilson_zp2(double *RESTRICT v2, double *RESTRICT u, double *RESTRICT buf, int *Nsize, int *bc, int Nc)
void mult_wilson_ym1(double *RESTRICT buf, double *RESTRICT u, double *RESTRICT v1, int *Nsize, int *bc, int Nc)
void mult_domainwall_5din_hop1_dirac(real_t *RESTRICT buf_xp, real_t *RESTRICT buf_xm, real_t *RESTRICT buf_yp, real_t *RESTRICT buf_ym, real_t *RESTRICT buf_zp, real_t *RESTRICT buf_zm, real_t *RESTRICT buf_tp, real_t *RESTRICT buf_tm, real_t *RESTRICT up, real_t *RESTRICT wp, int Ns, int *bc, int *Nsize, int *do_comm)
void mult_wilson_zm1(double *RESTRICT buf, double *RESTRICT u, double *RESTRICT v1, int *Nsize, int *bc, int Nc)
void mult_wilson_xp1(double *RESTRICT buf, double *RESTRICT v1, int *Nsize, int *bc, int Nc)