37 vout.
crucial(
"Shift_Field_lex: parameter error, wrong parameter\n");
58 vout.
crucial(
"Shift_Field_lex: parameter error, wrong parameter\n");
66 const int bc,
const int mu)
77 vout.
crucial(
"Shift_Field_lex: parameter error, wrong parameter\n");
85 const int bc,
const int mu)
96 vout.
crucial(
"Shift_Field_lex: parameter error, wrong parameter\n");
115 int Nvol = w->
nvol();
116 int Nvol2 = Nvol /
Nx;
118 double *vp = v->
ptr(0);
119 const double *wp = w->
ptr(0);
121 std::vector<double> wt(Nin * Nvol2 * Nex);
122 std::vector<double> vt(Nin * Nvol2 * Nex);
124 for (
int s2 = 0; s2 <
Ny *
Nz *
Nt; s2++) {
126 for (
int x = 0; x <
Nx - 1; x++) {
127 int ix = x + Nx * s2;
129 for (
int ex = 0; ex < Nex; ex++) {
130 for (
int in = 0; in < Nin; in++) {
131 vp[in + Nin * (ix + Nvol * ex)] = wp[in + Nin * (px + Nvol * ex)];
139 for (
int ex = 0; ex < Nex; ex++) {
140 for (
int in = 0; in < Nin; in++) {
141 wt[in + Nin * (s2 + Nvol2 * ex)] = bc2 * wp[in + Nin * (px + Nvol * ex)];
146 int size = Nin * Nvol2 * Nex;
149 for (
int s2 = 0; s2 <
Ny *
Nz *
Nt; s2++) {
152 int ix =
Nx - 1 + px;
153 for (
int in = 0; in < Nin; in++) {
154 for (
int ex = 0; ex < Nex; ex++) {
155 vp[in + Nin * (ix + Nvol * ex)] = vt[in + Nin * (s2 + Nvol2 * ex)];
175 int Nvol = w->
nvol();
176 int Nvol2 = Nvol /
Nx;
178 double *vp = v->
ptr(0);
179 const double *wp = w->
ptr(0);
181 std::vector<double> wt(Nin * Nvol2 * Nex);
182 std::vector<double> vt(Nin * Nvol2 * Nex);
184 for (
int s2 = 0; s2 <
Ny *
Nz *
Nt; s2++) {
186 for (
int x = 1; x <
Nx; x++) {
187 int ix = x + Nx * s2;
189 for (
int ex = 0; ex < Nex; ex++) {
190 for (
int in = 0; in < Nin; in++) {
191 vp[in + Nin * (ix + Nvol * ex)] = wp[in + Nin * (px + Nvol * ex)];
197 int px = Nx - 1 + Nx * s2;
198 for (
int ex = 0; ex < Nex; ex++) {
199 for (
int in = 0; in < Nin; in++) {
200 wt[in + Nin * (s2 + Nvol2 * ex)] = wp[in + Nin * (px + Nvol * ex)];
205 int size = Nin * Nvol2 * Nex;
208 for (
int s2 = 0; s2 <
Ny *
Nz *
Nt; s2++) {
211 for (
int ex = 0; ex < Nex; ex++) {
212 for (
int in = 0; in < Nin; in++) {
213 vp[in + Nin * (ix + Nvol * ex)] = bc2 * vt[in + Nin * (s2 + Nvol2 * ex)];
233 int Nvol = w->
nvol();
234 int Nvol2 = Nvol /
Ny;
236 double *vp = v->
ptr(0);
237 const double *wp = w->
ptr(0);
239 std::vector<double> wt(Nin * Nvol2 * Nex);
240 std::vector<double> vt(Nin * Nvol2 * Nex);
242 for (
int zt = 0; zt <
Nz *
Nt; zt++) {
243 for (
int x = 0; x <
Nx; x++) {
244 int s1 = x + Nx *
Ny * zt;
245 int s2 = x + Nx * zt;
248 for (
int y = 0; y <
Ny - 1; y++) {
249 int ix = s1 + Nx * y;
251 for (
int ex = 0; ex < Nex; ex++) {
252 for (
int in = 0; in < Nin; in++) {
253 vp[in + Nin * (ix + Nvol * ex)] = wp[in + Nin * (px + Nvol * ex)];
260 for (
int ex = 0; ex < Nex; ex++) {
261 for (
int in = 0; in < Nin; in++) {
262 wt[in + Nin * (s2 + Nvol2 * ex)] = bc2 * wp[in + Nin * (px + Nvol * ex)];
268 int size = Nin * Nvol2 * Nex;
271 for (
int zt = 0; zt <
Nz *
Nt; zt++) {
272 for (
int x = 0; x <
Nx; x++) {
273 int s1 = x + Nx *
Ny * zt;
274 int s2 = x + Nx * zt;
277 int ix = s1 + Nx * (
Ny - 1);
278 for (
int ex = 0; ex < Nex; ex++) {
279 for (
int in = 0; in < Nin; in++) {
280 vp[in + Nin * (ix + Nvol * ex)] = vt[in + Nin * (s2 + Nvol2 * ex)];
301 int Nvol = w->
nvol();
302 int Nvol2 = Nvol /
Ny;
304 double *vp = v->
ptr(0);
305 const double *wp = w->
ptr(0);
307 std::vector<double> wt(Nin * Nvol2 * Nex);
308 std::vector<double> vt(Nin * Nvol2 * Nex);
310 for (
int zt = 0; zt <
Nz *
Nt; zt++) {
311 for (
int x = 0; x <
Nx; x++) {
312 int s1 = x + Nx *
Ny * zt;
313 int s2 = x + Nx * zt;
316 for (
int y = 1; y <
Ny; y++) {
317 int ix = s1 + Nx * y;
319 for (
int ex = 0; ex < Nex; ex++) {
320 for (
int in = 0; in < Nin; in++) {
321 vp[in + Nin * (ix + Nvol * ex)] = wp[in + Nin * (px + Nvol * ex)];
327 int px = s1 + Nx * (Ny - 1);
328 for (
int ex = 0; ex < Nex; ex++) {
329 for (
int in = 0; in < Nin; in++) {
330 wt[in + Nin * (s2 + Nvol2 * ex)] = wp[in + Nin * (px + Nvol * ex)];
336 int size = Nin * Nvol2 * Nex;
339 for (
int zt = 0; zt <
Nz *
Nt; zt++) {
340 for (
int x = 0; x <
Nx; x++) {
341 int s1 = x + Nx *
Ny * zt;
342 int s2 = x + Nx * zt;
346 for (
int ex = 0; ex < Nex; ex++) {
347 for (
int in = 0; in < Nin; in++) {
348 vp[in + Nin * (ix + Nvol * ex)] = bc2 * vt[in + Nin * (s2 + Nvol2 * ex)];
369 int Nvol = w->
nvol();
370 int Nvol2 = Nvol /
Nz;
372 double *vp = v->
ptr(0);
373 const double *wp = w->
ptr(0);
375 std::vector<double> wt(Nin * Nvol2 * Nex);
376 std::vector<double> vt(Nin * Nvol2 * Nex);
378 for (
int t = 0; t <
Nt; t++) {
379 for (
int xy = 0; xy <
Nx *
Ny; xy++) {
380 int s1 = xy +
Nx * Ny *
Nz * t;
381 int s2 = xy +
Nx * Ny * t;
384 for (
int z = 0; z <
Nz - 1; z++) {
385 int ix = s1 +
Nx * Ny * z;
386 int px = ix +
Nx *
Ny;
387 for (
int ex = 0; ex < Nex; ex++) {
388 for (
int in = 0; in < Nin; in++) {
389 vp[in + Nin * (ix + Nvol * ex)] = wp[in + Nin * (px + Nvol * ex)];
396 for (
int ex = 0; ex < Nex; ex++) {
397 for (
int in = 0; in < Nin; in++) {
398 wt[in + Nin * (s2 + Nvol2 * ex)] = bc2 * wp[in + Nin * (px + Nvol * ex)];
404 int size = Nin * (Nvol /
Nz) * Nex;
407 for (
int t = 0; t <
Nt; t++) {
408 for (
int xy = 0; xy <
Nx *
Ny; xy++) {
409 int s1 = xy +
Nx * Ny *
Nz * t;
410 int s2 = xy +
Nx * Ny * t;
413 int ix = s1 +
Nx * Ny * (
Nz - 1);
414 for (
int ex = 0; ex < Nex; ex++) {
415 for (
int in = 0; in < Nin; in++) {
416 vp[in + Nin * (ix + Nvol * ex)] = vt[in + Nin * (s2 + Nvol2 * ex)];
437 int Nvol = w->
nvol();
438 int Nvol2 = Nvol /
Nz;
440 double *vp = v->
ptr(0);
441 const double *wp = w->
ptr(0);
443 std::vector<double> wt(Nin * Nvol2 * Nex);
444 std::vector<double> vt(Nin * Nvol2 * Nex);
446 for (
int t = 0; t <
Nt; t++) {
447 for (
int xy = 0; xy <
Nx *
Ny; xy++) {
448 int s1 = xy +
Nx * Ny *
Nz * t;
449 int s2 = xy +
Nx * Ny * t;
452 for (
int z = 1; z <
Nz; z++) {
453 int ix = s1 +
Nx * Ny * z;
454 int px = ix -
Nx *
Ny;
455 for (
int ex = 0; ex < Nex; ex++) {
456 for (
int in = 0; in < Nin; in++) {
457 vp[in + Nin * (ix + Nvol * ex)] = wp[in + Nin * (px + Nvol * ex)];
462 int px = s1 +
Nx * Ny * (Nz - 1);
463 for (
int in = 0; in < Nin; in++) {
464 for (
int ex = 0; ex < Nex; ex++) {
465 wt[in + Nin * (s2 + Nvol2 * ex)] = wp[in + Nin * (px + Nvol * ex)];
471 int size = Nin * Nvol2 * Nex;
474 for (
int t = 0; t <
Nt; t++) {
475 for (
int xy = 0; xy <
Nx *
Ny; xy++) {
476 int s1 = xy +
Nx * Ny *
Nz * t;
477 int s2 = xy +
Nx * Ny * t;
481 for (
int in = 0; in < Nin; in++) {
482 for (
int ex = 0; ex < Nex; ex++) {
483 vp[in + Nin * (ix + Nvol * ex)] = bc2 * vt[in + Nin * (s2 + Nvol2 * ex)];
504 int Nvol = w->
nvol();
505 int Nvol2 = Nvol /
Nt;
507 double *vp = v->
ptr(0);
508 const double *wp = w->
ptr(0);
510 std::vector<double> wt(Nin * Nvol2 * Nex);
511 std::vector<double> vt(Nin * Nvol2 * Nex);
513 for (
int s2 = 0; s2 <
Nx *
Ny *
Nz; s2++) {
515 for (
int t = 0; t <
Nt - 1; t++) {
516 int ix = s2 +
Nx *
Ny * Nz * t;
517 int px = ix +
Nx *
Ny *
Nz;
518 for (
int ex = 0; ex < Nex; ex++) {
519 for (
int in = 0; in < Nin; in++) {
520 vp[in + Nin * (ix + Nvol * ex)] = wp[in + Nin * (px + Nvol * ex)];
527 for (
int ex = 0; ex < Nex; ex++) {
528 for (
int in = 0; in < Nin; in++) {
529 wt[in + Nin * (s2 + Nvol2 * ex)] = bc2 * wp[in + Nin * (px + Nvol * ex)];
534 int size = Nin * Nvol2 * Nex;
537 for (
int s2 = 0; s2 <
Nx *
Ny *
Nz; s2++) {
539 int ix = s2 +
Nx *
Ny * Nz * (
Nt - 1);
540 for (
int ex = 0; ex < Nex; ex++) {
541 for (
int in = 0; in < Nin; in++) {
542 vp[in + Nin * (ix + Nvol * ex)] = vt[in + Nin * (s2 + Nvol2 * ex)];
562 int Nvol = w->
nvol();
563 int Nvol2 = Nvol /
Nt;
565 double *vp = v->
ptr(0);
566 const double *wp = w->
ptr(0);
568 std::vector<double> wt(Nin * Nvol2 * Nex);
569 std::vector<double> vt(Nin * Nvol2 * Nex);
571 for (
int s2 = 0; s2 <
Nx *
Ny *
Nz; s2++) {
573 for (
int t = 1; t <
Nt; t++) {
574 int ix = s2 +
Nx *
Ny * Nz * t;
575 int px = ix -
Nx *
Ny *
Nz;
576 for (
int ex = 0; ex < Nex; ex++) {
577 for (
int in = 0; in < Nin; in++) {
578 vp[in + Nin * (ix + Nvol * ex)] = wp[in + Nin * (px + Nvol * ex)];
583 int px = s2 +
Nx *
Ny * Nz * (Nt - 1);
584 for (
int ex = 0; ex < Nex; ex++) {
585 for (
int in = 0; in < Nin; in++) {
586 wt[in + Nin * (s2 + Nvol2 * ex)] = wp[in + Nin * (px + Nvol * ex)];
591 int size = Nin * Nvol2 * Nex;
594 for (
int s2 = 0; s2 <
Nx *
Ny *
Nz; s2++) {
597 for (
int ex = 0; ex < Nex; ex++) {
598 for (
int in = 0; in < Nin; in++) {
599 vp[in + Nin * (ix + Nvol * ex)] = bc2 * vt[in + Nin * (s2 + Nvol2 * ex)];
void up_t(Field *, const Field *, const int bc)
const double * ptr(const int jin, const int site, const int jex) const
Container of Field-type object.
void dn_t(Field *, const Field *, const int bc)
static int ipe(const int dir)
logical coordinate of current proc.
void dn_y(Field *, const Field *, const int bc)
void up_y(Field *, const Field *, const int bc)
static int exchange(int count, double *recv_buf, double *send_buf, int idir, int ipm, int tag)
receive array of double from upstream specified by idir and ipm, and send array to downstream...
void backward(Field &, const Field &, const int mu)
void dn_z(Field *, const Field *, const int bc)
void crucial(const char *format,...)
void up_x(Field *, const Field *, const int bc)
void dn_x(Field *, const Field *, const int bc)
void up_z(Field *, const Field *, const int bc)
void forward(Field &, const Field &, const int mu)