Go to the documentation of this file.
15 #ifdef USE_FACTORY_AUTOREGISTER
17 bool init = Fopr_NonRelativistic::register_factory();
22 =
"Fopr_NonRelativistic";
26 inline void set_threadtask(
int& ith,
int& nth,
int& is,
int& ns,
31 is = size * ith / nth;
32 ns = size * (ith + 1) / nth;
36 double mult_Gn_r(
const double *g,
const double *w,
int Nc)
38 return g[0] * w[0] - g[1] * w[1]
39 + g[2] * w[2] - g[3] * w[3]
40 + g[4] * w[4] - g[5] * w[5];
44 double mult_Gn_i(
const double *g,
const double *w,
int Nc)
46 return g[0] * w[1] + g[1] * w[0]
47 + g[2] * w[3] + g[3] * w[2]
48 + g[4] * w[5] + g[5] * w[4];
52 double mult_Gd_r(
const double *g,
const double *w,
int Nc)
54 return g[0] * w[0] + g[1] * w[1]
55 + g[6] * w[2] + g[7] * w[3]
56 + g[12] * w[4] + g[13] * w[5];
60 double mult_Gd_i(
const double *g,
const double *w,
int Nc)
62 return g[0] * w[1] - g[1] * w[0]
63 + g[6] * w[3] - g[7] * w[2]
64 + g[12] * w[5] - g[13] * w[4];
102 for (
int j = 0; j < 6; ++j) {
109 for (
int it = 0; it <
m_Nt; ++it) {
151 const std::string str_vlevel = params.
get_string(
"verbose_level");
162 std::vector<double> coeff;
163 std::string evolution_type;
164 std::string correction_terms;
168 err += params.
fetch_int(
"stabilization_parameter", nstab);
172 err += params.
fetch_string(
"evolution_type", evolution_type);
173 err += params.
fetch_string(
"correction_terms", correction_terms);
182 evolution_type, correction_terms);
194 const std::vector<double> coeff,
195 const std::vector<int> bc,
196 const std::string evolution_type,
197 const std::string correction_terms)
199 assert(bc.size() ==
m_Ndim);
210 vout.
crucial(
m_vl,
"Error at %s: inconsistent number of coefficients.\n",
226 for (
int mu = 0; mu <
m_Ndim; ++mu) {
269 if (ith == 0)
m_mode = mode;
280 }
else if (
m_mode ==
"Rotation") {
293 if (
m_mode ==
"Rotation") {
305 const std::string mode)
307 if (mode ==
"Evolve") {
309 }
else if (mode ==
"Rotation") {
321 const std::string mode)
323 if (mode ==
"Rotation") {
336 int ith, nth, is, ns;
337 set_threadtask(ith, nth, is, ns,
m_Nvol);
341 for (
int site = is; site < ns; ++site) {
342 for (
int id = 0;
id <
m_Nd2; ++id) {
343 for (
int ivc = 0; ivc <
m_Nvc; ++ivc) {
344 int ivcd = ivc +
m_Nvc * id;
345 int ivcd2 = ivc +
m_Nvc * (2 + id);
346 double w1 = w.
cmp(ivcd, site, 0);
347 double w2 = w.
cmp(ivcd2, site, 0);
348 v.
set(ivcd2, site, 0, w1);
349 v.
set(ivcd, site, 0, w2);
392 for (
int itime = 1; itime <
m_Ltime - 1; ++itime) {
394 int it1 = itime1 %
m_Nt;
396 int it2 = itime2 %
m_Nt;
414 int ith, nth, is, ns;
415 set_threadtask(ith, nth, is, ns,
m_Nspc);
417 for (
int it = 0; it <
m_Nt; ++it) {
418 for (
int ispc = is; ispc < ns; ++ispc) {
419 for (
int id = 0;
id <
m_Nd2; ++id) {
420 for (
int ivc = 0; ivc <
m_Nvc; ++ivc) {
421 int ivcd = ivc +
m_Nvc * id;
422 int ivcd2 = ivc +
m_Nvc * (2 + id);
423 double Xt1 =
m_Xt[it].cmp(ivcd, ispc, 0);
425 v.
set(ivcd2, ispc +
m_Nspc * it, 0, 0.0);
440 int ith, nth, is, ns;
441 set_threadtask(ith, nth, is, ns,
m_Nspc);
443 for (
int it = 0; it <
m_Nt; ++it) {
444 for (
int ispc = is; ispc < ns; ++ispc) {
445 for (
int id = 0;
id <
m_Nd2; ++id) {
446 for (
int ivc = 0; ivc <
m_Nvc; ++ivc) {
447 int ivcd = ivc +
m_Nvc * id;
448 int ivcd2 = ivc +
m_Nvc * (2 + id);
449 double w1 = w.
cmp(ivcd, ispc +
m_Nspc * it, 0);
450 double w2 = w.
cmp(ivcd2, ispc +
m_Nspc * it, 0);
459 int itime = it +
m_Nt * IPEt;
473 for (
int ispc = is; ispc < ns; ++ispc) {
474 for (
int id = 0;
id <
m_Nd2; ++id) {
475 for (
int ivc = 0; ivc <
m_Nvc; ++ivc) {
476 int ivcd = ivc +
m_Nvc * id;
477 double v1 =
m_Xt[0].cmp(ivcd, ispc, 0);
496 for (
int ispc = is; ispc < ns; ++ispc) {
497 for (
int id = 0;
id <
m_Nd2; ++id) {
498 for (
int ivc = 0; ivc <
m_Nvc; ++ivc) {
499 int ivcd = ivc +
m_Nvc * id;
500 int ivcd2 = ivc +
m_Nvc * (2 + id);
501 double v2 =
m_Xt[0].cmp(ivcd, ispc, 0);
513 const int jd,
const int itime)
515 double fac = -1.0 / (2.0 *
m_MQ);
543 double fac = 1.0 / (8.0 *
m_MQ *
m_MQ);
555 double fac = 1.0 / (8.0 *
m_MQ *
m_MQ);
584 double fac = 1.0 / (4.0 *
m_MQ *
m_MQ);
650 int ipet = itime /
m_Nt;
684 int ipet = itime /
m_Nt;
703 for (
int i = 0; i <
m_nstab; ++i) {
723 int it = itime %
m_Nt;
724 int ipet = itime /
m_Nt;
747 int ipet_up = (ipet + 1) % NPEt;
967 double fac = fac4 + fac6;
980 int ipet = itime /
m_Nt;
982 if (ipet != IPEt)
return;
990 for (
int idir = 0; idir <
m_Ndim - 1; ++idir) {
1008 int ipet = itime /
m_Nt;
1010 if (ipet != IPEt)
return;
1017 for (
int idir = 0; idir <
m_Ndim - 1; ++idir) {
1049 const int idir,
const int itime)
1051 int ipet = itime /
m_Nt;
1053 if (ipet != IPEt)
return;
1084 double epsilon = 1.0e-10;
1088 for (
int itime = 0; itime <
m_Ltime; ++itime) {
1089 int it = itime %
m_Nt;
1090 int ipet = itime /
m_Nt;
1092 double norm2t = 0.0;
1094 for (
int ispc = 0; ispc <
m_Nspc; ++ispc) {
1095 for (
int ivcd = 0; ivcd < Nvcd2; ++ivcd) {
1096 double wt = w.
cmp(ivcd, ispc +
m_Nspc * it, 0);
1103 if (norm2t > epsilon) {
1109 if (ndef_src == 0) {
1125 for (
int ispc = 0; ispc <
m_Nspc; ++ispc) {
1126 for (
int id = 0;
id <
m_Nd2; ++id) {
1127 for (
int ivc = 0; ivc <
m_Nvc; ++ivc) {
1128 int ivcd = ivc +
m_Nvc * id;
1129 double wt = w.
cmp(ivcd, ispc +
m_Nspc * it, 0);
1130 Xt.
set(ivcd, ispc, 0, wt);
1148 const int idir,
const int itime)
1152 }
else if (idir == 1) {
1154 }
else if (idir == 2) {
1166 const int idir,
const int itime)
1170 }
else if (idir == 1) {
1172 }
else if (idir == 2) {
1188 int ipet = itime /
m_Nt;
1190 if (ipet != IPEt)
return;
1192 double *xp = Xt.
ptr(0);
1193 const double *yp = Yt.
ptr(0);
1203 int ith, nth, is, ns;
1204 set_threadtask(ith, nth, is, ns, Nyz);
1208 for (
int iyz = is; iyz < ns; ++iyz) {
1209 int nei = ix +
m_Nx * iyz;
1210 for (
int in = 0; in < NinF2; ++in) {
1211 buf1_x[in + NinF2 * iyz] = bc2 * yp[in + NinF2 * nei];
1218 const int size = NinF2 * Nyz;
1223 set_threadtask(ith, nth, is, ns,
m_Nspc);
1225 for (
int site = is; site < ns; ++site) {
1226 int ix = site %
m_Nx;
1227 int iyz = site /
m_Nx;
1228 if (ix <
m_Nx - 1) {
1229 int nei = ix + 1 +
m_Nx * iyz;
1230 for (
int in = 0; in < NinF2; ++in) {
1231 xp[in + NinF2 * site] = yp[in + NinF2 * nei];
1234 for (
int in = 0; in < NinF2; ++in) {
1235 xp[in + NinF2 * site] =
buf2_x[in + NinF2 * iyz];
1250 int ipet = itime /
m_Nt;
1252 if (ipet != IPEt)
return;
1254 double *xp = Xt.
ptr(0);
1255 const double *yp = Yt.
ptr(0);
1265 int ith, nth, is, ns;
1266 set_threadtask(ith, nth, is, ns, Nyz);
1270 for (
int iyz = is; iyz < ns; ++iyz) {
1271 int nei = ix +
m_Nx * iyz;
1272 for (
int in = 0; in < NinF2; ++in) {
1273 buf1_x[in + NinF2 * iyz] = yp[in + NinF2 * nei];
1280 const int size = NinF2 * Nyz;
1285 set_threadtask(ith, nth, is, ns,
m_Nspc);
1287 for (
int site = is; site < ns; ++site) {
1288 int ix = site %
m_Nx;
1289 int iyz = site /
m_Nx;
1291 int nei = ix - 1 +
m_Nx * iyz;
1292 for (
int in = 0; in < NinF2; ++in) {
1293 xp[in + NinF2 * site] = yp[in + NinF2 * nei];
1296 for (
int in = 0; in < NinF2; ++in) {
1297 xp[in + NinF2 * site] = bc2 *
buf2_x[in + NinF2 * iyz];
1311 int ipet = itime /
m_Nt;
1313 if (ipet != IPEt)
return;
1315 double *xp = Xt.
ptr(0);
1316 const double *yp = Yt.
ptr(0);
1326 int ith, nth, is, ns;
1327 set_threadtask(ith, nth, is, ns, Nxz);
1331 for (
int ixz = is; ixz < ns; ++ixz) {
1332 int ix = ixz %
m_Nx;
1333 int iz = ixz /
m_Nx;
1334 int nei = ix +
m_Nx * (iy +
m_Ny * iz);
1335 for (
int in = 0; in < NinF2; ++in) {
1336 buf1_y[in + NinF2 * ixz] = bc2 * yp[in + NinF2 * nei];
1343 const int size = NinF2 * Nxz;
1348 set_threadtask(ith, nth, is, ns,
m_Nspc);
1350 for (
int site = is; site < ns; ++site) {
1351 int ix = site %
m_Nx;
1354 if (iy <
m_Ny - 1) {
1355 int nei = ix +
m_Nx * (iy + 1 +
m_Ny * iz);
1356 for (
int in = 0; in < NinF2; ++in) {
1357 xp[in + NinF2 * site] = yp[in + NinF2 * nei];
1360 int ixz = ix +
m_Nx * iz;
1361 for (
int in = 0; in < NinF2; ++in) {
1362 xp[in + NinF2 * site] =
buf2_y[in + NinF2 * ixz];
1376 int ipet = itime /
m_Nt;
1378 if (ipet != IPEt)
return;
1380 double *xp = Xt.
ptr(0);
1381 const double *yp = Yt.
ptr(0);
1391 int ith, nth, is, ns;
1392 set_threadtask(ith, nth, is, ns, Nxz);
1396 for (
int ixz = is; ixz < ns; ++ixz) {
1397 int ix = ixz %
m_Nx;
1398 int iz = ixz /
m_Nx;
1399 int nei = ix +
m_Nx * (iy +
m_Ny * iz);
1400 for (
int in = 0; in < NinF2; ++in) {
1401 buf1_y[in + NinF2 * ixz] = yp[in + NinF2 * nei];
1408 const int size = NinF2 * Nxz;
1413 set_threadtask(ith, nth, is, ns,
m_Nspc);
1415 for (
int site = is; site < ns; ++site) {
1416 int ix = site %
m_Nx;
1420 int nei = ix +
m_Nx * (iy - 1 +
m_Ny * iz);
1421 for (
int in = 0; in < NinF2; ++in) {
1422 xp[in + NinF2 * site] = yp[in + NinF2 * nei];
1425 int ixz = ix +
m_Nx * iz;
1426 for (
int in = 0; in < NinF2; ++in) {
1427 xp[in + NinF2 * site] = bc2 *
buf2_y[in + NinF2 * ixz];
1442 int ipet = itime /
m_Nt;
1444 if (ipet != IPEt)
return;
1446 double *xp = Xt.
ptr(0);
1447 const double *yp = Yt.
ptr(0);
1456 int ith, nth, is, ns;
1457 set_threadtask(ith, nth, is, ns, Nxy);
1461 for (
int ixy = is; ixy < ns; ++ixy) {
1462 int nei = ixy + Nxy * iz;
1463 for (
int in = 0; in < NinF2; ++in) {
1464 buf1_z[in + NinF2 * ixy] = bc2 * yp[in + NinF2 * nei];
1471 const int size = NinF2 * Nxy;
1476 set_threadtask(ith, nth, is, ns,
m_Nspc);
1478 for (
int site = is; site < ns; ++site) {
1479 int ixy = site % Nxy;
1480 int iz = site / Nxy;
1481 if (iz <
m_Nz - 1) {
1482 int nei = ixy + Nxy * (iz + 1);
1483 for (
int in = 0; in < NinF2; ++in) {
1484 xp[in + NinF2 * site] = yp[in + NinF2 * nei];
1487 for (
int in = 0; in < NinF2; ++in) {
1488 xp[in + NinF2 * site] =
buf2_z[in + NinF2 * ixy];
1502 int ipet = itime /
m_Nt;
1504 if (ipet != IPEt)
return;
1506 double *xp = Xt.
ptr(0);
1507 const double *yp = Yt.
ptr(0);
1516 int ith, nth, is, ns;
1517 set_threadtask(ith, nth, is, ns, Nxy);
1521 for (
int ixy = is; ixy < ns; ++ixy) {
1522 int nei = ixy + Nxy * iz;
1523 for (
int in = 0; in < NinF2; ++in) {
1524 buf1_z[in + NinF2 * ixy] = yp[in + NinF2 * nei];
1531 const int size = NinF2 * Nxy;
1536 set_threadtask(ith, nth, is, ns,
m_Nspc);
1539 for (
int site = is; site < ns; ++site) {
1540 int ixy = site % Nxy;
1541 int iz = site / Nxy;
1543 int nei = ixy + Nxy * (iz - 1);
1544 for (
int in = 0; in < NinF2; ++in) {
1545 xp[in + NinF2 * site] = yp[in + NinF2 * nei];
1548 for (
int in = 0; in < NinF2; ++in) {
1549 xp[in + NinF2 * site] = bc2 *
buf2_z[in + NinF2 * ixy];
1561 int Ncd = Nc2 *
m_Nd2;
1563 double *xp = Xt.
ptr(0);
1564 const double *yp = Yt.
ptr(0);
1566 int ith, nth, is, ns;
1567 set_threadtask(ith, nth, is, ns,
m_Nspc);
1571 for (
int site = is; site < ns; ++site) {
1572 int iv = Ncd * site;
1573 for (
int ic = 0; ic <
m_Nc; ++ic) {
1574 xp[2 * ic + Nc2 * 0 + iv] = yp[2 * ic + Nc2 * 1 + iv];
1575 xp[2 * ic + 1 + Nc2 * 0 + iv] = yp[2 * ic + 1 + Nc2 * 1 + iv];
1576 xp[2 * ic + Nc2 * 1 + iv] = yp[2 * ic + Nc2 * 0 + iv];
1577 xp[2 * ic + 1 + Nc2 * 1 + iv] = yp[2 * ic + 1 + Nc2 * 0 + iv];
1588 int Ncd = Nc2 *
m_Nd2;
1590 double *xp = Xt.
ptr(0);
1591 const double *yp = Yt.
ptr(0);
1593 int ith, nth, is, ns;
1594 set_threadtask(ith, nth, is, ns,
m_Nspc);
1598 for (
int site = is; site < ns; ++site) {
1599 int iv = Ncd * site;
1600 for (
int ic = 0; ic <
m_Nc; ++ic) {
1601 xp[2 * ic + Nc2 * 0 + iv] = yp[2 * ic + 1 + Nc2 * 1 + iv];
1602 xp[2 * ic + 1 + Nc2 * 0 + iv] = -yp[2 * ic + Nc2 * 1 + iv];
1603 xp[2 * ic + Nc2 * 1 + iv] = -yp[2 * ic + 1 + Nc2 * 0 + iv];
1604 xp[2 * ic + 1 + Nc2 * 1 + iv] = yp[2 * ic + Nc2 * 0 + iv];
1615 int Ncd = Nc2 *
m_Nd2;
1617 double *xp = Xt.
ptr(0);
1618 const double *yp = Yt.
ptr(0);
1620 int ith, nth, is, ns;
1621 set_threadtask(ith, nth, is, ns,
m_Nspc);
1625 for (
int site = is; site < ns; ++site) {
1626 int iv = Ncd * site;
1627 for (
int ic = 0; ic <
m_Nc; ++ic) {
1628 xp[2 * ic + Nc2 * 0 + iv] = yp[2 * ic + Nc2 * 0 + iv];
1629 xp[2 * ic + 1 + Nc2 * 0 + iv] = yp[2 * ic + 1 + Nc2 * 0 + iv];
1630 xp[2 * ic + Nc2 * 1 + iv] = -yp[2 * ic + Nc2 * 1 + iv];
1631 xp[2 * ic + 1 + Nc2 * 1 + iv] = -yp[2 * ic + 1 + Nc2 * 1 + iv];
1640 const int idir,
const int itime)
1642 int ipet = itime /
m_Nt;
1644 if (ipet != IPEt)
return;
1646 int it = itime %
m_Nt;
1647 const double *up =
m_U.
ptr(0, 0, idir);
1649 double *xp = Xt.
ptr(0);
1650 const double *yp = Yt.
ptr(0);
1656 int ith, nth, is, ns;
1657 set_threadtask(ith, nth, is, ns,
m_Nspc);
1661 for (
int site = is; site < ns; ++site) {
1662 int ig = Ndf * (site +
m_Nspc * it);
1663 int iv = Ncd * site;
1664 for (
int id = 0;
id <
m_Nd2; ++id) {
1665 for (
int ic = 0; ic <
m_Nc; ++ic) {
1666 int ig2 = Nc2 * ic + ig;
1667 int iv2 = Nc2 *
id + iv;
1668 xp[2 * ic + iv2] = mult_Gn_r(&up[ig2], &yp[iv2],
m_Nc);
1669 xp[2 * ic + 1 + iv2] = mult_Gn_i(&up[ig2], &yp[iv2],
m_Nc);
1679 const int icomp,
const int itime)
1681 int ipet = itime /
m_Nt;
1683 if (ipet != IPEt)
return;
1685 int it = itime %
m_Nt;
1686 const double *up =
m_Fstr[icomp].ptr(0);
1688 double *xp = Xt.
ptr(0);
1689 const double *yp = Yt.
ptr(0);
1695 int ith, nth, is, ns;
1696 set_threadtask(ith, nth, is, ns,
m_Nspc);
1700 for (
int site = is; site < ns; ++site) {
1701 int ig = Ndf * (site +
m_Nspc * it);
1702 int iv = Ncd * site;
1703 for (
int id = 0;
id <
m_Nd2; ++id) {
1704 for (
int ic = 0; ic <
m_Nc; ++ic) {
1705 int ig2 = Nc2 * ic + ig;
1706 int iv2 = Nc2 *
id + iv;
1707 xp[2 * ic + iv2] = mult_Gn_r(&up[ig2], &yp[iv2],
m_Nc);
1708 xp[2 * ic + 1 + iv2] = mult_Gn_i(&up[ig2], &yp[iv2],
m_Nc);
1718 const int idir,
const int itime)
1720 int ipet = itime /
m_Nt;
1722 if (ipet != IPEt)
return;
1724 int it = itime %
m_Nt;
1725 const double *up =
m_U.
ptr(0, 0, idir);
1727 double *xp = Xt.
ptr(0);
1728 const double *yp = Yt.
ptr(0);
1734 int ith, nth, is, ns;
1735 set_threadtask(ith, nth, is, ns,
m_Nspc);
1739 for (
int site = is; site < ns; ++site) {
1740 int ig = Ndf * (site +
m_Nspc * it);
1741 int iv = Ncd * site;
1742 for (
int id = 0;
id <
m_Nd2; ++id) {
1743 for (
int ic = 0; ic <
m_Nc; ++ic) {
1744 int ig2 = 2 * ic + ig;
1745 int iv2 = Nc2 *
id + iv;
1746 xp[2 * ic + iv2] = mult_Gd_r(&up[ig2], &yp[iv2],
m_Nc);
1747 xp[2 * ic + 1 + iv2] = mult_Gd_i(&up[ig2], &yp[iv2],
m_Nc);
1768 const double gflop = 0.0;
void mult(Field &v, const Field &w)
mult with m_mode
void set_string(const string &key, const string &value)
void init(const Parameters ¶ms)
initial setup.
std::vector< double > buf1_z
void evolve_deltaH(Field &, const Field &, const int itime)
evolution with correction terms
static int get_num_threads()
returns available number of threads.
void add_deltaH1(Field &, const Field &, const int itime)
correction term deltaH(1): spin-magnetic interaction
void set(const int jin, const int site, const int jex, double v)
void mult_dag(Field &v, const Field &w)
not available
int m_nstab
stabilization parameter
std::string m_repr
gamma matrix repr. (set to Dirac)
void shift_zdn(Field &Xt, const Field &Yt, const int itime)
void set_double(const string &key, const double value)
std::vector< Field_G > m_Fstr
Field strenth (0-2: B, 3-5: E)
double m_u0
mean-field value
void detailed(const char *format,...)
std::vector< int > m_boundary
boundary conditions
void add_R2(Field &v, const Field &w, const int jd, const int itime)
void mult_sigma2(Field &Xt, const Field &Yt)
multiplying Pauli matrix $\sigma_2$
void add_R5(Field &v, const Field &w, const int itime)
void add_R3(Field &v, const Field &w, const int itime)
void aypx(const double a, Field &y, const Field &x)
aypx(y, a, x): y := a * y + x
std::vector< double > buf2_x
communication buffer in x-dir.
void shift_ydn(Field &Xt, const Field &Yt, const int itime)
void mult_dn(const int mu, Field &v, const Field &w)
transporter in lower direction : not available
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
void mult_Gn(Field &Xt, const Field &Yt, const int idir, const int itime)
nultiplication of gauge field
std::vector< double > m_coeff
coefficients of correction terms
void set_double_vector(const string &key, const vector< double > &value)
std::vector< double > buf1_y
std::vector< double > buf2_y
communication buffer in y-dir.
void copy(Field &y, const Field &x)
copy(y, x): y = x
void calc_Delta1(Field &, const Field &, const int idir, const int itime)
first order covariant derivative
void add_deltaH3(Field &, const Field &, const int itime)
correction term deltaH(3)
void paranoiac(const char *format,...)
int m_Nspc
spatial volume (m_Nx * m_Ny * m_Nz)
void get_parameters(Parameters ¶ms) const
gets parameters by a Parameter object: to be implemented in a subclass.
double flop_count()
number of floating point operations: not implemented
field strength construction.
void set_source(Field &Xt, const Field &b)
extract source time slice and 3D source vector from 4D source.
void shift_forward(Field &Xt, const Field &Yt, const int idir, const int itime)
shifting 3D field forward in idir-direction
Field m_Zt2
working field on each time slice.
Bridge::VerboseLevel m_vl
verbose level
static const std::string class_name
void mult_gm5(Field &v, const Field &w)
multiply $\gamma_5$ : not available
static int reduce_sum(int count, dcomplex *recv_buf, dcomplex *send_buf, int pattern=0)
make a global sum of an array of dcomplex over the communicator. pattern specifies the dimensions to ...
std::string m_evolution_type
type of evolution equation
std::string m_correction_terms
order of correction terms
void calc_Delta2(Field &, const Field &, const int itime)
second order covariant derivative
void add_R4(Field &v, const Field &w, const int itime)
void add_deltaH5(Field &, const Field &, const int itime)
correction term deltaH(5)
void rotation(Field &v, const Field &w, const int jd)
field rotation (jd = 1: normal, -1: conjugate)
int fetch_int_vector(const string &key, vector< int > &value) const
void shift_xdn(Field &Xt, const Field &Yt, const int itime)
void evolve_H0(Field &, const Field &, const int itime)
evolution with kinetic term
Field m_Yt3
working field on each time slice.
static void sync_barrier_all()
barrier among all the threads and nodes.
static int npe(const int dir)
logical grid extent
void evolve_typeA(Field &, const Field &, const int itime)
evolution equation according to [1]
void evolve_typeB(Field &, const Field &, const int itime)
evolution equation according to [2]
void set_config(Field *U)
setting gauge configuration and field strength
void reset(const int Nvol, const int Nex)
int m_itime_src
source time slice
double m_MQ
heavy quark mass
void calc_Delta4(Field &, const Field &, const int itime)
fourth order covariant derivative
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=Element_type::COMPLEX)
void set_int_vector(const string &key, const vector< int > &value)
std::vector< Field > m_Xt
heavy quark field.
int m_num_correct
number of correction terms
double cmp(const int jin, const int site, const int jex) const
const double * ptr(const int jin, const int site, const int jex) const
Field_G m_U
gauge configuration
static Bridge::VerboseLevel Vlevel()
Field m_Wt3
working field on each time slice.
static VerboseLevel set_verbose_level(const std::string &str)
void shift_yup(Field &Xt, const Field &Yt, const int itime)
int m_Ltime
global temporal extent
void set_parameters(const Parameters ¶ms)
seting parameters with a Parameter object
void set_int(const string &key, const int value)
std::vector< double > buf1_x
void scal(Field &x, const double a)
scal(x, a): x = a * x
static int ipe(const int dir)
logical coordinate of current proc.
void mult_Gd(Field &Xt, const Field &Yt, const int idir, const int itime)
nultiplication of gauge field (hermitian conjugate)
int fetch_string(const string &key, string &value) const
int fetch_double(const string &key, double &value) const
void add_deltaH2(Field &, const Field &, const int itime)
correction term deltaH(2)
void mult_sigma3(Field &Xt, const Field &Yt)
multiplying Pauli matrix $\sigma_3$
void construct_Fmunu_1x1(Field_G &Fmunu, const int mu, const int nu, const Field_G &U)
Constructs the anti-Hermitian field strength with four 1x1 plquette clover leaves.
void mult_up(const int mu, Field &v, const Field &w)
transporter in upper direction : not available
string get_string(const string &key) const
void crucial(const char *format,...)
std::string m_mode
mode of multiplication
void set_mode(const std::string mode)
setting mult mode: 'Evolve' and 'Rotation'
Container of Field-type object.
static int exchange(int count, dcomplex *recv_buf, dcomplex *send_buf, int idir, int ipm, int tag)
receive array of dcomplex from upstream specified by idir and ipm, and send array to downstream.
void evolve_U4(Field &, const Field &, const int itime)
evolution with one time slice ahead
static int get_thread_id()
returns thread id.
void shift_backward(Field &Xt, const Field &Yt, const int idir, const int itime)
shifting 3D field backward in idir-direction
int fetch_double_vector(const string &key, vector< double > &value) const
std::vector< double > buf2_z
communication buffer in z-dir.
void shift_xup(Field &Xt, const Field &Yt, const int itime)
implemetation of shifting field
void shift_zup(Field &Xt, const Field &Yt, const int itime)
int fetch_int(const string &key, int &value) const
void general(const char *format,...)
void evolve_impl(Field &, const Field &, const int itime)
called from evolve() and switchs evlution equation
void evolve(Field &, const Field &)
evolution equation (facade).
void mult_sigma1(Field &Xt, const Field &Yt)
multiplying Pauli matrix $\sigma_1$
static void assert_single_thread(const std::string &class_name)
assert currently running on single thread.
void mult_F(Field &Xt, const Field &Yt, const int icomp, const int itime)
nultiplication of field strength
void add_deltaH46(Field &, const Field &, const int itime)
correction terms deltaH(4) + deltaH(6)
static std::string get_verbose_level(const VerboseLevel vl)
void tidyup()
final clean up.