40 set_threadtask(ith, nth, is, ns,
m_Nvol);
42 double *RESTRICT yp = this->
ptr(0);
44 for (
int ex = 0; ex <
m_Nex; ++ex) {
45 for (
int site = is; site < ns; ++site) {
47 for (
int in = 0; in <
m_Nin; ++in) {
61 dcomplex c = cmplx(a, 0.0);
64 vout.
crucial(
"Error at %s: unsupported arg types.\n", __func__);
76 double *RESTRICT yp = this->
ptr(0);
82 set_threadtask(ith, nth, is, ns,
m_Nvol);
84 for (
int ex = 0; ex <
m_Nex; ++ex) {
85 for (
int site = is; site < ns; ++site) {
87 for (
int k = 0; k < Nin2; ++k) {
102 vout.
crucial(
"Error at %s: real vector and complex parameter.\n",
107 vout.
crucial(
"Error at %s: unsupported arg types.\n", __func__);
116 const double *RESTRICT yp = this->
ptr(0);
118 int ith, nth, is, ns;
119 set_threadtask(ith, nth, is, ns,
m_Nvol);
123 for (
int ex = 0; ex <
m_Nex; ++ex) {
124 for (
int site = is; site < ns; ++site) {
126 for (
int in = 0; in <
m_Nin; ++in) {
127 a += yp[in + kv] * yp[in + kv];
142 vout.
crucial(
"Error at %s: xI() is not available for real field.\n",
147 double *RESTRICT yp = this->
ptr(0);
148 int Nin2 =
m_Nin / 2;
150 int ith, nth, is, ns;
151 set_threadtask(ith, nth, is, ns,
m_Nvol);
153 for (
int ex = 0; ex <
m_Nex; ++ex) {
154 for (
int site = is; site < ns; ++site) {
156 for (
int k = 0; k < Nin2; ++k) {
159 double yr = yp[kr + kv];
160 double yi = yp[ki + kv];
178 const double *RESTRICT yp = this->
ptr(0);
180 int ith, nth, is, ns;
181 set_threadtask(ith, nth, is, ns,
m_Nvol);
184 for (
int ex = 0; ex <
m_Nex; ++ex) {
185 for (
int site = is; site < ns; ++site) {
187 for (
int in = 0; in <
m_Nin; ++in) {
188 double fv = yp[
myindex(in, site, ex)];
194 if (fst > vmax) vmax = fst;
205 Fdev = sqrt(sum2 / vfac - Fave * Fave);
220 double *yp = y.
ptr(0);
221 const double *RESTRICT xp = x.
ptr(0);
223 int ith, nth, is, ns;
224 set_threadtask(ith, nth, is, ns, Nvol);
226 for (
int ex = 0; ex < Nex; ++ex) {
227 for (
int site = is; site < ns; ++site) {
228 int kv = Nin * (site + Nvol * ex);
229 for (
int in = 0; in < Nin; ++in) {
230 yp[in + kv] = xp[in + kv];
243 assert(x.
nin() == Nin);
244 assert(x.
nvol() == Nvol);
246 double *yp = y.
ptr(0, 0, exy);
247 const double *RESTRICT xp = x.
ptr(0, 0, exx);
249 int ith, nth, is, ns;
250 set_threadtask(ith, nth, is, ns, Nvol);
252 for (
int site = is; site < ns; ++site) {
254 for (
int in = 0; in < Nin; ++in) {
255 yp[in + kv] = xp[in + kv];
268 double *RESTRICT xp = x.
ptr(0);
270 int ith, nth, is, ns;
271 set_threadtask(ith, nth, is, ns, Nvol);
273 for (
int ex = 0; ex < Nex; ++ex) {
274 for (
int site = is; site < ns; ++site) {
275 int kv = Nin * (site + Nvol * ex);
276 for (
int in = 0; in < Nin; ++in) {
290 double *RESTRICT xp = x.
ptr(0, 0, exx);
292 int ith, nth, is, ns;
293 set_threadtask(ith, nth, is, ns, Nvol);
295 for (
int site = is; site < ns; ++site) {
297 for (
int in = 0; in < Nin; ++in) {
307 if (imag(a) == 0.0) {
308 return scal(x, real(a));
314 int ith, nth, is, ns;
315 set_threadtask(ith, nth, is, ns, Nvol);
317 double *RESTRICT xp = x.
ptr(0);
322 for (
int ex = 0; ex < Nex; ++ex) {
323 for (
int site = is; site < ns; ++site) {
324 int kv = Nin * (site + Nvol * ex);
325 for (
int k = 0; k < Nin2; ++k) {
328 double xr = xp[kr + kv];
329 double xi = xp[ki + kv];
330 xp[kr + kv] = ar * xr - ai * xi;
331 xp[ki + kv] = ar * xi + ai * xr;
336 vout.
crucial(
"Error at %s: real vector and complex parameter.\n",
346 if (imag(a) == 0.0) {
347 return scal(x, exx, real(a));
353 int ith, nth, is, ns;
354 set_threadtask(ith, nth, is, ns, Nvol);
356 double *RESTRICT xp = x.
ptr(0, 0, exx);
361 for (
int site = is; site < ns; ++site) {
363 for (
int k = 0; k < Nin2; ++k) {
366 double xr = xp[kr + kv];
367 double xi = xp[ki + kv];
368 xp[kr + kv] = ar * xr - ai * xi;
369 xp[ki + kv] = ar * xi + ai * xr;
373 vout.
crucial(
"Error at %s: real vector and complex parameter.\n",
388 double *RESTRICT yp = y.
ptr(0);
389 const double *RESTRICT xp = x.
ptr(0);
391 int ith, nth, is, ns;
392 set_threadtask(ith, nth, is, ns, Nvol);
394 for (
int ex = 0; ex < Nex; ++ex) {
395 for (
int site = is; site < ns; ++site) {
396 int kv = Nin * (site + Nvol * ex);
397 for (
int in = 0; in < Nin; ++in) {
398 yp[in + kv] += a * xp[in + kv];
407 const double a,
const Field& x,
const int exx)
409 assert(x.
nin() == y.
nin());
415 double *RESTRICT yp = y.
ptr(0, 0, exy);
416 const double *RESTRICT xp = x.
ptr(0, 0, exx);
418 int ith, nth, is, ns;
419 set_threadtask(ith, nth, is, ns, Nvol);
421 for (
int site = is; site < ns; ++site) {
423 for (
int in = 0; in < Nin; ++in) {
424 yp[in + kv] += a * xp[in + kv];
433 if (imag(a) == 0.0) {
434 return axpy(y, real(a), x);
442 double *RESTRICT yp = y.
ptr(0);
443 const double *RESTRICT xp = x.
ptr(0);
445 int ith, nth, is, ns;
446 set_threadtask(ith, nth, is, ns, Nvol);
452 for (
int ex = 0; ex < Nex; ++ex) {
453 for (
int site = is; site < ns; ++site) {
454 int kv = Nin * (site + Nvol * ex);
455 for (
int k = 0; k < Nin2; ++k) {
458 yp[kr + kv] += ar * xp[kr + kv] - ai * xp[ki + kv];
459 yp[ki + kv] += ar * xp[ki + kv] + ai * xp[kr + kv];
464 vout.
crucial(
"Error at %s: unsupported types.\n", __func__);
472 const dcomplex a,
const Field& x,
const int exx)
474 if (imag(a) == 0.0) {
475 return axpy(y, exy, real(a), x, exx);
480 assert(x.
nin() == Nin);
481 assert(x.
nvol() == Nvol);
483 double *RESTRICT yp = y.
ptr(0, 0, exy);
484 const double *RESTRICT xp = x.
ptr(0, 0, exx);
486 int ith, nth, is, ns;
487 set_threadtask(ith, nth, is, ns, Nvol);
493 for (
int site = is; site < ns; ++site) {
495 for (
int k = 0; k < Nin2; ++k) {
498 yp[kr + kv] += ar * xp[kr + kv] - ai * xp[ki + kv];
499 yp[ki + kv] += ar * xp[ki + kv] + ai * xp[kr + kv];
503 vout.
crucial(
"Error at %s: unsupported types.\n", __func__);
517 double *RESTRICT yp = y.
ptr(0);
518 const double *RESTRICT xp = x.
ptr(0);
520 int ith, nth, is, ns;
521 set_threadtask(ith, nth, is, ns, Nvol);
523 for (
int ex = 0; ex < Nex; ++ex) {
524 for (
int site = is; site < ns; ++site) {
525 int kv = Nin * (site + Nvol * ex);
526 for (
int in = 0; in < Nin; ++in) {
527 yp[in + kv] = a * yp[in + kv] + xp[in + kv];
537 if (imag(a) == 0.0) {
538 return aypx(real(a), y, x);
546 double *RESTRICT yp = y.
ptr(0);
547 const double *RESTRICT xp = x.
ptr(0);
549 int ith, nth, is, ns;
550 set_threadtask(ith, nth, is, ns, Nvol);
556 for (
int ex = 0; ex < Nex; ++ex) {
557 for (
int site = is; site < ns; ++site) {
558 int kv = Nin * (site + Nvol * ex);
559 for (
int k = 0; k < Nin2; ++k) {
562 double yr = yp[kr + kv];
563 double yi = yp[ki + kv];
564 yp[kr + kv] = ar * yr - ai * yi + xp[kr + kv];
565 yp[ki + kv] = ar * yi + ai * yr + xp[ki + kv];
570 vout.
crucial(
"Error at %s: unsupported types.\n", __func__);
584 const double *RESTRICT yp = y.
ptr(0);
585 const double *RESTRICT xp = x.
ptr(0);
587 int ith, nth, is, ns;
588 set_threadtask(ith, nth, is, ns, Nvol);
592 for (
int ex = 0; ex < Nex; ++ex) {
593 for (
int site = is; site < ns; ++site) {
594 int kv = Nin * (site + Nvol * ex);
595 for (
int in = 0; in < Nin; ++in) {
596 a += yp[in + kv] * xp[in + kv];
610 assert(x.
nin() == y.
nin());
616 const double *RESTRICT yp = y.
ptr(0, 0, exy);
617 const double *RESTRICT xp = x.
ptr(0, 0, exx);
619 int ith, nth, is, ns;
620 set_threadtask(ith, nth, is, ns, Nvol);
624 for (
int site = is; site < ns; ++site) {
626 for (
int in = 0; in < Nin; ++in) {
627 a += yp[in + kv] * xp[in + kv];
639 const Field& y,
const int exy,
640 const Field& x,
const int exx)
644 assert(x.
nin() == Nin);
645 assert(x.
nvol() == Nvol);
647 const double *RESTRICT yp = y.
ptr(0, 0, exy);
648 const double *RESTRICT xp = x.
ptr(0, 0, exx);
650 int ith, nth, is, ns;
651 set_threadtask(ith, nth, is, ns, Nvol);
657 for (
int site = is; site < ns; ++site) {
659 for (
int in = 0; in < Nin; ++in) {
660 sum_yx += yp[in + kv] * xp[in + kv];
661 sum_x2 += xp[in + kv] * xp[in + kv];
662 sum_y2 += yp[in + kv] * yp[in + kv];
666 double prd[3] = { sum_yx, sum_x2, sum_y2 };
683 const double *RESTRICT yp = y.
ptr(0);
684 const double *RESTRICT xp = x.
ptr(0);
686 int ith, nth, is, ns;
687 set_threadtask(ith, nth, is, ns, Nvol);
693 for (
int ex = 0; ex < Nex; ++ex) {
694 for (
int site = is; site < ns; ++site) {
695 int kv = Nin * (site + Nvol * ex);
696 for (
int in = 0; in < Nin; ++in) {
697 sum_yx += yp[in + kv] * xp[in + kv];
698 sum_x2 += xp[in + kv] * xp[in + kv];
699 sum_y2 += yp[in + kv] * yp[in + kv];
704 double prd[3] = { sum_yx, sum_x2, sum_y2 };
720 const double *RESTRICT yp = y.
ptr(0);
721 const double *RESTRICT xp = x.
ptr(0);
723 int ith, nth, is, ns;
724 set_threadtask(ith, nth, is, ns, Nvol);
732 for (
int ex = 0; ex < Nex; ++ex) {
733 for (
int site = is; site < ns; ++site) {
734 int kv = Nin * (site + Nvol * ex);
735 for (
int k = 0; k < Nin2; ++k) {
738 prdr += yp[kr + kv] * xp[kr + kv] + yp[ki + kv] * xp[ki + kv];
739 prdi += yp[kr + kv] * xp[ki + kv] - yp[ki + kv] * xp[kr + kv];
744 double prd[2] = { prdr, prdi };
747 return cmplx(prd[0], prd[1]);
750 return cmplx(
dot(y, x), 0.0);
752 vout.
crucial(
"Error at %s: unsupported arg types\n", __func__);
755 return cmplx(0.0, 0.0);
765 assert(x.
nin() == Nin);
766 assert(x.
nvol() == Nvol);
768 const double *RESTRICT yp = y.
ptr(0, 0, exy);
769 const double *RESTRICT xp = x.
ptr(0, 0, exx);
771 int ith, nth, is, ns;
772 set_threadtask(ith, nth, is, ns, Nvol);
780 for (
int site = is; site < ns; ++site) {
782 for (
int k = 0; k < Nin2; ++k) {
785 prdr += yp[kr + kv] * xp[kr + kv] + yp[ki + kv] * xp[ki + kv];
786 prdi += yp[kr + kv] * xp[ki + kv] - yp[ki + kv] * xp[kr + kv];
790 double prd[2] = { prdr, prdi };
793 return cmplx(prd[0], prd[1]);
796 return cmplx(
dot(y, exy, x, exx), 0.0);
798 vout.
crucial(
"Error at %s: unsupported arg types\n", __func__);
801 return cmplx(0.0, 0.0);
815 const double *RESTRICT yp = y.
ptr(0);
816 const double *RESTRICT xp = x.
ptr(0);
818 int ith, nth, is, ns;
819 set_threadtask(ith, nth, is, ns, Nvol);
829 for (
int ex = 0; ex < Nex; ++ex) {
830 for (
int site = is; site < ns; ++site) {
831 int kv = Nin * (site + Nvol * ex);
832 for (
int k = 0; k < Nin2; ++k) {
835 prd_r += yp[kr + kv] * xp[kr + kv] + yp[ki + kv] * xp[ki + kv];
836 prd_i += yp[kr + kv] * xp[ki + kv] - yp[ki + kv] * xp[kr + kv];
837 prd_x2 += xp[kr + kv] * xp[kr + kv] + xp[ki + kv] * xp[ki + kv];
838 prd_y2 += yp[kr + kv] * yp[kr + kv] + yp[ki + kv] * yp[ki + kv];
843 double prd[4] = { prd_r, prd_i, prd_x2, prd_y2 };
846 yx = cmplx(prd[0], prd[1]);
853 yx = cmplx(yx_re, 0.0);
855 vout.
crucial(
"Error at %s: unsupported arg types.\n", __func__);
863 const Field& y,
const int exy,
864 const Field& x,
const int exx)
868 assert(x.
nin() == Nin);
869 assert(x.
nvol() == Nvol);
871 const double *RESTRICT yp = y.
ptr(0, 0, exy);
872 const double *RESTRICT xp = x.
ptr(0, 0, exx);
874 int ith, nth, is, ns;
875 set_threadtask(ith, nth, is, ns, Nvol);
885 for (
int site = is; site < ns; ++site) {
887 for (
int k = 0; k < Nin2; ++k) {
890 prd_r += yp[kr + kv] * xp[kr + kv] + yp[ki + kv] * xp[ki + kv];
891 prd_i += yp[kr + kv] * xp[ki + kv] - yp[ki + kv] * xp[kr + kv];
892 prd_x2 += xp[kr + kv] * xp[kr + kv] + xp[ki + kv] * xp[ki + kv];
893 prd_y2 += yp[kr + kv] * yp[kr + kv] + yp[ki + kv] * yp[ki + kv];
897 double prd[4] = { prd_r, prd_i, prd_x2, prd_y2 };
900 yx = cmplx(prd[0], prd[1]);
907 yx = cmplx(yx_re, 0.0);
909 vout.
crucial(
"Error at %s: unsupported arg types.\n", __func__);