Go to the documentation of this file.
14 #if defined USE_GROUP_SU3
16 #elif defined USE_GROUP_SU2
18 #elif defined USE_GROUP_SU_N
23 #ifdef USE_FACTORY_AUTOREGISTER
25 bool init = Fopr_Staggered::register_factory();
172 const std::vector<int> bc)
174 assert(bc.size() ==
m_Ndim);
188 for (
int mu = 0; mu <
m_Ndim; ++mu) {
196 for (
int mu = 0; mu <
m_Ndim; ++mu) {
227 for (
int t = 0; t < Nt; ++t) {
228 int t2 = t + ipet * Nt;
229 for (
int z = 0; z < Nz; ++z) {
230 int z2 = z + ipez * Nz;
231 for (
int y = 0; y < Ny; ++y) {
232 int y2 = y + ipey * Ny;
233 for (
int x = 0; x < Nx; ++x) {
234 int x2 = x + ipex * Nx;
235 int is = idx_lex.
site(x, y, z, t);
244 if (((x2 + y2 + z2 + t2) % 2) == 1) {
251 if (((x2 + y2) % 2) == 1) {
254 if (((x2 + y2 + z2) % 2) == 1) {
287 int ith, nth, is, ns;
288 set_threadtask(ith, nth, is, ns,
m_Nvol);
290 for (
int ex = 0; ex < Nex; ++ex) {
291 for (
int site = is; site < ns; ++site) {
292 for (
int in = 0; in < Nin; ++in) {
294 v.
set(in, site, ex, vt);
334 int ith, nth, is, ns;
335 set_threadtask(ith, nth, is, ns,
m_Nvol);
339 for (
int mu = 0; mu <
m_Ndim; ++mu) {
340 for (
int site = is; site < ns; ++site) {
342 for (
int cc = 0; cc <
m_Ndf; ++cc) {
343 double ut = ph * U->
cmp(cc, site, mu);
344 m_U.
set(cc, site, mu, ut);
357 if (ith == 0)
m_mode = mode;
367 }
else if (
m_mode ==
"Ddag") {
369 }
else if (
m_mode ==
"DdagD") {
371 }
else if (
m_mode ==
"H") {
385 }
else if (
m_mode ==
"Ddag") {
387 }
else if (
m_mode ==
"DdagD") {
389 }
else if (
m_mode ==
"H") {
495 int ith, nth, is, ns;
496 set_threadtask(ith, nth, is, ns,
m_Nvol);
500 for (
int ex = 0; ex < Nex; ++ex) {
501 for (
int site = is; site < ns; ++site) {
503 for (
int in = 0; in < Nin; ++in) {
504 double vt = ph * w.
cmp(in, site, ex);
505 v.
set(in, site, ex, vt);
522 int ith, nth, is, ns;
523 set_threadtask(ith, nth, is, ns,
m_Nvol);
527 for (
int ex = 0; ex < Nex; ++ex) {
528 for (
int site = is; site < ns; ++site) {
530 for (
int in = 0; in < Nin; ++in) {
531 double vt = ph * v.
cmp(in, site, ex);
532 v.
set(in, site, ex, vt);
549 double *vp = v.
ptr(0);
550 const double *wp = w.
ptr(0);
553 int ith, nth, is, ns;
554 set_threadtask(ith, nth, is, ns,
m_Nvol);
558 for (
int site = is; site < ns; ++site) {
562 for (
int ivc = 0; ivc <
m_Nvc; ++ivc) {
576 for (
int site = is; site < ns; ++site) {
582 for (
int ic = 0; ic <
m_Nc; ++ic) {
583 int ic2 = ic *
m_Nvc;
588 vp[2 * ic + 1 +
m_Nvc * site] +=
wti;
591 for (
int ic = 0; ic <
m_Nc; ++ic) {
592 int ic2 = ic *
m_Nvc;
597 vp[2 * ic + 1 +
m_Nvc * site] +=
wti;
614 double *vp = v.
ptr(0);
615 const double *wp = w.
ptr(0);
618 int ith, nth, is, ns;
619 set_threadtask(ith, nth, is, ns,
m_Nvol);
623 for (
int site = is; site < ns; ++site) {
627 for (
int ic = 0; ic <
m_Nc; ++ic) {
646 for (
int site = is; site < ns; ++site) {
652 for (
int ic = 0; ic <
m_Nc; ++ic) {
658 vp[2 * ic + 1 +
m_Nvc * site] -=
wti;
661 for (
int ivc = 0; ivc <
m_Nvc; ++ivc) {
679 double *vp = v.
ptr(0);
680 const double *wp = w.
ptr(0);
683 int ith, nth, is, ns;
684 set_threadtask(ith, nth, is, ns,
m_Nvol);
688 for (
int site = is; site < ns; ++site) {
695 for (
int ivc = 0; ivc <
m_Nvc; ++ivc) {
709 for (
int site = is; site < ns; ++site) {
718 for (
int ic = 0; ic <
m_Nc; ++ic) {
719 int ic2 = ic *
m_Nvc;
724 vp[2 * ic + 1 +
m_Nvc * site] +=
wti;
727 for (
int ic = 0; ic <
m_Nc; ++ic) {
728 int ic2 = ic *
m_Nvc;
733 vp[2 * ic + 1 +
m_Nvc * site] +=
wti;
750 double *vp = v.
ptr(0);
751 const double *wp = w.
ptr(0);
754 int ith, nth, is, ns;
755 set_threadtask(ith, nth, is, ns,
m_Nvol);
759 for (
int site = is; site < ns; ++site) {
766 for (
int ic = 0; ic <
m_Nc; ++ic) {
785 for (
int site = is; site < ns; ++site) {
794 for (
int ic = 0; ic <
m_Nc; ++ic) {
800 vp[2 * ic + 1 +
m_Nvc * site] -=
wti;
803 for (
int ivc = 0; ivc <
m_Nvc; ++ivc) {
821 double *vp = v.
ptr(0);
822 const double *wp = w.
ptr(0);
825 int ith, nth, is, ns;
826 set_threadtask(ith, nth, is, ns,
m_Nvol);
832 for (
int site = is; site < ns; ++site) {
833 int ixy = site % Nxy;
834 int izt = site / Nxy;
837 int ixyt =
ixy + Nxy *
it;
839 for (
int ivc = 0; ivc <
m_Nvc; ++ivc) {
853 for (
int site = is; site < ns; ++site) {
854 int ixy = site % Nxy;
855 int izt = site / Nxy;
858 int ixyt =
ixy + Nxy *
it;
862 for (
int ic = 0; ic <
m_Nc; ++ic) {
863 int ic2 = ic *
m_Nvc;
868 vp[2 * ic + 1 +
m_Nvc * site] +=
wti;
871 for (
int ic = 0; ic <
m_Nc; ++ic) {
872 int ic2 = ic *
m_Nvc;
877 vp[2 * ic + 1 +
m_Nvc * site] +=
wti;
894 double *vp = v.
ptr(0);
895 const double *wp = w.
ptr(0);
898 int ith, nth, is, ns;
899 set_threadtask(ith, nth, is, ns,
m_Nvol);
905 for (
int site = is; site < ns; ++site) {
906 int ixy = site % Nxy;
907 int izt = site / Nxy;
910 int ixyt =
ixy + Nxy *
it;
912 for (
int ic = 0; ic <
m_Nc; ++ic) {
931 for (
int site = is; site < ns; ++site) {
932 int ixy = site % Nxy;
933 int izt = site / Nxy;
936 int ixyt =
ixy + Nxy *
it;
940 for (
int ic = 0; ic <
m_Nc; ++ic) {
946 vp[2 * ic + 1 +
m_Nvc * site] -=
wti;
949 for (
int ivc = 0; ivc <
m_Nvc; ++ivc) {
967 double *vp = v.
ptr(0);
968 const double *wp = w.
ptr(0);
971 int ith, nth, is, ns;
972 set_threadtask(ith, nth, is, ns,
m_Nvol);
978 for (
int site = is; site < ns; ++site) {
979 int ixyz = site % Nxyz;
980 int it = site / Nxyz;
982 for (
int ivc = 0; ivc <
m_Nvc; ++ivc) {
996 for (
int site = is; site < ns; ++site) {
997 int ixyz = site % Nxyz;
998 int it = site / Nxyz;
999 int nei =
ixyz + Nxyz * (
it + 1);
1002 for (
int ic = 0; ic <
m_Nc; ++ic) {
1003 int ic2 = ic *
m_Nvc;
1008 vp[2 * ic + 1 +
m_Nvc * site] +=
wti;
1011 for (
int ic = 0; ic <
m_Nc; ++ic) {
1012 int ic2 = ic *
m_Nvc;
1017 vp[2 * ic + 1 +
m_Nvc * site] +=
wti;
1034 double *vp = v.
ptr(0);
1035 const double *wp = w.
ptr(0);
1038 int ith, nth, is, ns;
1039 set_threadtask(ith, nth, is, ns,
m_Nvol);
1045 for (
int site = is; site < ns; ++site) {
1046 int ixyz = site % Nxyz;
1047 int it = site / Nxyz;
1049 for (
int ic = 0; ic <
m_Nc; ++ic) {
1068 for (
int site = is; site < ns; ++site) {
1069 int ixyz = site % Nxyz;
1070 int it = site / Nxyz;
1071 int nei =
ixyz + Nxyz * (
it - 1);
1074 for (
int ic = 0; ic <
m_Nc; ++ic) {
1080 vp[2 * ic + 1 +
m_Nvc * site] -=
wti;
1083 for (
int ivc = 0; ivc <
m_Nvc; ++ivc) {
1103 double flop_vol = double(Nvol) * double(NPE);
1105 double gflop = double(flop_site) * flop_vol * 1.0e-9;
1107 if ((mode ==
"DdagD") || (mode ==
"DDdag")) {
void get_parameters(Parameters ¶ms) const
gets parameters by a Parameter object: to be implemented in a subclass.
void mult_xm(Field &, const Field &)
void set_parameters(const Parameters ¶ms)
sets parameters by a Parameter object: to be implemented in a subclass.
void set_string(const string &key, const string &value)
void init()
initial setup.
static int get_num_threads()
returns available number of threads.
void H(Field &, const Field &)
void set(const int jin, const int site, const int jex, double v)
std::string m_mode
mult mode
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
void set_double(const string &key, const double value)
void mult_dag(Field &, const Field &)
hermitian conjugate of mult.
void mult_xp(Field &, const Field &)
void detailed(const char *format,...)
double * vcp1_xp
communication buffer
void mult_zm(Field &, const Field &)
bool check_size(const int nin, const int nvol, const int nex) const
checking size parameters. [23 May 2016 H.Matsufuru]
void set_config_impl(Field *U)
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
void mult(Field &, const Field &)
multiplies fermion operator to a given field.
void mult_tp(Field &, const Field &)
Field m_stg_phase
staggered phase
void copy(Field &y, const Field &x)
copy(y, x): y = x
double flop_count()
returns the number of floating point operations.
void set_config_omp(Field *U)
void DdagD(Field &, const Field &)
void set_config(Field *U)
sets the gauge configuration.
void mult_zp(Field &, const Field &)
void set_staggered_phase()
int fetch_int_vector(const string &key, vector< int > &value) const
void Ddag(Field &, const Field &)
void reset(const int Nvol, const int Nex)
void mult_gm5(Field &, const Field &)
multiplies gamma_5 matrix.
Field_G m_U
gauge field multiplied by staggered phase.
int site(const int &x, const int &y, const int &z, const int &t) const
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)
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
static Bridge::VerboseLevel Vlevel()
Field m_parity
site parity field
static VerboseLevel set_verbose_level(const std::string &str)
void D(Field &, const Field &)
std::vector< int > m_boundary
boundary conditions.
void tidyup()
final clean-up.
void scal(Field &x, const double a)
scal(x, a): x = a * x
static int ipe(const int dir)
logical coordinate of current proc.
int fetch_string(const string &key, string &value) const
int fetch_double(const string &key, double &value) const
void mult_ym(Field &, const Field &)
void mult_staggered_phase(Field &, int mu)
Bridge::VerboseLevel m_vl
verbose level
void crucial(const char *format,...)
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.
static int get_thread_id()
returns thread id.
static const std::string class_name
void general(const char *format,...)
void mult_tm(Field &, const Field &)
static void assert_single_thread(const std::string &class_name)
assert currently running on single thread.
static std::string get_verbose_level(const VerboseLevel vl)
void mult_yp(Field &, const Field &)