10 #define MULT_UV_R(u0,u1,u2,u3,u4,u5,v0,v1,v2,v3,v4,v5) (u0*v0-u1*v1 + u2*v2-u3*v3 + u4*v4-u5*v5)
11 #define MULT_UV_I(u0,u1,u2,u3,u4,u5,v0,v1,v2,v3,v4,v5) (u0*v1+u1*v0 + u2*v3+u3*v2 + u4*v5+u5*v4)
15 int *Nsize,
int *bc,
int Nc)
20 int Nyzt = Nsize[1] * Nsize[2] * Nsize[3];
27 #pragma acc data present(v1[0:size], buf[0:size_b]), copyin(bc2, Nx, Nyzt)
28 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
31 #pragma acc loop gang worker vector
38 for(
int id = 0;
id <
ND; ++id){
39 for(
int ic = 0; ic <
NC; ++ic){
48 for(
int ic = 0; ic <
NC; ++ic){
66 int *Nsize,
int *bc,
int Nc)
71 int Nyzt = Nsize[1] * Nsize[2] * Nsize[3];
78 #pragma acc data present(v2[0:size], buf[0:size_b], u[0:size_u]), \
80 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
83 #pragma acc loop gang worker vector
91 for(
int ivc = 0; ivc <
NVC; ++ivc){
96 for(
int ic = 0; ic <
NC; ++ic){
98 for(
int ic2 = 0; ic2 <
NC; ++ic2){
99 ut[2*ic2 ] = u[
IDX2_G_R(ic2, ic, ist)];
100 ut[2*ic2+1] = u[
IDX2_G_I(ic2, ic, ist)];
103 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
105 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
107 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
109 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
132 int *Nsize,
int *bc,
int Nc)
137 int Nyzt = Nsize[1] * Nsize[2] * Nsize[3];
143 #pragma acc data present(v2[0:size], v1[0:size], u[0:size_u]), \
144 copyin(bc[0:4], Nx, Nyzt, Nst)
145 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
147 for(
int ist = 0; ist < Nst; ++ist){
150 int nei = ((
ix+1) % Nx) + Nx *
iyzt;
152 if(
ix == Nx-1)
bc2 = bc[0];
157 for(
int id = 0;
id <
ND; ++id){
158 for(
int ic = 0; ic <
NC; ++ic){
166 for(
int ic = 0; ic <
NC; ++ic){
175 for(
int ic = 0; ic <
NC; ++ic){
177 for(
int ic2 = 0; ic2 <
NC; ++ic2){
178 ut[2*ic2 ] = u[
IDX2_G_R(ic2, ic, ist)];
179 ut[2*ic2+1] = u[
IDX2_G_I(ic2, ic, ist)];
182 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
184 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
186 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
188 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
211 int *Nsize,
int *bc,
int Nc)
216 int Nyzt = Nsize[1] * Nsize[2] * Nsize[3];
223 #pragma acc data present(v1[0:size], buf[0:size_b], u[0:size_u]), \
225 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
228 #pragma acc loop gang worker vector
236 for(
int id = 0;
id <
ND; ++id){
237 for(
int ic = 0; ic <
NC; ++ic){
243 for(
int ic = 0; ic <
NC; ++ic){
246 vt1[icr] = vt[icr +
ID1] + vt[ici +
ID4];
247 vt1[ici] = vt[ici +
ID1] - vt[icr +
ID4];
248 vt2[icr] = vt[icr +
ID2] + vt[ici +
ID3];
249 vt2[ici] = vt[ici +
ID2] - vt[icr +
ID3];
255 for(
int ic = 0; ic <
NC; ++ic){
259 for(
int ic2 = 0; ic2 <
NC; ++ic2){
260 ut[2*ic2 ] = u[
IDX2_G_R(ic, ic2, ist)];
261 ut[2*ic2+1] = - u[
IDX2_G_I(ic, ic2, ist)];
264 wt1[icr] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
266 wt1[ici] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
268 wt2[icr] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
270 wt2[ici] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
283 int *Nsize,
int *bc,
int Nc)
288 int Nyzt = Nsize[1] * Nsize[2] * Nsize[3];
296 #pragma acc data present(v2[0:size], buf[0:size_b]), copyin(bc2, Nx, Nyzt)
297 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
300 #pragma acc loop gang worker vector
307 for(
int ic = 0; ic <
NC; ++ic){
309 int ici = 2 * ic + 1;
336 int *Nsize,
int *bc,
int Nc)
341 int Nyzt = Nsize[1] * Nsize[2] * Nsize[3];
347 #pragma acc data present(v2[0:size], v1[0:size], u[0:size_u]), \
348 copyin(bc[0:4], Nx, Nyzt, Nst)
349 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
351 for(
int ist = 0; ist < Nst; ++ist){
354 int nei =
ix-1 + Nx *
iyzt;
355 if(
ix == 0) nei = Nx-1 + Nx *
iyzt;
357 if(
ix == 0)
bc2 = bc[0];
362 for(
int id = 0;
id <
ND; ++id){
363 for(
int ic = 0; ic <
NC; ++ic){
371 for(
int ic = 0; ic <
NC; ++ic){
374 vt1[icr] = vt[icr +
ID1] + vt[ici +
ID4];
375 vt1[ici] = vt[ici +
ID1] - vt[icr +
ID4];
376 vt2[icr] = vt[icr +
ID2] + vt[ici +
ID3];
377 vt2[ici] = vt[ici +
ID2] - vt[icr +
ID3];
380 for(
int ic = 0; ic <
NC; ++ic){
382 for(
int ic2 = 0; ic2 <
NC; ++ic2){
383 ut[2*ic2 ] = u[
IDX2_G_R(ic, ic2, nei)];
384 ut[2*ic2+1] = - u[
IDX2_G_I(ic, ic2, nei)];
387 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
389 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
391 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
393 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
415 int *Nsize,
int *bc,
int Nc)
419 int Nzt = Nsize[2] * Nsize[3];
426 #pragma acc data present(v1[0:size], buf[0:size_b]), \
427 copyin(bc2, Nx, Ny, Nzt)
428 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
431 #pragma acc loop gang worker vector collapse(2)
433 for(
int ix = 0;
ix < Nx; ++
ix){
435 int ist =
ix + Nx * (
iy + Ny *
izt);
436 int ixzt =
ix + Nx *
izt;
440 for(
int id = 0;
id <
ND; ++id){
441 for(
int ic = 0; ic <
NC; ++ic){
450 for(
int ic = 0; ic <
NC; ++ic){
469 int *Nsize,
int *bc,
int Nc)
475 int Nzt = Nsize[2] * Nsize[3];
476 int Nst = Nx * Ny * Nzt;
482 #pragma acc data present(v2[0:size], buf[0:size_b], u[0:size_u]), \
483 copyin(Nx, Ny, Nzt, Nst, idir)
484 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
487 #pragma acc loop gang worker vector collapse(2)
489 for(
int ix = 0;
ix < Nx; ++
ix){
491 int ist =
ix + Nx * (
iy + Ny *
izt);
492 int ixzt =
ix + Nx *
izt;
497 for(
int ivc = 0; ivc <
NVC; ++ivc){
498 vt1[ivc] = buf[ivc + 2 *
NVC * ixzt];
499 vt2[ivc] = buf[ivc +
NVC + 2 *
NVC * ixzt];
502 for(
int ic = 0; ic <
NC; ++ic){
504 for(
int ic2 = 0; ic2 <
NC; ++ic2){
505 ut[2*ic2 ] = u[
IDX2_G_R(ic2, ic, ist)];
506 ut[2*ic2+1] = u[
IDX2_G_I(ic2, ic, ist)];
509 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
511 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
513 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
515 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
539 int *Nsize,
int *bc,
int Nc)
545 int Nzt = Nsize[2] * Nsize[3];
546 int Nst = Nx * Ny * Nzt;
551 #pragma acc data present(v2[0:size], v1[0:size], u[0:size_u]), \
552 copyin(bc[0:4], idir, Nx, Ny, Nzt, Nst)
553 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
556 #pragma acc loop gang worker vector
557 for(
int ist = 0; ist < Nst; ++ist){
559 int iy = (ist/Nx) % Ny;
560 int izt = ist/(Nx*Ny);
561 int iy2 = (
iy+1) % Ny;
562 int nei =
ix + Nx * (iy2 + Ny *
izt);
570 for(
int id = 0;
id <
ND; ++id){
571 for(
int ic = 0; ic <
NC; ++ic){
579 for(
int ic = 0; ic <
NC; ++ic){
588 for(
int ic = 0; ic <
NC; ++ic){
590 for(
int ic2 = 0; ic2 <
NC; ++ic2){
591 ut[2*ic2 ] = u[
IDX2_G_R(ic2, ic, ist)];
592 ut[2*ic2+1] = u[
IDX2_G_I(ic2, ic, ist)];
595 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
597 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
599 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
601 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
623 int *Nsize,
int *bc,
int Nc)
629 int Nzt = Nsize[2] * Nsize[3];
630 int Nst = Nx * Ny * Nzt;
636 #pragma acc data present(v1[0:size], buf[0:size_b], u[0:size_u]), \
637 copyin(Nx, Ny, Nzt, Nst, idir)
638 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
641 #pragma acc loop gang worker vector collapse(2)
643 for(
int ix = 0;
ix < Nx; ++
ix){
645 int ist =
ix + Nx * (
iy + Ny*
izt);
646 int ixzt =
ix + Nx *
izt;
650 for(
int id = 0;
id <
ND; ++id){
651 for(
int ic = 0; ic <
NC; ++ic){
657 for(
int ic = 0; ic <
NC; ++ic){
660 vt1[icr] = vt[icr +
ID1] - vt[icr +
ID4];
661 vt1[ici] = vt[ici +
ID1] - vt[ici +
ID4];
662 vt2[icr] = vt[icr +
ID2] + vt[icr +
ID3];
663 vt2[ici] = vt[ici +
ID2] + vt[ici +
ID3];
669 for(
int ic = 0; ic <
NC; ++ic){
673 for(
int ic2 = 0; ic2 <
NC; ++ic2){
674 ut[2*ic2 ] = u[
IDX2_G_R(ic, ic2, ist)];
675 ut[2*ic2+1] = - u[
IDX2_G_I(ic, ic2, ist)];
678 wt1[icr] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
680 wt1[ici] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
682 wt2[icr] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
684 wt2[ici] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
697 int *Nsize,
int *bc,
int Nc)
703 int Nzt = Nsize[2] * Nsize[3];
704 int Nst = Nx * Ny * Nzt;
711 #pragma acc data present(v2[0:size], buf[0:size_b]), \
712 copyin(bc2, Nx, Ny, Nzt)
713 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
716 #pragma acc loop gang worker vector collapse(2)
718 for(
int ix = 0;
ix < Nx; ++
ix){
720 int ist =
ix + Nx*(
iy + Ny*
izt);
721 int ixzt =
ix + Nx *
izt;
725 for(
int ic = 0; ic <
NC; ++ic){
727 int ici = 2 * ic + 1;
729 wt1[0] =
bc2 * buf[icr + 2 *
NVC * ixzt];
730 wt1[1] =
bc2 * buf[ici + 2 *
NVC * ixzt];
731 wt2[0] =
bc2 * buf[icr +
NVC + 2 *
NVC * ixzt];
732 wt2[1] =
bc2 * buf[ici +
NVC + 2 *
NVC * ixzt];
754 int *Nsize,
int *bc,
int Nc)
760 int Nzt = Nsize[2] * Nsize[3];
761 int Nst = Nx * Ny * Nzt;
766 #pragma acc data present(v2[0:size], v1[0:size], u[0:size_u]), \
767 copyin(bc[0:4], idir, Nx, Ny, Nzt, Nst)
768 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
771 #pragma acc loop gang worker vector
772 for(
int ist = 0; ist < Nst; ++ist){
774 int iy = (ist/Nx) % Ny;
775 int izt = ist/(Nx*Ny);
776 int iy2 = (
iy-1+Ny) % Ny;
777 int nei =
ix + Nx * (iy2 + Ny *
izt);
785 for(
int id = 0;
id <
ND; ++id){
786 for(
int ic = 0; ic <
NC; ++ic){
794 for(
int ic = 0; ic <
NC; ++ic){
797 vt1[icr] = vt[icr +
ID1] - vt[icr +
ID4];
798 vt1[ici] = vt[ici +
ID1] - vt[ici +
ID4];
799 vt2[icr] = vt[icr +
ID2] + vt[icr +
ID3];
800 vt2[ici] = vt[ici +
ID2] + vt[ici +
ID3];
803 for(
int ic = 0; ic <
NC; ++ic){
805 for(
int ic2 = 0; ic2 <
NC; ++ic2){
806 ut[2*ic2 ] = u[
IDX2_G_R(ic, ic2, nei)];
807 ut[2*ic2+1] = - u[
IDX2_G_I(ic, ic2, nei)];
810 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
812 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
814 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
816 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
837 int *Nsize,
int *bc,
int Nc)
841 int Nxy = Nsize[0] * Nsize[1];
850 #pragma acc data present(v1[0:size], buf[0:size_b]), \
851 copyin(bc2, Nxy, Nz, Nt)
852 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
855 #pragma acc loop gang worker vector collapse(2)
856 for(
int it = 0;
it < Nt; ++
it){
859 int ist =
ixy + Nxy * (
iz + Nz *
it);
860 int ixyt =
ixy + Nxy *
it;
864 for(
int id = 0;
id <
ND; ++id){
865 for(
int ic = 0; ic <
NC; ++ic){
874 for(
int ic = 0; ic <
NC; ++ic){
893 int *Nsize,
int *bc,
int Nc)
897 int Nxy = Nsize[0] * Nsize[1];
900 int Nst = Nxy * Nz * Nt;
906 #pragma acc data present(v2[0:size], buf[0:size_b], u[0:size_u]), \
907 copyin(Nxy, Nz, Nt, Nst, idir)
908 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
911 #pragma acc loop gang worker vector collapse(2)
912 for(
int it = 0;
it < Nt; ++
it){
915 int ist =
ixy + Nxy * (
iz + Nz *
it);
916 int ixyt =
ixy + Nxy *
it;
922 for(
int ivc = 0; ivc <
NVC; ++ivc){
923 vt1[ivc] = buf[ivc + 2 *
NVC * ixyt];
924 vt2[ivc] = buf[ivc +
NVC + 2 *
NVC * ixyt];
927 for(
int ic = 0; ic <
NC; ++ic){
929 for(
int ic2 = 0; ic2 <
NC; ++ic2){
930 ut[2*ic2 ] = u[
IDX2_G_R(ic2, ic, ist)];
931 ut[2*ic2+1] = u[
IDX2_G_I(ic2, ic, ist)];
934 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
936 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
938 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
940 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
964 int *Nsize,
int *bc,
int Nc)
968 int Nxy = Nsize[0] * Nsize[1];
971 int Nst = Nxy * Nz * Nt;
976 #pragma acc data present(v2[0:size], v1[0:size], u[0:size_u]), \
977 copyin(bc[0:4], idir, Nxy, Nz, Nt, Nst)
978 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
981 #pragma acc loop gang worker vector
982 for(
int ist = 0; ist < Nst; ++ist){
984 int iz = (ist/Nxy) % Nz;
985 int it = ist/(Nxy*Nz);
986 int iz2 = (
iz+1) % Nz;
987 int nei =
ixy + Nxy * (iz2 + Nz *
it);
994 for(
int id = 0;
id <
ND; ++id){
995 for(
int ic = 0; ic <
NC; ++ic){
1003 for(
int ic = 0; ic <
NC; ++ic){
1012 for(
int ic = 0; ic <
NC; ++ic){
1014 for(
int ic2 = 0; ic2 <
NC; ++ic2){
1015 ut[2*ic2 ] = u[
IDX2_G_R(ic2, ic, ist)];
1016 ut[2*ic2+1] = u[
IDX2_G_I(ic2, ic, ist)];
1019 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1021 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1023 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1025 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1047 int *Nsize,
int *bc,
int Nc)
1051 int Nxy = Nsize[0] * Nsize[1];
1054 int Nst = Nxy * Nz * Nt;
1060 #pragma acc data present(v1[0:size], buf[0:size_b], u[0:size_u]), \
1061 copyin(Nxy, Nz, Nt, Nst, idir)
1062 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
1065 #pragma acc loop gang worker vector collapse(2)
1066 for(
int it = 0;
it < Nt; ++
it){
1069 int ist =
ixy + Nxy * (
iz + Nz *
it);
1070 int ixyt =
ixy + Nxy *
it;
1074 for(
int id = 0;
id <
ND; ++id){
1075 for(
int ic = 0; ic <
NC; ++ic){
1081 for(
int ic = 0; ic <
NC; ++ic){
1084 vt1[icr] = vt[icr +
ID1] + vt[ici +
ID3];
1085 vt1[ici] = vt[ici +
ID1] - vt[icr +
ID3];
1086 vt2[icr] = vt[icr +
ID2] - vt[ici +
ID4];
1087 vt2[ici] = vt[ici +
ID2] + vt[icr +
ID4];
1093 for(
int ic = 0; ic <
NC; ++ic){
1097 for(
int ic2 = 0; ic2 <
NC; ++ic2){
1098 ut[2*ic2 ] = u[
IDX2_G_R(ic, ic2, ist)];
1099 ut[2*ic2+1] = - u[
IDX2_G_I(ic, ic2, ist)];
1102 wt1[icr] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1104 wt1[ici] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1106 wt2[icr] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1108 wt2[ici] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1122 int *Nsize,
int *bc,
int Nc)
1126 int Nxy = Nsize[0] * Nsize[1];
1129 int Nst = Nxy * Nz * Nt;
1136 #pragma acc data present(v2[0:size], buf[0:size_b]), \
1137 copyin(bc2, Nxy, Nz, Nt)
1138 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
1141 #pragma acc loop gang worker vector collapse(2)
1142 for(
int it = 0;
it < Nt; ++
it){
1145 int ist =
ixy + Nxy * (
iz + Nz *
it);
1146 int ixyt =
ixy + Nxy *
it;
1150 for(
int ic = 0; ic <
NC; ++ic){
1152 int ici = 2 * ic + 1;
1154 wt1[0] =
bc2 * buf[icr + 2 *
NVC * ixyt];
1155 wt1[1] =
bc2 * buf[ici + 2 *
NVC * ixyt];
1156 wt2[0] =
bc2 * buf[icr +
NVC + 2 *
NVC * ixyt];
1157 wt2[1] =
bc2 * buf[ici +
NVC + 2 *
NVC * ixyt];
1179 int *Nsize,
int *bc,
int Nc)
1183 int Nxy = Nsize[0] * Nsize[1];
1186 int Nst = Nxy * Nz * Nt;
1191 #pragma acc data present(v2[0:size], v1[0:size], u[0:size_u]), \
1192 copyin(bc[0:4], idir, Nxy, Nz, Nt, Nst)
1193 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
1196 #pragma acc loop gang worker vector
1197 for(
int ist = 0; ist < Nst; ++ist){
1198 int ixy = ist % Nxy;
1199 int iz = (ist/Nxy) % Nz;
1200 int it = ist/(Nxy*Nz);
1201 int iz2 = (
iz-1+Nz) % Nz;
1202 int nei =
ixy + Nxy * (iz2 + Nz *
it);
1210 for(
int id = 0;
id <
ND; ++id){
1211 for(
int ic = 0; ic <
NC; ++ic){
1219 for(
int ic = 0; ic <
NC; ++ic){
1222 vt1[icr] = vt[icr +
ID1] + vt[ici +
ID3];
1223 vt1[ici] = vt[ici +
ID1] - vt[icr +
ID3];
1224 vt2[icr] = vt[icr +
ID2] - vt[ici +
ID4];
1225 vt2[ici] = vt[ici +
ID2] + vt[icr +
ID4];
1228 for(
int ic = 0; ic <
NC; ++ic){
1230 for(
int ic2 = 0; ic2 <
NC; ++ic2){
1231 ut[2*ic2 ] = u[
IDX2_G_R(ic, ic2, nei)];
1232 ut[2*ic2+1] = - u[
IDX2_G_I(ic, ic2, nei)];
1235 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1237 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1239 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1241 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1262 int *Nsize,
int *bc,
int Nc)
1266 int Nxyz = Nsize[0] * Nsize[1] * Nsize[2];
1274 #pragma acc data present(v1[0:size], buf[0:size_b]), copyin(bc2, Nxyz)
1275 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
1278 #pragma acc loop gang worker vector
1281 int ist =
ixyz + Nxyz *
it;
1285 for(
int id = 2;
id <
ND; ++id){
1286 for(
int ic = 0; ic <
NC; ++ic){
1295 for(
int ic = 0; ic <
NC; ++ic){
1313 int *Nsize,
int *bc,
int Nc)
1317 int Nxyz = Nsize[0] * Nsize[1] * Nsize[2];
1319 int Nst = Nxyz * Nt;
1325 #pragma acc data present(v2[0:size], buf[0:size_b], u[0:size_u]), \
1326 copyin(Nxyz, Nst, idir)
1327 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
1330 #pragma acc loop gang worker vector
1333 int ist =
ixyz + Nxyz *
it;
1338 for(
int ivc = 0; ivc <
NVC; ++ivc){
1343 for(
int ic = 0; ic <
NC; ++ic){
1345 for(
int ic2 = 0; ic2 <
NC; ++ic2){
1346 ut[2*ic2 ] = u[
IDX2_G_R(ic2, ic, ist)];
1347 ut[2*ic2+1] = u[
IDX2_G_I(ic2, ic, ist)];
1350 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1352 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1354 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1356 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1375 int *Nsize,
int *bc,
int Nc)
1379 int Nxyz = Nsize[0] * Nsize[1] * Nsize[2];
1381 int Nst = Nxyz * Nt;
1386 #pragma acc data present(v2[0:size], v1[0:size], u[0:size_u]), \
1387 copyin(bc[0:4], idir, Nxyz, Nt, Nst)
1388 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
1391 #pragma acc loop gang worker vector
1392 for(
int ist = 0; ist < Nst; ++ist){
1393 int ixyz = ist % Nxyz;
1395 int it2 = (
it+1) % Nt;
1396 int nei =
ixyz + Nxyz * it2;
1403 for(
int id = 2;
id <
ND; ++id){
1404 for(
int ic = 0; ic <
NC; ++ic){
1412 for(
int ic = 0; ic <
NC; ++ic){
1421 for(
int ic = 0; ic <
NC; ++ic){
1423 for(
int ic2 = 0; ic2 <
NC; ++ic2){
1424 ut[2*ic2 ] = u[
IDX2_G_R(ic2, ic, ist)];
1425 ut[2*ic2+1] = u[
IDX2_G_I(ic2, ic, ist)];
1428 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1430 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1432 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1434 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1452 int *Nsize,
int *bc,
int Nc)
1456 int Nxyz = Nsize[0] * Nsize[1] * Nsize[2];
1458 int Nst = Nxyz * Nt;
1464 #pragma acc data present(v1[0:size], buf[0:size_b], u[0:size_u]), \
1465 copyin(Nxyz, Nt, Nst, idir)
1466 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
1469 #pragma acc loop gang worker vector
1472 int ist =
ixyz + Nxyz *
it;
1476 for(
int id = 0;
id <
ND2; ++id){
1477 for(
int ic = 0; ic <
NC; ++ic){
1483 for(
int ic = 0; ic <
NC; ++ic){
1486 vt1[icr] = 2.0 * vt[icr +
ID1];
1487 vt1[ici] = 2.0 * vt[ici +
ID1];
1488 vt2[icr] = 2.0 * vt[icr +
ID2];
1489 vt2[ici] = 2.0 * vt[ici +
ID2];
1495 for(
int ic = 0; ic <
NC; ++ic){
1499 for(
int ic2 = 0; ic2 <
NC; ++ic2){
1500 ut[2*ic2 ] = u[
IDX2_G_R(ic, ic2, ist)];
1501 ut[2*ic2+1] = - u[
IDX2_G_I(ic, ic2, ist)];
1504 wt1[icr] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1506 wt1[ici] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1508 wt2[icr] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1510 wt2[ici] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1523 int *Nsize,
int *bc,
int Nc)
1527 int Nxyz = Nsize[0] * Nsize[1] * Nsize[2];
1529 int Nst = Nxyz * Nt;
1536 #pragma acc data present(v2[0:size], buf[0:size_b]), copyin(bc2, Nxyz)
1537 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
1540 #pragma acc loop gang worker vector
1543 int ist =
ixyz + Nxyz *
it;
1547 for(
int ic = 0; ic <
NC; ++ic){
1549 int ici = 2 * ic + 1;
1571 int *Nsize,
int *bc,
int Nc)
1575 int Nxyz = Nsize[0] * Nsize[1] * Nsize[2];
1577 int Nst = Nxyz * Nt;
1582 #pragma acc data present(v2[0:size], v1[0:size], u[0:size_u]), \
1583 copyin(bc[0:4], idir, Nxyz, Nt, Nst)
1584 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
1587 #pragma acc loop gang worker vector
1588 for(
int ist = 0; ist < Nst; ++ist){
1589 int ixyz = ist % Nxyz;
1591 int it2 = (
it-1+Nt) % Nt;
1592 int nei =
ixyz + Nxyz * it2;
1600 for(
int id = 0;
id <
ND2; ++id){
1601 for(
int ic = 0; ic <
NC; ++ic){
1609 for(
int ic = 0; ic <
NC; ++ic){
1612 vt1[icr] = 2.0 * vt[icr +
ID1];
1613 vt1[ici] = 2.0 * vt[ici +
ID1];
1614 vt2[icr] = 2.0 * vt[icr +
ID2];
1615 vt2[ici] = 2.0 * vt[ici +
ID2];
1618 for(
int ic = 0; ic <
NC; ++ic){
1620 for(
int ic2 = 0; ic2 <
NC; ++ic2){
1621 ut[2*ic2 ] = u[
IDX2_G_R(ic, ic2, nei)];
1622 ut[2*ic2+1] = - u[
IDX2_G_I(ic, ic2, nei)];
1625 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1627 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1629 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1631 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1648 int *Nsize,
int *bc,
int Nc)
1652 int Nxyz = Nsize[0] * Nsize[1] * Nsize[2];
1660 #pragma acc data present(v1[0:size], buf[0:size_b]), copyin(bc2, Nxyz)
1661 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
1664 #pragma acc loop gang worker vector
1667 int ist =
ixyz + Nxyz *
it;
1671 for(
int id = 0;
id <
ND; ++id){
1672 for(
int ic = 0; ic <
NC; ++ic){
1681 for(
int ivc = 0; ivc <
NVC; ++ivc){
1695 int *Nsize,
int *bc,
int Nc)
1699 int Nxyz = Nsize[0] * Nsize[1] * Nsize[2];
1701 int Nst = Nxyz * Nt;
1707 #pragma acc data present(v2[0:size], buf[0:size_b], u[0:size_u]), \
1708 copyin(Nxyz, Nst, idir)
1709 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
1712 #pragma acc loop gang worker vector
1715 int ist =
ixyz + Nxyz *
it;
1720 for(
int ivc = 0; ivc <
NVC; ++ivc){
1725 for(
int ic = 0; ic <
NC; ++ic){
1727 for(
int ic2 = 0; ic2 <
NC; ++ic2){
1728 ut[2*ic2 ] = u[
IDX2_G_R(ic2, ic, ist)];
1729 ut[2*ic2+1] = u[
IDX2_G_I(ic2, ic, ist)];
1732 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1734 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1736 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1738 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1761 int *Nsize,
int *bc,
int Nc)
1765 int Nxyz = Nsize[0] * Nsize[1] * Nsize[2];
1767 int Nst = Nxyz * Nt;
1772 #pragma acc data present(v2[0:size], v1[0:size], u[0:size_u]), \
1773 copyin(bc[0:4], idir, Nxyz, Nt, Nst)
1774 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
1777 #pragma acc loop gang worker vector
1778 for(
int ist = 0; ist < Nst; ++ist){
1779 int ixyz = ist % Nxyz;
1781 int it2 = (
it+1) % Nt;
1782 int nei =
ixyz + Nxyz * it2;
1790 for(
int id = 0;
id <
ND; ++id){
1791 for(
int ic = 0; ic <
NC; ++ic){
1799 for(
int ivc = 0; ivc <
NVC; ++ivc){
1804 for(
int ic = 0; ic <
NC; ++ic){
1806 for(
int ic2 = 0; ic2 <
NC; ++ic2){
1807 ut[2*ic2 ] = u[
IDX2_G_R(ic2, ic, ist)];
1808 ut[2*ic2+1] = u[
IDX2_G_I(ic2, ic, ist)];
1811 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1813 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1815 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1817 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1839 int *Nsize,
int *bc,
int Nc)
1843 int Nxyz = Nsize[0] * Nsize[1] * Nsize[2];
1845 int Nst = Nxyz * Nt;
1851 #pragma acc data present(v1[0:size], buf[0:size_b], u[0:size_u]), \
1852 copyin(Nxyz, Nt, Nst, idir)
1853 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
1856 #pragma acc loop gang worker vector
1859 int ist =
ixyz + Nxyz *
it;
1863 for(
int id = 0;
id <
ND; ++id){
1864 for(
int ic = 0; ic <
NC; ++ic){
1870 for(
int ivc = 0; ivc <
NVC; ++ivc){
1871 vt1[ivc] = vt[ivc +
ID1] - vt[ivc +
ID3];
1872 vt2[ivc] = vt[ivc +
ID2] - vt[ivc +
ID4];
1878 for(
int ic = 0; ic <
NC; ++ic){
1882 for(
int ic2 = 0; ic2 <
NC; ++ic2){
1883 ut[2*ic2 ] = u[
IDX2_G_R(ic, ic2, ist)];
1884 ut[2*ic2+1] = - u[
IDX2_G_I(ic, ic2, ist)];
1887 wt1[icr] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1889 wt1[ici] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1891 wt2[icr] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1893 wt2[ici] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
1906 int *Nsize,
int *bc,
int Nc)
1910 int Nxyz = Nsize[0] * Nsize[1] * Nsize[2];
1912 int Nst = Nxyz * Nt;
1919 #pragma acc data present(v2[0:size], buf[0:size_b]), copyin(bc2, Nxyz)
1920 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
1923 #pragma acc loop gang worker vector
1926 int ist =
ixyz + Nxyz *
it;
1930 for(
int ic = 0; ic <
NC; ++ic){
1932 int ici = 2 * ic + 1;
1958 int *Nsize,
int *bc,
int Nc)
1962 int Nxyz = Nsize[0] * Nsize[1] * Nsize[2];
1964 int Nst = Nxyz * Nt;
1969 #pragma acc data present(v2[0:size], v1[0:size], u[0:size_u]), \
1970 copyin(bc[0:4], idir, Nxyz, Nt, Nst)
1971 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
1974 #pragma acc loop gang worker vector
1975 for(
int ist = 0; ist < Nst; ++ist){
1976 int ixyz = ist % Nxyz;
1978 int it2 = (
it-1+Nt) % Nt;
1979 int nei =
ixyz + Nxyz * it2;
1987 for(
int id = 0;
id <
ND; ++id){
1988 for(
int ic = 0; ic <
NC; ++ic){
1996 for(
int ivc = 0; ivc <
NVC; ++ivc){
1997 vt1[ivc] = vt[ivc +
ID1] - vt[ivc +
ID3];
1998 vt2[ivc] = vt[ivc +
ID2] - vt[ivc +
ID4];
2001 for(
int ic = 0; ic <
NC; ++ic){
2003 for(
int ic2 = 0; ic2 <
NC; ++ic2){
2004 ut[2*ic2 ] = u[
IDX2_G_R(ic, ic2, nei)];
2005 ut[2*ic2+1] = - u[
IDX2_G_I(ic, ic2, nei)];
2008 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
2010 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
2012 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
2014 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],