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 real_t *RESTRICT v1,
int *Nsize,
int iflag)
19 int Nst = Nsize[0] * Nsize[1] * Nsize[2] * Nsize[3];
22 int size =
NVC *
ND * Nst_pad;
23 int size_u =
NDF * Nst_pad *
ND *
ND2;
25 #pragma acc data present(v2[0:size], v1[0:size], u[0:size_u]) \
26 copyin(Nst, Nst_pad, iflag)
27 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
30 #pragma acc loop gang worker vector
31 for(
int ist = 0; ist < Nst; ++ist){
36 for(
int id = 0;
id <
ND; ++id){
37 for(
int ivc = 0; ivc <
NVC; ++ivc){
38 wt[ivc +
NVC*id] = 0.0;
42 for(
int id = 0;
id <
ND; ++id){
43 for(
int ic = 0; ic <
NC; ++ic){
50 for(
int id = 0;
id <
ND; ++id){
51 for(
int ic = 0; ic <
NC; ++ic){
57 for(
int jd = 0; jd <
ND2; ++jd){
58 for(
int id = 0;
id <
ND; ++id){
59 int igst = ist + Nst_pad * (
id +
ND * jd);
61 for(
int ic2 = 0; ic2 <
NC; ++ic2){
63 for(
int ic1 = 0; ic1 <
NC; ++ic1){
64 ut[2*ic1 ] = u[
IDX2_G_R(ic1, ic2, igst)];
65 ut[2*ic1+1] = u[
IDX2_G_I(ic1, ic2, igst)];
68 int id2 = (
id +
ND2) %
ND;
73 vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j]);
76 vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j]);
79 vt[0+k], vt[1+k], vt[2+k], vt[3+k], vt[4+k], vt[5+k]);
82 vt[0+k], vt[1+k], vt[2+k], vt[3+k], vt[4+k], vt[5+k]);
94 for(
int id = 0;
id <
ND; ++id){
95 for(
int ic = 0; ic <
NC; ++ic){
111 real_t *RESTRICT v1,
int *Nsize,
int iflag)
114 int Nst = Nsize[0] * Nsize[1] * Nsize[2] * Nsize[3];
117 int size =
NVC *
ND * Nst_pad;
118 int size_u =
NDF * Nst_pad *
ND *
ND2;
120 #pragma acc data present(v2[0:size], v1[0:size], u[0:size_u]) \
121 copyin(Nst, Nst_pad, iflag)
122 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
125 #pragma acc loop gang worker vector
126 for(
int ist = 0; ist < Nst; ++ist){
131 for(
int id = 0;
id <
ND; ++id){
132 for(
int ivc = 0; ivc <
NVC; ++ivc){
133 wt[ivc +
NVC*id] = 0.0;
137 for(
int id = 0;
id <
ND; ++id){
138 for(
int ic = 0; ic <
NC; ++ic){
145 for(
int id = 0;
id <
ND; ++id){
146 for(
int ic = 0; ic <
NC; ++ic){
152 for(
int jd = 0; jd <
ND2; ++jd){
153 for(
int id = 0;
id <
ND2; ++id){
154 int igst = ist + Nst_pad * (
id +
ND2 * jd);
156 for(
int ic2 = 0; ic2 <
NC; ++ic2){
158 for(
int ic1 = 0; ic1 <
NC; ++ic1){
159 ut[2*ic1 ] = u[
IDX2_G_R(ic1, ic2, igst)];
160 ut[2*ic1+1] = u[
IDX2_G_I(ic1, ic2, igst)];
166 vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j]);
169 vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j]);
179 for(
int jd = 0; jd <
ND2; ++jd){
180 for(
int id = 0;
id <
ND2; ++id){
181 int igst = ist + Nst_pad * (
id +
ND2*jd +
ND);
183 for(
int ic2 = 0; ic2 <
NC; ++ic2){
185 for(
int ic1 = 0; ic1 <
NC; ++ic1){
186 ut[2*ic1 ] = u[
IDX2_G_R(ic1, ic2, igst)];
187 ut[2*ic1+1] = u[
IDX2_G_I(ic1, ic2, igst)];
193 vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j]);
196 vt[0+j], vt[1+j], vt[2+j], vt[3+j], vt[4+j], vt[5+j]);
207 for(
int id = 0;
id <
ND; ++id){
208 for(
int ic = 0; ic <
NC; ++ic){