19 #if defined USE_GROUP_SU3
21 #elif defined USE_GROUP_SU2
23 #elif defined USE_GROUP_SU_N
30 #ifdef USE_FACTORY_AUTOREGISTER
32 bool init = Fopr_Wilson::register_factory();
59 vout.
crucial(
"Error at %s: unsupported gamma-matrix type: %s\n",
99 std::string imple_gauge = imple_Nc();
101 imple_gauge.c_str());
194 vout.
crucial(
"Error at %s: input parameter not found.\n",
205 const std::vector<int> bc)
207 assert(bc.size() ==
m_Ndim);
228 for (
int mu = 0; mu <
m_Ndim; ++mu) {
259 if (ith == 0)
m_mode = mode;
269 }
else if (
m_mode ==
"Ddag") {
271 }
else if (
m_mode ==
"DdagD") {
273 }
else if (
m_mode ==
"DDdag") {
275 }
else if (
m_mode ==
"H") {
290 }
else if (
m_mode ==
"Ddag") {
292 }
else if (
m_mode ==
"DdagD") {
294 }
else if (
m_mode ==
"DDdag") {
296 }
else if (
m_mode ==
"H") {
308 const std::string mode)
312 }
else if (mode ==
"Ddag") {
314 }
else if (mode ==
"DdagD") {
316 }
else if (mode ==
"DDdag") {
318 }
else if (mode ==
"H") {
330 const std::string mode)
334 }
else if (mode ==
"Ddag") {
336 }
else if (mode ==
"DdagD") {
338 }
else if (mode ==
"DDdag") {
340 }
else if (mode ==
"H") {
355 }
else if (mu == 1) {
357 }
else if (mu == 2) {
359 }
else if (mu == 3) {
378 }
else if (mu == 1) {
380 }
else if (mu == 2) {
382 }
else if (mu == 3) {
401 }
else if (
m_repr ==
"Chiral") {
413 }
else if (
m_repr ==
"Chiral") {
422 const Field& w,
const int ex2)
426 }
else if (
m_repr ==
"Chiral") {
471 const Field& w,
const int ex2)
474 double *RESTRICT vp = v.
ptr(Ninvol * ex1);
475 const double *RESTRICT wp = w.
ptr(Ninvol * ex2);
476 const double *RESTRICT up =
m_U->
ptr(0);
478 int ith, nth, is, ns;
479 set_threadtask(ith, nth, is, ns,
m_Nvol);
481 int Nvc2 =
m_Nvc * 2;
489 for (
int site = is; site < ns; ++site) {
499 int ixyt =
ixy + Nxy *
it;
502 int in = Nvcd * site;
505 int ix1 = Nvc2 *
iyzt;
510 for (
int ivc = 0; ivc <
NVC; ++ivc) {
518 int ix1 = Nvc2 *
iyzt;
522 for (
int ic = 0; ic <
m_Nc; ++ic) {
525 int ici = 2 * ic + 1;
534 int ix1 = Nvc2 * ixzt;
539 for (
int ivc = 0; ivc <
NVC; ++ivc) {
547 int ix1 = Nvc2 * ixzt;
551 for (
int ic = 0; ic <
m_Nc; ++ic) {
554 int ici = 2 * ic + 1;
563 int ix1 = Nvc2 * ixyt;
568 for (
int ivc = 0; ivc <
NVC; ++ivc) {
576 int ix1 = Nvc2 * ixyt;
580 for (
int ic = 0; ic <
m_Nc; ++ic) {
583 int ici = 2 * ic + 1;
592 int ix1 = Nvc2 *
ixyz;
597 for (
int ivc = 0; ivc <
NVC; ++ivc) {
605 int ix1 = Nvc2 *
ixyz;
609 for (
int ic = 0; ic <
m_Nc; ++ic) {
612 int ici = 2 * ic + 1;
643 for (
int site = is; site < ns; ++site) {
651 int ixy = site % Nxy;
653 int ixyt =
ixy + Nxy *
it;
656 int iv = Nvcd * site;
658 for (
int ivcd = 0; ivcd < Nvcd; ++ivcd) {
668 for (
int ic = 0; ic <
m_Nc; ++ic) {
677 int ix1 = Nvc2 *
iyzt;
680 for (
int ic = 0; ic <
m_Nc; ++ic) {
696 for (
int ic = 0; ic <
m_Nc; ++ic) {
698 double wt1r = mult_udagv_r(&up[ic2 + ig],
vt1,
m_Nc);
699 double wt1i = mult_udagv_i(&up[ic2 + ig],
vt1,
m_Nc);
700 double wt2r = mult_udagv_r(&up[ic2 + ig],
vt2,
m_Nc);
701 double wt2i = mult_udagv_i(&up[ic2 + ig],
vt2,
m_Nc);
705 int ix1 = Nvc2 *
iyzt;
708 for (
int ic = 0; ic <
m_Nc; ++ic) {
723 for (
int ic = 0; ic <
m_Nc; ++ic) {
733 int ix1 = Nvc2 * ixzt;
735 for (
int ic = 0; ic <
m_Nc; ++ic) {
751 for (
int ic = 0; ic <
m_Nc; ++ic) {
753 double wt1r = mult_udagv_r(&up[ic2 + ig],
vt1,
m_Nc);
754 double wt1i = mult_udagv_i(&up[ic2 + ig],
vt1,
m_Nc);
755 double wt2r = mult_udagv_r(&up[ic2 + ig],
vt2,
m_Nc);
756 double wt2i = mult_udagv_i(&up[ic2 + ig],
vt2,
m_Nc);
760 int ix1 = Nvc2 * ixzt;
763 for (
int ic = 0; ic <
m_Nc; ++ic) {
778 for (
int ic = 0; ic <
m_Nc; ++ic) {
788 int ix1 = Nvc2 * ixyt;
790 for (
int ic = 0; ic <
m_Nc; ++ic) {
806 for (
int ic = 0; ic <
m_Nc; ++ic) {
808 double wt1r = mult_udagv_r(&up[ic2 + ig],
vt1,
m_Nc);
809 double wt1i = mult_udagv_i(&up[ic2 + ig],
vt1,
m_Nc);
810 double wt2r = mult_udagv_r(&up[ic2 + ig],
vt2,
m_Nc);
811 double wt2i = mult_udagv_i(&up[ic2 + ig],
vt2,
m_Nc);
815 int ix1 = Nvc2 * ixyt;
818 for (
int ic = 0; ic <
m_Nc; ++ic) {
828 int nei =
ixyz + Nxyz * (
it + 1);
833 for (
int ic = 0; ic <
m_Nc; ++ic) {
843 int ix1 = Nvc2 *
ixyz;
845 for (
int ic = 0; ic <
m_Nc; ++ic) {
856 int nei =
ixyz + Nxyz * (
it - 1);
861 for (
int ic = 0; ic <
m_Nc; ++ic) {
863 double wt1r = mult_udagv_r(&up[ic2 + ig],
vt1,
m_Nc);
864 double wt1i = mult_udagv_i(&up[ic2 + ig],
vt1,
m_Nc);
865 double wt2r = mult_udagv_r(&up[ic2 + ig],
vt2,
m_Nc);
866 double wt2i = mult_udagv_i(&up[ic2 + ig],
vt2,
m_Nc);
870 int ix1 = Nvc2 *
ixyz;
873 for (
int ic = 0; ic <
m_Nc; ++ic) {
875 int ici = 2 * ic + 1;
884 for (
int ivcd = 0; ivcd < Nvcd; ++ivcd) {
885 vp[ivcd + iv] = -
m_kappa * vp[ivcd + iv] + wp[ivcd + iv];
895 const Field& w,
const int ex2)
898 double *RESTRICT vp = v.
ptr(Ninvol * ex1);
899 const double *RESTRICT wp = w.
ptr(Ninvol * ex2);
900 const double *RESTRICT up =
m_U->
ptr(0);
902 int ith, nth, is, ns;
903 set_threadtask(ith, nth, is, ns,
m_Nvol);
905 int Nvc2 =
m_Nvc * 2;
913 for (
int site = is; site < ns; ++site) {
923 int ixyt =
ixy + Nxy *
it;
926 int in = Nvcd * site;
929 int ix1 = Nvc2 *
iyzt;
934 for (
int ivc = 0; ivc <
NVC; ++ivc) {
942 int ix1 = Nvc2 *
iyzt;
946 for (
int ic = 0; ic <
m_Nc; ++ic) {
949 int ici = 2 * ic + 1;
958 int ix1 = Nvc2 * ixzt;
963 for (
int ivc = 0; ivc <
NVC; ++ivc) {
971 int ix1 = Nvc2 * ixzt;
975 for (
int ic = 0; ic <
m_Nc; ++ic) {
978 int ici = 2 * ic + 1;
987 int ix1 = Nvc2 * ixyt;
992 for (
int ivc = 0; ivc <
NVC; ++ivc) {
1000 int ix1 = Nvc2 * ixyt;
1004 for (
int ic = 0; ic <
m_Nc; ++ic) {
1007 int ici = 2 * ic + 1;
1016 int ix1 = Nvc2 *
ixyz;
1021 for (
int ivc = 0; ivc <
NVC; ++ivc) {
1029 int ix1 = Nvc2 *
ixyz;
1033 for (
int ic = 0; ic <
m_Nc; ++ic) {
1036 int ici = 2 * ic + 1;
1067 for (
int site = is; site < ns; ++site) {
1075 int ixy = site % Nxy;
1077 int ixyt =
ixy + Nxy *
it;
1080 int iv = Nvcd * site;
1082 for (
int ivcd = 0; ivcd < Nvcd; ++ivcd) {
1083 vp[ivcd + iv] = 0.0;
1088 int in = Nvcd * nei;
1092 for (
int ic = 0; ic <
m_Nc; ++ic) {
1094 double wt1r = mult_uv_r(&up[ic2 + ig],
vt1,
m_Nc);
1095 double wt1i = mult_uv_i(&up[ic2 + ig],
vt1,
m_Nc);
1096 double wt2r = mult_uv_r(&up[ic2 + ig],
vt2,
m_Nc);
1097 double wt2i = mult_uv_i(&up[ic2 + ig],
vt2,
m_Nc);
1101 int ix1 = Nvc2 *
iyzt;
1104 for (
int ic = 0; ic <
m_Nc; ++ic) {
1117 int in = Nvcd * nei;
1120 for (
int ic = 0; ic <
m_Nc; ++ic) {
1122 double wt1r = mult_udagv_r(&up[ic2 + ig],
vt1,
m_Nc);
1123 double wt1i = mult_udagv_i(&up[ic2 + ig],
vt1,
m_Nc);
1124 double wt2r = mult_udagv_r(&up[ic2 + ig],
vt2,
m_Nc);
1125 double wt2i = mult_udagv_i(&up[ic2 + ig],
vt2,
m_Nc);
1129 int ix1 = Nvc2 *
iyzt;
1132 for (
int ic = 0; ic <
m_Nc; ++ic) {
1144 int in = Nvcd * nei;
1147 for (
int ic = 0; ic <
m_Nc; ++ic) {
1149 double wt1r = mult_uv_r(&up[ic2 + ig],
vt1,
m_Nc);
1150 double wt1i = mult_uv_i(&up[ic2 + ig],
vt1,
m_Nc);
1151 double wt2r = mult_uv_r(&up[ic2 + ig],
vt2,
m_Nc);
1152 double wt2i = mult_uv_i(&up[ic2 + ig],
vt2,
m_Nc);
1157 int ix1 = Nvc2 * ixzt;
1159 for (
int ic = 0; ic <
m_Nc; ++ic) {
1172 int in = Nvcd * nei;
1175 for (
int ic = 0; ic <
m_Nc; ++ic) {
1177 double wt1r = mult_udagv_r(&up[ic2 + ig],
vt1,
m_Nc);
1178 double wt1i = mult_udagv_i(&up[ic2 + ig],
vt1,
m_Nc);
1179 double wt2r = mult_udagv_r(&up[ic2 + ig],
vt2,
m_Nc);
1180 double wt2i = mult_udagv_i(&up[ic2 + ig],
vt2,
m_Nc);
1184 int ix1 = Nvc2 * ixzt;
1187 for (
int ic = 0; ic <
m_Nc; ++ic) {
1199 int in = Nvcd * nei;
1202 for (
int ic = 0; ic <
m_Nc; ++ic) {
1204 double wt1r = mult_uv_r(&up[ic2 + ig],
vt1,
m_Nc);
1205 double wt1i = mult_uv_i(&up[ic2 + ig],
vt1,
m_Nc);
1206 double wt2r = mult_uv_r(&up[ic2 + ig],
vt2,
m_Nc);
1207 double wt2i = mult_uv_i(&up[ic2 + ig],
vt2,
m_Nc);
1212 int ix1 = Nvc2 * ixyt;
1214 for (
int ic = 0; ic <
m_Nc; ++ic) {
1227 int in = Nvcd * nei;
1230 for (
int ic = 0; ic <
m_Nc; ++ic) {
1232 double wt1r = mult_udagv_r(&up[ic2 + ig],
vt1,
m_Nc);
1233 double wt1i = mult_udagv_i(&up[ic2 + ig],
vt1,
m_Nc);
1234 double wt2r = mult_udagv_r(&up[ic2 + ig],
vt2,
m_Nc);
1235 double wt2i = mult_udagv_i(&up[ic2 + ig],
vt2,
m_Nc);
1239 int ix1 = Nvc2 * ixyt;
1242 for (
int ic = 0; ic <
m_Nc; ++ic) {
1252 int nei =
ixyz + Nxyz * (
it + 1);
1254 int in = Nvcd * nei;
1257 for (
int ic = 0; ic <
m_Nc; ++ic) {
1259 double wt1r = mult_uv_r(&up[ic2 + ig],
vt1,
m_Nc);
1260 double wt1i = mult_uv_i(&up[ic2 + ig],
vt1,
m_Nc);
1261 double wt2r = mult_uv_r(&up[ic2 + ig],
vt2,
m_Nc);
1262 double wt2i = mult_uv_i(&up[ic2 + ig],
vt2,
m_Nc);
1267 int ix1 = Nvc2 *
ixyz;
1269 for (
int ic = 0; ic <
m_Nc; ++ic) {
1280 int nei =
ixyz + Nxyz * (
it - 1);
1282 int in = Nvcd * nei;
1285 for (
int ic = 0; ic <
m_Nc; ++ic) {
1287 double wt1r = mult_udagv_r(&up[ic2 + ig],
vt1,
m_Nc);
1288 double wt1i = mult_udagv_i(&up[ic2 + ig],
vt1,
m_Nc);
1289 double wt2r = mult_udagv_r(&up[ic2 + ig],
vt2,
m_Nc);
1290 double wt2i = mult_udagv_i(&up[ic2 + ig],
vt2,
m_Nc);
1294 int ix1 = Nvc2 *
ixyz;
1297 for (
int ic = 0; ic <
m_Nc; ++ic) {
1299 int ici = 2 * ic + 1;
1308 for (
int ivcd = 0; ivcd < Nvcd; ++ivcd) {
1309 vp[ivcd + iv] = -
m_kappa * vp[ivcd + iv] + wp[ivcd + iv];
1319 const Field& f,
const int ex2)
1336 const Field& f,
const int ex2)
1362 const Field& v,
const int ex2,
const int ipm)
1368 }
else if (ipm == -1) {
1387 double *wp = w.
ptr(0);
1389 int ith, nth, is, ns;
1390 set_threadtask(ith, nth, is, ns,
m_Nvol);
1396 for (
int site = is; site < ns; ++site) {
1397 for (
int ivcd = 0; ivcd < Nvcd; ++ivcd) {
1398 wp[ivcd + Nvcd * site] = 0.0;
1408 const double fac,
const Field& w)
1410 double *vp = v.
ptr(0);
1411 const double *wp = w.
ptr(0);
1413 int ith, nth, is, ns;
1414 set_threadtask(ith, nth, is, ns,
m_Nvol);
1420 for (
int site = is; site < ns; ++site) {
1421 for (
int ivcd = 0; ivcd < Nvcd; ++ivcd) {
1422 vp[ivcd + Nvcd * site]
1423 = fac * vp[ivcd + Nvcd * site] + wp[ivcd + Nvcd * site];
1434 double *vp = v.
ptr(0);
1435 const double *wp = w.
ptr(0);
1437 int ith, nth, is, ns;
1438 set_threadtask(ith, nth, is, ns,
m_Nvol);
1444 for (
int site = is; site < ns; ++site) {
1445 mult_gamma5_dirac(&vp[Nvcd * site], &wp[Nvcd * site],
m_Nc);
1455 double *vp = v.
ptr(0);
1456 const double *wp = w.
ptr(0);
1458 int ith, nth, is, ns;
1459 set_threadtask(ith, nth, is, ns,
m_Nvol);
1465 for (
int site = is; site < ns; ++site) {
1466 mult_gamma5_chiral(&vp[Nvcd * site], &wp[Nvcd * site],
m_Nc);
1478 int Nvc2 =
m_Nvc * 2;
1483 double *vp = v.
ptr(0);
1484 const double *wp = w.
ptr(0);
1487 int ith, nth, is, ns;
1488 set_threadtask(ith, nth, is, ns,
m_Nvol);
1492 for (
int site = is; site < ns; ++site) {
1496 int in = Nvcd * site;
1497 int ix1 = Nvc2 *
iyzt;
1501 for (
int ivc = 0; ivc <
NVC; ++ivc) {
1517 for (
int site = is; site < ns; ++site) {
1521 int iv = Nvcd * site;
1522 int ig =
m_Ndf * site;
1525 int in = Nvcd * nei;
1528 for (
int ic = 0; ic <
m_Nc; ++ic) {
1530 double wt1r = mult_uv_r(&up[ic2 + ig],
vt1,
m_Nc);
1531 double wt1i = mult_uv_i(&up[ic2 + ig],
vt1,
m_Nc);
1532 double wt2r = mult_uv_r(&up[ic2 + ig],
vt2,
m_Nc);
1533 double wt2i = mult_uv_i(&up[ic2 + ig],
vt2,
m_Nc);
1537 int ix1 = Nvc2 *
iyzt;
1539 for (
int ic = 0; ic <
m_Nc; ++ic) {
1559 int Nvc2 =
m_Nvc * 2;
1564 double *vp = v.
ptr(0);
1565 const double *wp = w.
ptr(0);
1568 int ith, nth, is, ns;
1569 set_threadtask(ith, nth, is, ns,
m_Nvol);
1573 for (
int site = is; site < ns; ++site) {
1577 int in = Nvcd * site;
1578 int ig =
m_Ndf * site;
1579 int ix1 = Nvc2 *
iyzt;
1584 for (
int ic = 0; ic <
m_Nc; ++ic) {
1587 int ici = 2 * ic + 1;
1605 for (
int site = is; site < ns; ++site) {
1609 int iv = Nvcd * site;
1612 int ig =
m_Ndf * nei;
1613 int in = Nvcd * nei;
1616 for (
int ic = 0; ic <
m_Nc; ++ic) {
1618 double wt1r = mult_udagv_r(&up[ic2 + ig],
vt1,
m_Nc);
1619 double wt1i = mult_udagv_i(&up[ic2 + ig],
vt1,
m_Nc);
1620 double wt2r = mult_udagv_r(&up[ic2 + ig],
vt2,
m_Nc);
1621 double wt2i = mult_udagv_i(&up[ic2 + ig],
vt2,
m_Nc);
1625 int ix1 = Nvc2 *
iyzt;
1627 for (
int ic = 0; ic <
m_Nc; ++ic) {
1646 int Nvc2 =
m_Nvc * 2;
1651 double *vp = v.
ptr(0);
1652 const double *wp = w.
ptr(0);
1655 int ith, nth, is, ns;
1656 set_threadtask(ith, nth, is, ns,
m_Nvol);
1660 for (
int site = is; site < ns; ++site) {
1667 int in = Nvcd * site;
1668 int ix1 = Nvc2 * ixzt;
1672 for (
int ivc = 0; ivc <
NVC; ++ivc) {
1688 for (
int site = is; site < ns; ++site) {
1695 int iv = Nvcd * site;
1696 int ig =
m_Ndf * site;
1699 int in = Nvcd * nei;
1702 for (
int ic = 0; ic <
m_Nc; ++ic) {
1704 double wt1r = mult_uv_r(&up[ic2 + ig],
vt1,
m_Nc);
1705 double wt1i = mult_uv_i(&up[ic2 + ig],
vt1,
m_Nc);
1706 double wt2r = mult_uv_r(&up[ic2 + ig],
vt2,
m_Nc);
1707 double wt2i = mult_uv_i(&up[ic2 + ig],
vt2,
m_Nc);
1711 int ix1 = Nvc2 * ixzt;
1713 for (
int ic = 0; ic <
m_Nc; ++ic) {
1733 int Nvc2 =
m_Nvc * 2;
1738 double *vp = v.
ptr(0);
1739 const double *wp = w.
ptr(0);
1742 int ith, nth, is, ns;
1743 set_threadtask(ith, nth, is, ns,
m_Nvol);
1747 for (
int site = is; site < ns; ++site) {
1754 int in = Nvcd * site;
1755 int ig =
m_Ndf * site;
1756 int ix1 = Nvc2 * ixzt;
1761 for (
int ic = 0; ic <
m_Nc; ++ic) {
1764 int ici = 2 * ic + 1;
1782 for (
int site = is; site < ns; ++site) {
1789 int iv = Nvcd * site;
1792 int ig =
m_Ndf * nei;
1793 int in = Nvcd * nei;
1796 for (
int ic = 0; ic <
m_Nc; ++ic) {
1798 double wt1r = mult_udagv_r(&up[ic2 + ig],
vt1,
m_Nc);
1799 double wt1i = mult_udagv_i(&up[ic2 + ig],
vt1,
m_Nc);
1800 double wt2r = mult_udagv_r(&up[ic2 + ig],
vt2,
m_Nc);
1801 double wt2i = mult_udagv_i(&up[ic2 + ig],
vt2,
m_Nc);
1805 int ix1 = Nvc2 * ixzt;
1807 for (
int ic = 0; ic <
m_Nc; ++ic) {
1826 int Nvc2 =
m_Nvc * 2;
1831 double *vp = v.
ptr(0);
1832 const double *wp = w.
ptr(0);
1835 int ith, nth, is, ns;
1836 set_threadtask(ith, nth, is, ns,
m_Nvol);
1842 for (
int site = is; site < ns; ++site) {
1843 int ixy = site % Nxy;
1844 int izt = site / Nxy;
1847 int ixyt =
ixy + Nxy *
it;
1849 int in = Nvcd * site;
1850 int ix1 = Nvc2 * ixyt;
1854 for (
int ivc = 0; ivc <
NVC; ++ivc) {
1870 for (
int site = is; site < ns; ++site) {
1871 int ixy = site % Nxy;
1872 int izt = site / Nxy;
1875 int ixyt =
ixy + Nxy *
it;
1877 int iv = Nvcd * site;
1878 int ig =
m_Ndf * site;
1881 int in = Nvcd * nei;
1884 for (
int ic = 0; ic <
m_Nc; ++ic) {
1886 double wt1r = mult_uv_r(&up[ic2 + ig],
vt1,
m_Nc);
1887 double wt1i = mult_uv_i(&up[ic2 + ig],
vt1,
m_Nc);
1888 double wt2r = mult_uv_r(&up[ic2 + ig],
vt2,
m_Nc);
1889 double wt2i = mult_uv_i(&up[ic2 + ig],
vt2,
m_Nc);
1893 int ix1 = Nvc2 * ixyt;
1895 for (
int ic = 0; ic <
m_Nc; ++ic) {
1915 int Nvc2 =
m_Nvc * 2;
1920 double *vp = v.
ptr(0);
1921 const double *wp = w.
ptr(0);
1924 int ith, nth, is, ns;
1925 set_threadtask(ith, nth, is, ns,
m_Nvol);
1931 for (
int site = is; site < ns; ++site) {
1932 int ixy = site % Nxy;
1933 int izt = site / Nxy;
1936 int ixyt =
ixy + Nxy *
it;
1938 int in = Nvcd * site;
1939 int ig =
m_Ndf * site;
1940 int ix1 = Nvc2 * ixyt;
1945 for (
int ic = 0; ic <
m_Nc; ++ic) {
1948 int ici = 2 * ic + 1;
1966 for (
int site = is; site < ns; ++site) {
1967 int ixy = site % Nxy;
1968 int izt = site / Nxy;
1971 int ixyt =
ixy + Nxy *
it;
1973 int iv = Nvcd * site;
1976 int ig =
m_Ndf * nei;
1977 int in = Nvcd * nei;
1980 for (
int ic = 0; ic <
m_Nc; ++ic) {
1982 double wt1r = mult_udagv_r(&up[ic2 + ig],
vt1,
m_Nc);
1983 double wt1i = mult_udagv_i(&up[ic2 + ig],
vt1,
m_Nc);
1984 double wt2r = mult_udagv_r(&up[ic2 + ig],
vt2,
m_Nc);
1985 double wt2i = mult_udagv_i(&up[ic2 + ig],
vt2,
m_Nc);
1989 int ix1 = Nvc2 * ixyt;
1991 for (
int ic = 0; ic <
m_Nc; ++ic) {
2010 int Nvc2 =
m_Nvc * 2;
2015 double *vp = v.
ptr(0);
2016 const double *wp = w.
ptr(0);
2019 int ith, nth, is, ns;
2020 set_threadtask(ith, nth, is, ns,
m_Nvol);
2026 for (
int site = is; site < ns; ++site) {
2027 int ixyz = site % Nxyz;
2028 int it = site / Nxyz;
2030 int in = Nvcd * site;
2031 int ix1 = Nvc2 *
ixyz;
2035 for (
int ivc = 0; ivc <
NVC; ++ivc) {
2051 for (
int site = is; site < ns; ++site) {
2052 int ixyz = site % Nxyz;
2053 int it = site / Nxyz;
2054 int nei =
ixyz + Nxyz * (
it + 1);
2055 int iv = Nvcd * site;
2056 int ig =
m_Ndf * site;
2059 int in = Nvcd * nei;
2062 for (
int ic = 0; ic <
m_Nc; ++ic) {
2064 double wt1r = mult_uv_r(&up[ic2 + ig],
vt1,
m_Nc);
2065 double wt1i = mult_uv_i(&up[ic2 + ig],
vt1,
m_Nc);
2066 double wt2r = mult_uv_r(&up[ic2 + ig],
vt2,
m_Nc);
2067 double wt2i = mult_uv_i(&up[ic2 + ig],
vt2,
m_Nc);
2071 int ix1 = Nvc2 *
ixyz;
2073 for (
int ic = 0; ic <
m_Nc; ++ic) {
2093 int Nvc2 =
m_Nvc * 2;
2098 double *vp = v.
ptr(0);
2099 const double *wp = w.
ptr(0);
2102 int ith, nth, is, ns;
2103 set_threadtask(ith, nth, is, ns,
m_Nvol);
2109 for (
int site = is; site < ns; ++site) {
2110 int ixyz = site % Nxyz;
2111 int it = site / Nxyz;
2113 int in = Nvcd * site;
2114 int ig =
m_Ndf * site;
2115 int ix1 = Nvc2 *
ixyz;
2120 for (
int ic = 0; ic <
m_Nc; ++ic) {
2123 int ici = 2 * ic + 1;
2141 for (
int site = is; site < ns; ++site) {
2142 int ixyz = site % Nxyz;
2143 int it = site / Nxyz;
2144 int nei =
ixyz + Nxyz * (
it - 1);
2145 int iv = Nvcd * site;
2148 int ig =
m_Ndf * nei;
2149 int in = Nvcd * nei;
2152 for (
int ic = 0; ic <
m_Nc; ++ic) {
2154 double wt1r = mult_udagv_r(&up[ic2 + ig],
vt1,
m_Nc);
2155 double wt1i = mult_udagv_i(&up[ic2 + ig],
vt1,
m_Nc);
2156 double wt2r = mult_udagv_r(&up[ic2 + ig],
vt2,
m_Nc);
2157 double wt2i = mult_udagv_i(&up[ic2 + ig],
vt2,
m_Nc);
2161 int ix1 = Nvc2 *
ixyz;
2163 for (
int ic = 0; ic <
m_Nc; ++ic) {
2165 int ici = 2 * ic + 1;
2184 int Nvc2 =
m_Nvc * 2;
2189 double *vp = v.
ptr(0);
2190 const double *wp = w.
ptr(0);
2193 int ith, nth, is, ns;
2194 set_threadtask(ith, nth, is, ns,
m_Nvol);
2200 for (
int site = is; site < ns; ++site) {
2201 int ixyz = site % Nxyz;
2202 int it = site / Nxyz;
2204 int in = Nvcd * site;
2205 int ix1 = Nvc2 *
ixyz;
2209 for (
int ivc = 0; ivc <
NVC; ++ivc) {
2225 for (
int site = is; site < ns; ++site) {
2226 int ixyz = site % Nxyz;
2227 int it = site / Nxyz;
2228 int nei =
ixyz + Nxyz * (
it + 1);
2229 int iv = Nvcd * site;
2230 int ig =
m_Ndf * site;
2233 int in = Nvcd * nei;
2236 for (
int ic = 0; ic <
m_Nc; ++ic) {
2238 double wt1r = mult_uv_r(&up[ic2 + ig],
vt1,
m_Nc);
2239 double wt1i = mult_uv_i(&up[ic2 + ig],
vt1,
m_Nc);
2240 double wt2r = mult_uv_r(&up[ic2 + ig],
vt2,
m_Nc);
2241 double wt2i = mult_uv_i(&up[ic2 + ig],
vt2,
m_Nc);
2245 int ix1 = Nvc2 *
ixyz;
2247 for (
int ic = 0; ic <
m_Nc; ++ic) {
2267 int Nvc2 =
m_Nvc * 2;
2272 double *vp = v.
ptr(0);
2273 const double *wp = w.
ptr(0);
2276 int ith, nth, is, ns;
2277 set_threadtask(ith, nth, is, ns,
m_Nvol);
2283 for (
int site = is; site < ns; ++site) {
2284 int ixyz = site % Nxyz;
2285 int it = site / Nxyz;
2287 int in = Nvcd * site;
2288 int ig =
m_Ndf * site;
2289 int ix1 = Nvc2 *
ixyz;
2294 for (
int ic = 0; ic <
m_Nc; ++ic) {
2297 int ici = 2 * ic + 1;
2315 for (
int site = is; site < ns; ++site) {
2316 int ixyz = site % Nxyz;
2317 int it = site / Nxyz;
2318 int nei =
ixyz + Nxyz * (
it - 1);
2319 int iv = Nvcd * site;
2322 int ig =
m_Ndf * nei;
2323 int in = Nvcd * nei;
2326 for (
int ic = 0; ic <
m_Nc; ++ic) {
2328 double wt1r = mult_udagv_r(&up[ic2 + ig],
vt1,
m_Nc);
2329 double wt1i = mult_udagv_i(&up[ic2 + ig],
vt1,
m_Nc);
2330 double wt2r = mult_udagv_r(&up[ic2 + ig],
vt2,
m_Nc);
2331 double wt2i = mult_udagv_i(&up[ic2 + ig],
vt2,
m_Nc);
2335 int ix1 = Nvc2 *
ixyz;
2337 for (
int ic = 0; ic <
m_Nc; ++ic) {
2366 }
else if (
m_repr ==
"Chiral") {
2374 double flop = flop_site * (Nvol * NPE);
2376 if ((
m_mode ==
"DdagD") || (
m_mode ==
"DDdag")) flop *= 2;
2378 double gflop = flop * 1.e-9;