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)
16 int *Nsize,
int *bc,
int ieo,
int Nc)
24 int Nyzt = Ny * Nz * Nt;
31 #pragma acc data present(v1[0:size], buf[0:size_b]), \
32 copyin(ieo, bc2, Nx, Ny, Nz, Nt, Nyzt)
33 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
36 #pragma acc loop gang worker vector
43 int keo = (ieo +
iy +
iz +
it) % 2;
49 for(
int id = 0;
id <
ND; ++id){
50 for(
int ic = 0; ic <
NC; ++ic){
59 for(
int ic = 0; ic <
NC; ++ic){
79 int *Nsize,
int *bc,
int ieo,
int Nc)
87 int Nyzt = Ny * Nz * Nt;
94 #pragma acc data present(v2[0:size], buf[0:size_b], u[0:size_u]), \
95 copyin(ieo, Nx, Ny, Nz, Nt, Nyzt)
96 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
99 #pragma acc loop gang worker vector
106 int keo = (ieo +
iy +
iz +
it) % 2;
114 for(
int ivc = 0; ivc <
NVC; ++ivc){
115 vt1[ivc] = buf[ivc + 2 *
NVC * iyzt2];
116 vt2[ivc] = buf[ivc +
NVC + 2 *
NVC * iyzt2];
119 for(
int ic = 0; ic <
NC; ++ic){
121 for(
int ic2 = 0; ic2 <
NC; ++ic2){
122 ut[2*ic2 ] = u[
IDX2_G_R(ic2, ic, ist)];
123 ut[2*ic2+1] = u[
IDX2_G_I(ic2, ic, ist)];
126 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
128 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
130 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
132 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
157 int *Nsize,
int *bc,
int ieo,
int Nc)
165 int Nyzt = Ny * Nz * Nt;
171 #pragma acc data present(v2[0:size], v1[0:size], u[0:size_u]), \
172 copyin(ieo, bc[0:4], Nx, Nyzt, Nst)
173 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
175 for(
int ist = 0; ist < Nst; ++ist){
177 int iy = (ist/Nx) % Ny;
178 int iz = (ist/(Nx*Ny)) % Nz;
179 int it = ist/(Nx*Ny*Nz);
181 int keo = (ieo +
iy +
iz +
it) % 2;
182 int nei = ((
ix + keo) % Nx) + Nx *
iyzt;
184 if(
ix == Nx-1 && keo == 1)
bc2 = bc[0];
189 for(
int id = 0;
id <
ND; ++id){
190 for(
int ic = 0; ic <
NC; ++ic){
198 for(
int ic = 0; ic <
NC; ++ic){
207 for(
int ic = 0; ic <
NC; ++ic){
209 for(
int ic2 = 0; ic2 <
NC; ++ic2){
210 ut[2*ic2 ] = u[
IDX2_G_R(ic2, ic, ist)];
211 ut[2*ic2+1] = u[
IDX2_G_I(ic2, ic, ist)];
214 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
216 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
218 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
220 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
243 int *Nsize,
int *bc,
int ieo,
int Nc)
251 int Nyzt = Ny * Nz * Nt;
258 #pragma acc data present(v1[0:size], buf[0:size_b], u[0:size_u]), \
259 copyin(ieo, Nx, Ny, Nz, Nt, Nyzt)
260 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
263 #pragma acc loop gang worker vector
270 int keo = (ieo +
iy +
iz +
it) % 2;
277 for(
int id = 0;
id <
ND; ++id){
278 for(
int ic = 0; ic <
NC; ++ic){
284 for(
int ic = 0; ic <
NC; ++ic){
287 vt1[icr] = vt[icr +
ID1] + vt[ici +
ID4];
288 vt1[ici] = vt[ici +
ID1] - vt[icr +
ID4];
289 vt2[icr] = vt[icr +
ID2] + vt[ici +
ID3];
290 vt2[ici] = vt[ici +
ID2] - vt[icr +
ID3];
296 for(
int ic = 0; ic <
NC; ++ic){
300 for(
int ic2 = 0; ic2 <
NC; ++ic2){
301 ut[2*ic2 ] = u[
IDX2_G_R(ic, ic2, ist)];
302 ut[2*ic2+1] = - u[
IDX2_G_I(ic, ic2, ist)];
305 wt1[icr] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
307 wt1[ici] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
309 wt2[icr] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
311 wt2[ici] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
326 int *Nsize,
int *bc,
int ieo,
int Nc)
334 int Nyzt = Ny * Nz * Nt;
342 #pragma acc data present(v2[0:size], buf[0:size_b]), \
343 copyin(bc2, ieo, Nx, Ny, Nz, Nt, Nyzt)
344 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
347 #pragma acc loop gang worker vector
354 int keo = (ieo +
iy +
iz +
it) % 2;
361 for(
int ic = 0; ic <
NC; ++ic){
363 int ici = 2 * ic + 1;
364 wt1[0] =
bc2 * buf[icr + 2 *
NVC * iyzt2];
365 wt1[1] =
bc2 * buf[ici + 2 *
NVC * iyzt2];
366 wt2[0] =
bc2 * buf[icr +
NVC + 2 *
NVC * iyzt2];
367 wt2[1] =
bc2 * buf[ici +
NVC + 2 *
NVC * iyzt2];
390 int *Nsize,
int *bc,
int ieo,
int Nc)
398 int Nyzt = Ny * Nz * Nt;
404 #pragma acc data present(v2[0:size], v1[0:size], u[0:size_u]), \
405 copyin(bc[0:4], ieo, Nx, Ny, Nz, Nt, Nyzt, Nst)
406 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
408 for(
int ist = 0; ist < Nst; ++ist){
410 int iy = (ist/Nx) % Ny;
411 int iz = (ist/(Nx*Ny)) % Nz;
412 int it = ist/(Nx*Ny*Nz);
414 int keo = (ieo +
iy +
iz +
it) % 2;
415 int ix2 = (
ix - 1 + keo + Nx) % Nx;
418 if(
ix == 0 && keo == 0)
bc2 = bc[0];
423 for(
int id = 0;
id <
ND; ++id){
424 for(
int ic = 0; ic <
NC; ++ic){
432 for(
int ic = 0; ic <
NC; ++ic){
435 vt1[icr] = vt[icr +
ID1] + vt[ici +
ID4];
436 vt1[ici] = vt[ici +
ID1] - vt[icr +
ID4];
437 vt2[icr] = vt[icr +
ID2] + vt[ici +
ID3];
438 vt2[ici] = vt[ici +
ID2] - vt[icr +
ID3];
441 for(
int ic = 0; ic <
NC; ++ic){
443 for(
int ic2 = 0; ic2 <
NC; ++ic2){
444 ut[2*ic2 ] = u[
IDX2_G_R(ic, ic2, nei)];
445 ut[2*ic2+1] = - u[
IDX2_G_I(ic, ic2, nei)];
448 wt1[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
450 wt1[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
452 wt2[0] =
MULT_UV_R(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],
454 wt2[1] =
MULT_UV_I(ut[0], ut[1], ut[2], ut[3], ut[4], ut[5],