Go to the documentation of this file.
10 #ifndef MULT_DOMAINWALL_5DIN_EO_4D_ACC_INCLUDED
11 #define MULT_DOMAINWALL_5DIN_EO_4D_ACC_INCLUDED
16 int Ns,
int *bc,
int *Nsize,
int *do_comm,
int ieo,
int jeo,
23 int Nst = Nx * Ny * Nz * Nt;
28 int size = Nin5 * Nst_pad;
29 int size_u =
NDF * Nst_pad * 2 *
NDIM;
31 #pragma acc data present(vp[0:size], up[0:size_u], wp[0:size]) \
32 copyin(Nst, Nst_pad, Nx, Ny, Nz, Nt, Nin5, Ns, \
33 bc[0:NDIM], do_comm[0:NDIM], ieo, jeo, jgm5)
35 #pragma acc parallel num_workers(NUM_WORKERS) vector_length(VECTOR_LENGTH)
38 #pragma acc loop gang worker vector
39 for (
int site = 0; site < Nst_pad; ++site) {
51 int ixyz = site % Nxyz;
53 int keo = (jeo +
iy +
iz +
it) % 2;
57 for(
int is = 0; is < Ns; ++is){
61 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
69 int ix2 = (
ix + keo) % Nx;
72 if(
ix == Nx-1 && keo == 1)
bc2 = bc[0];
75 load_u(ut, up, site + Nst_pad * (ieo + 2 *
idir));
79 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
83 for(
int ivc = 0; ivc <
NVC; ++ivc){
94 int ix2 = (
ix - 1 + keo + Nx) % Nx;
97 if(
ix == 0 && keo == 0)
bc2 = bc[0];
100 load_u(ut, up, nei + Nst_pad * (1-ieo + 2 *
idir));
104 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
108 for(
int ivc = 0; ivc <
NVC; ++ivc){
120 if ((
iy < Ny-1) || (do_comm[
idir] == 0)) {
121 int iy2 = (
iy + 1) % Ny;
122 int nei =
ix + Nx * (iy2 + Ny *
izt);
124 if(
iy == Ny-1)
bc2 = bc[1];
127 load_u(ut, up, site + Nst_pad * (ieo + 2 *
idir));
131 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
135 for(
int ivc = 0; ivc <
NVC; ++ivc){
145 if ((
iy > 0) || (do_comm[
idir] == 0)) {
146 int iy2 = (
iy - 1 + Ny) % Ny;
147 int nei =
ix + Nx * (iy2 + Ny *
izt);
149 if(
iy == 0)
bc2 = bc[1];
152 load_u(ut, up, nei + Nst_pad * (1-ieo + 2 *
idir));
156 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
160 for(
int ivc = 0; ivc <
NVC; ++ivc){
172 if ((
iz < Nz-1) || (do_comm[
idir] == 0)) {
173 int iz2 = (
iz + 1) % Nz;
174 int nei =
ixy + Nxy * (iz2 + Nz *
it);
176 if(
iz == Nz-1)
bc2 = bc[2];
179 load_u(ut, up, site + Nst_pad * (ieo + 2 *
idir));
183 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
187 for(
int ivc = 0; ivc <
NVC; ++ivc){
197 if ((
iz > 0) || (do_comm[
idir] == 0)) {
198 int iz2 = (
iz - 1 + Nz) % Nz;
199 int nei =
ixy + Nxy * (iz2 + Nz *
it);
201 if(
iz == 0)
bc2 = bc[2];
204 load_u(ut, up, nei + Nst_pad * (1-ieo + 2 *
idir));
208 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
212 for(
int ivc = 0; ivc <
NVC; ++ivc){
224 if ((
it < Nt-1) || (do_comm[
idir] == 0)) {
225 int it2 = (
it + 1) % Nt;
226 int nei =
ixyz + Nxyz * it2;
228 if(
it == Nt-1)
bc2 = bc[3];
231 load_u(ut, up, site + Nst_pad * (ieo + 2 *
idir));
235 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
239 for(
int ivc = 0; ivc <
NVC; ++ivc){
249 if ((
it > 0) || (do_comm[
idir] == 0)) {
250 int it2 = (
it - 1 + Nt) % Nt;
251 int nei =
ixyz + Nxyz * it2;
253 if(
it == 0)
bc2 = bc[3];
256 load_u(ut, up, nei + Nst_pad * (1-ieo + 2 *
idir));
260 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
264 for(
int ivc = 0; ivc <
NVC; ++ivc){
274 for(
int ivcd = 0; ivcd <
NVCD; ++ivcd){
275 vp[
IDX2(Nin5, (ivcd +
NVCD * is), site)] = vL[ivcd];
void mult_wilson_xpb(double *RESTRICT v2, double *RESTRICT u, double *RESTRICT v1, int *Nsize, int *bc, int Nc)
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_domainwall_5din_eo_hopb_dirac_4d(real_t *RESTRICT vp, real_t *RESTRICT up, real_t *RESTRICT wp, int Ns, int *bc, int *Nsize, int *do_comm, int ieo, int jeo, int jgm5)
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)
void mult_wilson_zmb(double *RESTRICT v2, double *RESTRICT u, double *RESTRICT v1, 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_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)