23 const int boundary_condition = 1;
26 up_x(&v, &w, boundary_condition);
28 up_y(&v, &w, boundary_condition);
30 up_z(&v, &w, boundary_condition);
32 up_t(&v, &w, boundary_condition);
44 const int boundary_condition = 1;
47 dn_x(&v, &w, boundary_condition);
49 dn_y(&v, &w, boundary_condition);
51 dn_z(&v, &w, boundary_condition);
53 dn_t(&v, &w, boundary_condition);
63 const int boundary_condition,
const int mu)
66 up_x(&v, &w, boundary_condition);
68 up_y(&v, &w, boundary_condition);
70 up_z(&v, &w, boundary_condition);
72 up_t(&v, &w, boundary_condition);
82 const int boundary_condition,
const int mu)
85 dn_x(&v, &w, boundary_condition);
87 dn_y(&v, &w, boundary_condition);
89 dn_z(&v, &w, boundary_condition);
91 dn_t(&v, &w, boundary_condition);
105 bc2 = boundary_condition;
110 const int Nin = w->
nin();
111 const int Nex = w->
nex();
112 const int Nvol = w->
nvol();
113 const int Nvol2 = Nvol /
m_Nx;
115 double *vp = v->
ptr(0);
116 const double *wp = w->
ptr(0);
118 std::vector<double> wt(Nin * Nvol2 * Nex);
119 std::vector<double> vt(Nin * Nvol2 * Nex);
123 for (
int x = 0; x <
m_Nx - 1; x++) {
124 int ix = x + m_Nx * s2;
126 for (
int ex = 0; ex < Nex; ex++) {
127 for (
int in = 0; in < Nin; in++) {
128 vp[in + Nin * (ix + Nvol * ex)] = wp[in + Nin * (px + Nvol * ex)];
136 for (
int ex = 0; ex < Nex; ex++) {
137 for (
int in = 0; in < Nin; in++) {
138 wt[in + Nin * (s2 + Nvol2 * ex)] = bc2 * wp[in + Nin * (px + Nvol * ex)];
143 const int size = Nin * Nvol2 * Nex;
149 int ix =
m_Nx - 1 + px;
150 for (
int in = 0; in < Nin; in++) {
151 for (
int ex = 0; ex < Nex; ex++) {
152 vp[in + Nin * (ix + Nvol * ex)] = vt[in + Nin * (s2 + Nvol2 * ex)];
165 bc2 = boundary_condition;
170 const int Nin = w->
nin();
171 const int Nex = w->
nex();
172 const int Nvol = w->
nvol();
173 const int Nvol2 = Nvol /
m_Nx;
175 double *vp = v->
ptr(0);
176 const double *wp = w->
ptr(0);
178 std::vector<double> wt(Nin * Nvol2 * Nex);
179 std::vector<double> vt(Nin * Nvol2 * Nex);
183 for (
int x = 1; x <
m_Nx; x++) {
184 int ix = x + m_Nx * s2;
186 for (
int ex = 0; ex < Nex; ex++) {
187 for (
int in = 0; in < Nin; in++) {
188 vp[in + Nin * (ix + Nvol * ex)] = wp[in + Nin * (px + Nvol * ex)];
194 int px = m_Nx - 1 + m_Nx * s2;
195 for (
int ex = 0; ex < Nex; ex++) {
196 for (
int in = 0; in < Nin; in++) {
197 wt[in + Nin * (s2 + Nvol2 * ex)] = wp[in + Nin * (px + Nvol * ex)];
202 const int size = Nin * Nvol2 * Nex;
208 for (
int ex = 0; ex < Nex; ex++) {
209 for (
int in = 0; in < Nin; in++) {
210 vp[in + Nin * (ix + Nvol * ex)] = bc2 * vt[in + Nin * (s2 + Nvol2 * ex)];
223 bc2 = boundary_condition;
228 const int Nin = w->
nin();
229 const int Nex = w->
nex();
230 const int Nvol = w->
nvol();
231 const int Nvol2 = Nvol /
m_Ny;
233 double *vp = v->
ptr(0);
234 const double *wp = w->
ptr(0);
236 std::vector<double> wt(Nin * Nvol2 * Nex);
237 std::vector<double> vt(Nin * Nvol2 * Nex);
239 for (
int zt = 0; zt <
m_Nz *
m_Nt; zt++) {
240 for (
int x = 0; x <
m_Nx; x++) {
241 int s1 = x + m_Nx *
m_Ny * zt;
242 int s2 = x + m_Nx * zt;
245 for (
int y = 0; y <
m_Ny - 1; y++) {
246 int ix = s1 + m_Nx * y;
248 for (
int ex = 0; ex < Nex; ex++) {
249 for (
int in = 0; in < Nin; in++) {
250 vp[in + Nin * (ix + Nvol * ex)] = wp[in + Nin * (px + Nvol * ex)];
257 for (
int ex = 0; ex < Nex; ex++) {
258 for (
int in = 0; in < Nin; in++) {
259 wt[in + Nin * (s2 + Nvol2 * ex)] = bc2 * wp[in + Nin * (px + Nvol * ex)];
265 const int size = Nin * Nvol2 * Nex;
268 for (
int zt = 0; zt <
m_Nz *
m_Nt; zt++) {
269 for (
int x = 0; x <
m_Nx; x++) {
270 int s1 = x + m_Nx *
m_Ny * zt;
271 int s2 = x + m_Nx * zt;
274 int ix = s1 + m_Nx * (
m_Ny - 1);
275 for (
int ex = 0; ex < Nex; ex++) {
276 for (
int in = 0; in < Nin; in++) {
277 vp[in + Nin * (ix + Nvol * ex)] = vt[in + Nin * (s2 + Nvol2 * ex)];
291 bc2 = boundary_condition;
296 const int Nin = w->
nin();
297 const int Nex = w->
nex();
298 const int Nvol = w->
nvol();
299 const int Nvol2 = Nvol /
m_Ny;
301 double *vp = v->
ptr(0);
302 const double *wp = w->
ptr(0);
304 std::vector<double> wt(Nin * Nvol2 * Nex);
305 std::vector<double> vt(Nin * Nvol2 * Nex);
307 for (
int zt = 0; zt <
m_Nz *
m_Nt; zt++) {
308 for (
int x = 0; x <
m_Nx; x++) {
309 int s1 = x + m_Nx *
m_Ny * zt;
310 int s2 = x + m_Nx * zt;
313 for (
int y = 1; y <
m_Ny; y++) {
314 int ix = s1 + m_Nx * y;
316 for (
int ex = 0; ex < Nex; ex++) {
317 for (
int in = 0; in < Nin; in++) {
318 vp[in + Nin * (ix + Nvol * ex)] = wp[in + Nin * (px + Nvol * ex)];
324 int px = s1 + m_Nx * (m_Ny - 1);
325 for (
int ex = 0; ex < Nex; ex++) {
326 for (
int in = 0; in < Nin; in++) {
327 wt[in + Nin * (s2 + Nvol2 * ex)] = wp[in + Nin * (px + Nvol * ex)];
333 const int size = Nin * Nvol2 * Nex;
336 for (
int zt = 0; zt <
m_Nz *
m_Nt; zt++) {
337 for (
int x = 0; x <
m_Nx; x++) {
338 int s1 = x + m_Nx *
m_Ny * zt;
339 int s2 = x + m_Nx * zt;
343 for (
int ex = 0; ex < Nex; ex++) {
344 for (
int in = 0; in < Nin; in++) {
345 vp[in + Nin * (ix + Nvol * ex)] = bc2 * vt[in + Nin * (s2 + Nvol2 * ex)];
359 bc2 = boundary_condition;
364 const int Nin = w->
nin();
365 const int Nex = w->
nex();
366 const int Nvol = w->
nvol();
367 const int Nvol2 = Nvol /
m_Nz;
369 double *vp = v->
ptr(0);
370 const double *wp = w->
ptr(0);
372 std::vector<double> wt(Nin * Nvol2 * Nex);
373 std::vector<double> vt(Nin * Nvol2 * Nex);
375 for (
int t = 0; t <
m_Nt; t++) {
376 for (
int xy = 0; xy <
m_Nx *
m_Ny; xy++) {
377 int s1 = xy +
m_Nx * m_Ny *
m_Nz * t;
378 int s2 = xy +
m_Nx * m_Ny * t;
381 for (
int z = 0; z <
m_Nz - 1; z++) {
382 int ix = s1 +
m_Nx * m_Ny * z;
384 for (
int ex = 0; ex < Nex; ex++) {
385 for (
int in = 0; in < Nin; in++) {
386 vp[in + Nin * (ix + Nvol * ex)] = wp[in + Nin * (px + Nvol * ex)];
393 for (
int ex = 0; ex < Nex; ex++) {
394 for (
int in = 0; in < Nin; in++) {
395 wt[in + Nin * (s2 + Nvol2 * ex)] = bc2 * wp[in + Nin * (px + Nvol * ex)];
401 const int size = Nin * (Nvol /
m_Nz) * Nex;
404 for (
int t = 0; t <
m_Nt; t++) {
405 for (
int xy = 0; xy <
m_Nx *
m_Ny; xy++) {
406 int s1 = xy +
m_Nx * m_Ny *
m_Nz * t;
407 int s2 = xy +
m_Nx * m_Ny * t;
410 int ix = s1 +
m_Nx * m_Ny * (
m_Nz - 1);
411 for (
int ex = 0; ex < Nex; ex++) {
412 for (
int in = 0; in < Nin; in++) {
413 vp[in + Nin * (ix + Nvol * ex)] = vt[in + Nin * (s2 + Nvol2 * ex)];
427 bc2 = boundary_condition;
432 const int Nin = w->
nin();
433 const int Nex = w->
nex();
434 const int Nvol = w->
nvol();
435 const int Nvol2 = Nvol /
m_Nz;
437 double *vp = v->
ptr(0);
438 const double *wp = w->
ptr(0);
440 std::vector<double> wt(Nin * Nvol2 * Nex);
441 std::vector<double> vt(Nin * Nvol2 * Nex);
443 for (
int t = 0; t <
m_Nt; t++) {
444 for (
int xy = 0; xy <
m_Nx *
m_Ny; xy++) {
445 int s1 = xy +
m_Nx * m_Ny *
m_Nz * t;
446 int s2 = xy +
m_Nx * m_Ny * t;
449 for (
int z = 1; z <
m_Nz; z++) {
450 int ix = s1 +
m_Nx * m_Ny * z;
452 for (
int ex = 0; ex < Nex; ex++) {
453 for (
int in = 0; in < Nin; in++) {
454 vp[in + Nin * (ix + Nvol * ex)] = wp[in + Nin * (px + Nvol * ex)];
459 int px = s1 +
m_Nx * m_Ny * (m_Nz - 1);
460 for (
int in = 0; in < Nin; in++) {
461 for (
int ex = 0; ex < Nex; ex++) {
462 wt[in + Nin * (s2 + Nvol2 * ex)] = wp[in + Nin * (px + Nvol * ex)];
468 const int size = Nin * Nvol2 * Nex;
471 for (
int t = 0; t <
m_Nt; t++) {
472 for (
int xy = 0; xy <
m_Nx *
m_Ny; xy++) {
473 int s1 = xy +
m_Nx * m_Ny *
m_Nz * t;
474 int s2 = xy +
m_Nx * m_Ny * t;
478 for (
int in = 0; in < Nin; in++) {
479 for (
int ex = 0; ex < Nex; ex++) {
480 vp[in + Nin * (ix + Nvol * ex)] = bc2 * vt[in + Nin * (s2 + Nvol2 * ex)];
494 bc2 = boundary_condition;
499 const int Nin = w->
nin();
500 const int Nex = w->
nex();
501 const int Nvol = w->
nvol();
502 const int Nvol2 = Nvol /
m_Nt;
504 double *vp = v->
ptr(0);
505 const double *wp = w->
ptr(0);
507 std::vector<double> wt(Nin * Nvol2 * Nex);
508 std::vector<double> vt(Nin * Nvol2 * Nex);
512 for (
int t = 0; t <
m_Nt - 1; t++) {
513 int ix = s2 +
m_Nx *
m_Ny * m_Nz * t;
515 for (
int ex = 0; ex < Nex; ex++) {
516 for (
int in = 0; in < Nin; in++) {
517 vp[in + Nin * (ix + Nvol * ex)] = wp[in + Nin * (px + Nvol * ex)];
524 for (
int ex = 0; ex < Nex; ex++) {
525 for (
int in = 0; in < Nin; in++) {
526 wt[in + Nin * (s2 + Nvol2 * ex)] = bc2 * wp[in + Nin * (px + Nvol * ex)];
531 const int size = Nin * Nvol2 * Nex;
537 for (
int ex = 0; ex < Nex; ex++) {
538 for (
int in = 0; in < Nin; in++) {
539 vp[in + Nin * (ix + Nvol * ex)] = vt[in + Nin * (s2 + Nvol2 * ex)];
552 bc2 = boundary_condition;
557 const int Nin = w->
nin();
558 const int Nex = w->
nex();
559 const int Nvol = w->
nvol();
560 const int Nvol2 = Nvol /
m_Nt;
562 double *vp = v->
ptr(0);
563 const double *wp = w->
ptr(0);
565 std::vector<double> wt(Nin * Nvol2 * Nex);
566 std::vector<double> vt(Nin * Nvol2 * Nex);
570 for (
int t = 1; t <
m_Nt; t++) {
571 int ix = s2 +
m_Nx *
m_Ny * m_Nz * t;
573 for (
int ex = 0; ex < Nex; ex++) {
574 for (
int in = 0; in < Nin; in++) {
575 vp[in + Nin * (ix + Nvol * ex)] = wp[in + Nin * (px + Nvol * ex)];
580 int px = s2 +
m_Nx *
m_Ny * m_Nz * (m_Nt - 1);
581 for (
int ex = 0; ex < Nex; ex++) {
582 for (
int in = 0; in < Nin; in++) {
583 wt[in + Nin * (s2 + Nvol2 * ex)] = wp[in + Nin * (px + Nvol * ex)];
588 const int size = Nin * Nvol2 * Nex;
594 for (
int ex = 0; ex < Nex; ex++) {
595 for (
int in = 0; in < Nin; in++) {
596 vp[in + Nin * (ix + Nvol * ex)] = bc2 * vt[in + Nin * (s2 + Nvol2 * ex)];
Bridge::VerboseLevel m_vl
const double * ptr(const int jin, const int site, const int jex) const
static const std::string class_name
void up_x(Field *, const Field *, const int boundary_condition)
void up_z(Field *, const Field *, const int boundary_condition)
Container of Field-type object.
void dn_t(Field *, const Field *, const int boundary_condition)
static int ipe(const int dir)
logical coordinate of current proc.
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 crucial(const char *format,...)
void up_y(Field *, const Field *, const int boundary_condition)
void dn_z(Field *, const Field *, const int boundary_condition)
void up_t(Field *, const Field *, const int boundary_condition)
void dn_x(Field *, const Field *, const int boundary_condition)
void dn_y(Field *, const Field *, const int boundary_condition)
void forward(Field &, const Field &, const int mu)