20   = 
"Fopr_Wilson_eo_impl";
 
   44   if ((
m_Nx % 2) != 0) {
 
   50   if ((
m_Ny % 2) != 0) {
 
   62   for (
int t = 0; t < 
m_Nt; ++t) {
 
   63     for (
int z = 0; z < 
m_Nz; ++z) {
 
   64       for (
int y = 0; y < 
m_Ny; ++y) {
 
   68         m_Leo[y + m_Ny * (z + m_Nz * t)] = (y2 + z2 + t2) % 2;
 
   80   } 
else if (
m_repr == 
"Chiral") {
 
   91   int Nvx = 
m_Nvc * 2 * (
m_Ny / 2) * m_Nz * m_Nt;
 
  116   buf_size[0] = 
sizeof(double) * 
m_Nvc * 2 * (
m_Ny / 2) * m_Nz * 
m_Nt;
 
  117   buf_size[1] = 
sizeof(double) * 
m_Nvc * 2 * 
m_Nx2 * m_Nz * m_Nt;
 
  135   for (
int imu = 0; imu < 
m_Ndim; ++imu) {
 
  195   const std::vector<int> bc)
 
  200   for (
int mu = 0; mu < 
m_Ndim; ++mu) {
 
  206   assert(bc.size() == 
m_Ndim);
 
  212   for (
int mu = 0; mu < 
m_Ndim; ++mu) {
 
  217   for (
int idir = 0; idir < 
m_Ndim; ++idir) {
 
  218     m_boundary2[idir] = 1.0;
 
  244   double flop_site, flop;
 
  247     flop_site = 
static_cast<double>(
 
  248       m_Nc * m_Nd * (6 * (4 * m_Nc + 2) + 2 * (4 * m_Nc + 1)));
 
  249   } 
else if (
m_repr == 
"Chiral") {
 
  250     flop_site = 
static_cast<double>(
 
  251       m_Nc * m_Nd * 8 * (4 * m_Nc + 2));
 
  258   flop = flop_site * 
static_cast<double>(Lvol / 2);
 
  355   assert(f.
nex() == 1);
 
  411                                               const Field& f, 
const int ieo)
 
  432   (this->*m_mult_tp)(w, f, ieo);
 
  433   (this->*m_mult_tm)(w, f, ieo);
 
  444                                                  const Field& f, 
const int ieo)
 
  458                                                   const Field& f, 
const int ieo)
 
  468   (this->*
m_gm5)(w, f);
 
  475   (this->*m_gm5_self)(w);
 
  483   const double *
v1 = f.
ptr(0);
 
  484   double       *
v2 = w.
ptr(0);
 
  489   int is = m_Ntask * ith / nth;
 
  490   int ns = m_Ntask * (ith + 1) / nth - is;
 
  492   for (
int i = is; i < is + ns; ++i) {
 
  493     gm5_dirac_thread(i, v2, v1);
 
  502   const double *v1 = f.
ptr(0);
 
  503   double       *v2 = w.
ptr(0);
 
  508   int is = m_Ntask * ith / nth;
 
  509   int ns = m_Ntask * (ith + 1) / nth - is;
 
  511   for (
int i = is; i < is + ns; ++i) {
 
  512     gm5_chiral_thread(i, v2, v1);
 
  520   double *wp = w.
ptr(0);
 
  525   int is = m_Ntask * ith / nth;
 
  526   int ns = m_Ntask * (ith + 1) / nth - is;
 
  528   for (
int i = is; i < is + ns; ++i) {
 
  529     gm5_dirac_thread(i, wp);
 
  537   double *wp = w.
ptr(0);
 
  542   int is = m_Ntask * ith / nth;
 
  543   int ns = m_Ntask * (ith + 1) / nth - is;
 
  545   for (
int i = is; i < is + ns; ++i) {
 
  546     gm5_chiral_thread(i, wp);
 
  568   } 
else if (mu == 1) {
 
  570   } 
else if (mu == 2) {
 
  572   } 
else if (mu == 3) {
 
  573     mult_tp_dirac(w, f, ieo);
 
  589   } 
else if (mu == 1) {
 
  591   } 
else if (mu == 2) {
 
  593   } 
else if (mu == 3) {
 
  594     mult_tm_dirac(w, f, ieo);
 
  606   double *wp = w.
ptr(0);
 
  611   int is = m_Ntask * ith / nth;
 
  612   int ns = m_Ntask * (ith + 1) / nth - is;
 
  614   for (
int i = is; i < is + ns; ++i) {
 
  623   double *wp = w.
ptr(0);
 
  628   int is = m_Ntask * ith / nth;
 
  629   int ns = m_Ntask * (ith + 1) / nth - is;
 
  631   for (
int i = is; i < is + ns; ++i) {
 
  632     scal_thread(i, wp, a);
 
  639                                                   const Field& f, 
const int ieo)
 
  641   const double *v1 = f.
ptr(0);
 
  642   double       *v2 = w.
ptr(0);
 
  647   int is = m_Ntask * ith / nth;
 
  648   int ns = m_Ntask * (ith + 1) / nth - is;
 
  650   for (
int i = is; i < is + ns; ++i) {
 
  651     mult_xp1_thread(i, vcp1_xp, v1, ieo);
 
  664   for (
int i = is; i < is + ns; ++i) {
 
  665     mult_xpb_thread(i, v2, v1, ieo);
 
  668   for (
int i = is; i < is + ns; ++i) {
 
  669     mult_xp2_thread(i, v2, vcp2_xp, ieo);
 
  676                                                   const Field& f, 
const int ieo)
 
  678   const double *v1 = f.
ptr(0);
 
  679   double       *v2 = w.
ptr(0);
 
  684   int is = m_Ntask * ith / nth;
 
  685   int ns = m_Ntask * (ith + 1) / nth - is;
 
  687   for (
int i = is; i < is + ns; ++i) {
 
  688     mult_xm1_thread(i, vcp1_xm, v1, ieo);
 
  702   for (
int i = is; i < is + ns; ++i) {
 
  703     mult_xmb_thread(i, v2, v1, ieo);
 
  706   for (
int i = is; i < is + ns; ++i) {
 
  707     mult_xm2_thread(i, v2, vcp2_xm, ieo);
 
  714                                                   const Field& f, 
const int ieo)
 
  716   const double *v1 = f.
ptr(0);
 
  717   double       *v2 = w.
ptr(0);
 
  722   int is = m_Ntask * ith / nth;
 
  723   int ns = m_Ntask * (ith + 1) / nth - is;
 
  725   for (
int i = is; i < is + ns; ++i) {
 
  726     mult_yp1_thread(i, vcp1_yp, v1, ieo);
 
  740   for (
int i = is; i < is + ns; ++i) {
 
  741     mult_ypb_thread(i, v2, v1, ieo);
 
  744   for (
int i = is; i < is + ns; ++i) {
 
  745     mult_yp2_thread(i, v2, vcp2_yp, ieo);
 
  752                                                   const Field& f, 
const int ieo)
 
  754   const double *v1 = f.
ptr(0);
 
  755   double       *v2 = w.
ptr(0);
 
  760   int is = m_Ntask * ith / nth;
 
  761   int ns = m_Ntask * (ith + 1) / nth - is;
 
  763   for (
int i = is; i < is + ns; ++i) {
 
  764     mult_ym1_thread(i, vcp1_ym, v1, ieo);
 
  778   for (
int i = is; i < is + ns; ++i) {
 
  779     mult_ymb_thread(i, v2, v1, ieo);
 
  782   for (
int i = is; i < is + ns; ++i) {
 
  783     mult_ym2_thread(i, v2, vcp2_ym, ieo);
 
  790                                                   const Field& f, 
const int ieo)
 
  792   const double *v1 = f.
ptr(0);
 
  793   double       *v2 = w.
ptr(0);
 
  798   int is = m_Ntask * ith / nth;
 
  799   int ns = m_Ntask * (ith + 1) / nth - is;
 
  801   for (
int i = is; i < is + ns; ++i) {
 
  802     mult_zp1_thread(i, vcp1_zp, v1, ieo);
 
  816   for (
int i = is; i < is + ns; ++i) {
 
  817     mult_zpb_thread(i, v2, v1, ieo);
 
  820   for (
int i = is; i < is + ns; ++i) {
 
  821     mult_zp2_thread(i, v2, vcp2_zp, ieo);
 
  828                                                   const Field& f, 
const int ieo)
 
  830   const double *v1 = f.
ptr(0);
 
  831   double       *v2 = w.
ptr(0);
 
  836   int is = m_Ntask * ith / nth;
 
  837   int ns = m_Ntask * (ith + 1) / nth - is;
 
  839   for (
int i = is; i < is + ns; ++i) {
 
  840     mult_zm1_thread(i, vcp1_zm, v1, ieo);
 
  854   for (
int i = is; i < is + ns; ++i) {
 
  855     mult_zmb_thread(i, v2, v1, ieo);
 
  858   for (
int i = is; i < is + ns; ++i) {
 
  859     mult_zm2_thread(i, v2, vcp2_zm, ieo);
 
  866                                                         const Field& f, 
const int ieo)
 
  868   const double *v1 = f.
ptr(0);
 
  869   double       *v2 = w.
ptr(0);
 
  874   int is = m_Ntask * ith / nth;
 
  875   int ns = m_Ntask * (ith + 1) / nth - is;
 
  877   for (
int i = is; i < is + ns; ++i) {
 
  878     mult_tp1_dirac_thread(i, vcp1_tp, v1, ieo);
 
  885     int Nv = m_Nvc * 2 * m_Nx2 * m_Ny * m_Nz;
 
  891   for (
int i = is; i < is + ns; ++i) {
 
  892     mult_tpb_dirac_thread(i, v2, v1, ieo);
 
  895   for (
int i = is; i < is + ns; ++i) {
 
  896     mult_tp2_dirac_thread(i, v2, vcp2_tp, ieo);
 
  903                                                         const Field& f, 
const int ieo)
 
  905   const double *v1 = f.
ptr(0);
 
  906   double       *v2 = w.
ptr(0);
 
  911   int is = m_Ntask * ith / nth;
 
  912   int ns = m_Ntask * (ith + 1) / nth - is;
 
  914   for (
int i = is; i < is + ns; ++i) {
 
  915     mult_tm1_dirac_thread(i, vcp1_tm, v1, ieo);
 
  922     int Nv = m_Nvc * 2 * m_Nx2 * m_Ny * m_Nz;
 
  928   for (
int i = is; i < is + ns; ++i) {
 
  929     mult_tmb_dirac_thread(i, v2, v1, ieo);
 
  932   for (
int i = is; i < is + ns; ++i) {
 
  933     mult_tm2_dirac_thread(i, v2, vcp2_tm, ieo);
 
  940                                                          const Field& f, 
const int ieo)
 
  942   const double *v1 = f.
ptr(0);
 
  943   double       *v2 = w.
ptr(0);
 
  948   int is = m_Ntask * ith / nth;
 
  949   int ns = m_Ntask * (ith + 1) / nth - is;
 
  951   for (
int i = is; i < is + ns; ++i) {
 
  952     mult_tp1_chiral_thread(i, vcp1_tp, v1, ieo);
 
  966   for (
int i = is; i < is + ns; ++i) {
 
  967     mult_tpb_chiral_thread(i, v2, v1, ieo);
 
  970   for (
int i = is; i < is + ns; ++i) {
 
  971     mult_tp2_chiral_thread(i, v2, vcp2_tp, ieo);
 
  978                                                          const Field& f, 
const int ieo)
 
  980   const double *v1 = f.
ptr(0);
 
  981   double       *v2 = w.
ptr(0);
 
  986   int is = m_Ntask * ith / nth;
 
  987   int ns = m_Ntask * (ith + 1) / nth - is;
 
  989   for (
int i = is; i < is + ns; ++i) {
 
  990     mult_tm1_chiral_thread(i, vcp1_tm, v1, ieo);
 
 1004   for (
int i = is; i < is + ns; ++i) {
 
 1005     mult_tmb_chiral_thread(i, v2, v1, ieo);
 
 1008   for (
int i = is; i < is + ns; ++i) {
 
 1009     mult_tm2_chiral_thread(i, v2, vcp2_tm, ieo);
 
void scal(Field &x, const double a)
scal(x, a): x = a * x 
 
void prePropD(Field &, Field &, const Field &)
 
void mult_xp(Field &, const Field &, const int ieo)
 
void mult_tp_chiral(Field &, const Field &, const int ieo)
 
void prePropDag(Field &, Field &, const Field &)
 
static int get_num_threads()
returns available number of threads. 
 
void(Fopr_Wilson_eo::Fopr_Wilson_eo_impl::* m_mult_tp)(Field &, const Field &, const int ieo)
 
const double * ptr(const int jin, const int site, const int jex) const 
 
void MeoMoe(Field &, const Field &)
 
void set(const int jin, const int site, const int jex, double v)
 
static const std::string class_name
 
void mult_gm5(Field &v, const Field &f)
 
void mult_tp_dirac(Field &, const Field &, const int ieo)
 
void D(Field &v, const Field &f)
 
void mult_xm(Field &, const Field &, const int ieo)
 
void general(const char *format,...)
 
void Meo_gm5(Field &, const Field &, const int ieo)
 
static Bridge::VerboseLevel Vlevel()
 
Container of Field-type object. 
 
void DdagD(Field &v, const Field &f)
 
static Channel * recv_init(int count, int idir, int ipm)
 
void gm5_chiral(Field &, const Field &)
 
void mult_zm(Field &, const Field &, const int ieo)
 
void gm5_dirac(Field &, const Field &)
 
std::vector< int > m_boundary
boundary condition. 
 
static int ipe(const int dir)
logical coordinate of current proc. 
 
void(Fopr_Wilson_eo::Fopr_Wilson_eo_impl::* m_mult_tm)(Field &, const Field &, const int ieo)
 
void copy(Field &y, const Field &x)
copy(y, x): y = x 
 
double * vcp1_xp
arrays for data transfer. 
 
void convertField(Field &eo, const Field &lex)
 
void scal_impl(Field &, double)
 
void(Fopr_Wilson_eo::* m_gm5)(Field &, const Field &)
 
void mult_gm5(Field &, const Field &)
 
void gm5_self_dirac(Field &)
 
void postPropDag(Field &, const Field &, const Field &)
 
static int get_thread_id()
returns thread id. 
 
Wilson-type fermion field. 
 
void mult_tm_dirac(Field &, const Field &, const int ieo)
 
std::vector< int > m_boundary
 
void Meo(Field &, const Field &, const int ieo)
 
void(Fopr_Wilson_eo::Fopr_Wilson_eo_impl::* m_gm5_self)(Field &)
 
void postPropD(Field &, const Field &, const Field &)
 
void DDdag(Field &v, const Field &f)
 
Bridge::VerboseLevel m_vl
 
void Ddag(Field &v, const Field &f)
 
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=COMPLEX)
 
static void sync_barrier_all()
barrier among all the threads and nodes. 
 
void aypx(const double a, Field &y, const Field &x)
aypx(y, a, x): y := a * y + x 
 
void Mdageo(Field &, const Field &, const int ieo)
 
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(Fopr_Wilson_eo::Fopr_Wilson_eo_impl::* m_gm5)(Field &, const Field &)
 
std::vector< Channel * > m_bw_recv
 
void mult_zp(Field &, const Field &, const int ieo)
 
void mult_tm_chiral(Field &, const Field &, const int ieo)
 
void paranoiac(const char *format,...)
 
void mult_ym(Field &, const Field &, const int ieo)
 
void set_parameters(const double kappa, const std::vector< int > bc)
 
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y 
 
void init(const std::string)
 
void crucial(const char *format,...)
 
void set_config(Field *U)
 
void gm5_self_chiral(Field &)
 
void H(Field &v, const Field &f)
 
void D(Field &v, const Field &f)
 
std::vector< Channel * > m_fw_send
 
std::vector< Channel * > m_fw_recv
 
void Meo(Field &, const Field &, const int ieo)
even-odd operatior: ieo=0: even <– odd, ieo=1: odd <– even 
 
void reverseField(Field &lex, const Field &eo)
 
std::vector< double > m_boundary2
b.c. for each node. 
 
static Channel * send_init(int count, int idir, int ipm)
 
void Ddag(Field &v, const Field &f)
 
Bridge::VerboseLevel m_vl
 
void mult_yp(Field &, const Field &, const int ieo)
 
static int sync()
synchronize within small world. 
 
void mult_m(int mu, Field_F &, const Field_F &, const int ieo)
 
void Mdageo(Field &, const Field &, const int ieo)
 
double flop_count()
this returns the number of floating point operations of Meo. 
 
static const std::string class_name
 
void mult_p(int mu, Field_F &, const Field_F &, const int ieo)
 
std::vector< Channel * > m_bw_send
 
std::string m_repr
Dirac matrix representation. 
 
void gm5p(const int mu, Field &, const Field &v)
gamma_5 (1 - gamma_mu) v(x + mu) used in force calculation.