21   = 
"Fopr_Wilson_eo_impl";
 
   45   if ((
m_Nx % 2) != 0) {
 
   51   if ((
m_Ny % 2) != 0) {
 
   63   for (
int t = 0; t < 
m_Nt; ++t) {
 
   64     for (
int z = 0; z < 
m_Nz; ++z) {
 
   65       for (
int y = 0; y < 
m_Ny; ++y) {
 
   69         m_Leo[y + m_Ny * (z + m_Nz * t)] = (y2 + z2 + t2) % 2;
 
   81   } 
else if (
m_repr == 
"Chiral") {
 
   92   int Nvx = 
m_Nvc * 2 * (
m_Ny / 2) * m_Nz * m_Nt;
 
  117   buf_size[0] = 
sizeof(double) * 
m_Nvc * 2 * (
m_Ny / 2) * m_Nz * 
m_Nt;
 
  118   buf_size[1] = 
sizeof(double) * 
m_Nvc * 2 * 
m_Nx2 * m_Nz * m_Nt;
 
  136   for (
int imu = 0; imu < 
m_Ndim; ++imu) {
 
  196   const std::valarray<int> bc)
 
  201   for (
int mu = 0; mu < 
m_Ndim; ++mu) {
 
  207   assert(bc.size() == 
m_Ndim);
 
  213   for (
int mu = 0; mu < 
m_Ndim; ++mu) {
 
  218   for (
int idir = 0; idir < 
m_Ndim; ++idir) {
 
  219     m_boundary2[idir] = 1.0;
 
  245   double flop_site, flop;
 
  248     flop_site = 
static_cast<double>(
 
  249       m_Nc * m_Nd * (6 * (4 * m_Nc + 2) + 2 * (4 * m_Nc + 1)));
 
  250   } 
else if (
m_repr == 
"Chiral") {
 
  251     flop_site = 
static_cast<double>(
 
  252       m_Nc * m_Nd * 8 * (4 * m_Nc + 2));
 
  259   flop = flop_site * 
static_cast<double>(Lvol / 2);
 
  356   assert(f.
nex() == 1);
 
  412                                               const Field& f, 
const int ieo)
 
  433   (this->*m_mult_tp)(w, f, ieo);
 
  434   (this->*m_mult_tm)(w, f, ieo);
 
  445                                                  const Field& f, 
const int ieo)
 
  459                                                   const Field& f, 
const int ieo)
 
  469   (this->*
m_gm5)(w, f);
 
  476   (this->*m_gm5_self)(w);
 
  484   double *
v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  485   double *
v2 = w.
ptr(0);
 
  490   int is = m_Ntask * ith / nth;
 
  491   int ns = m_Ntask * (ith + 1) / nth - is;
 
  493   for (
int i = is; i < is + ns; ++i) {
 
  494     gm5_dirac_thread(i, v2, v1);
 
  503   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  504   double *v2 = w.
ptr(0);
 
  509   int is = m_Ntask * ith / nth;
 
  510   int ns = m_Ntask * (ith + 1) / nth - is;
 
  512   for (
int i = is; i < is + ns; ++i) {
 
  513     gm5_chiral_thread(i, v2, v1);
 
  521   double *wp = w.
ptr(0);
 
  526   int is = m_Ntask * ith / nth;
 
  527   int ns = m_Ntask * (ith + 1) / nth - is;
 
  529   for (
int i = is; i < is + ns; ++i) {
 
  530     gm5_dirac_thread(i, wp);
 
  538   double *wp = w.
ptr(0);
 
  543   int is = m_Ntask * ith / nth;
 
  544   int ns = m_Ntask * (ith + 1) / nth - is;
 
  546   for (
int i = is; i < is + ns; ++i) {
 
  547     gm5_chiral_thread(i, wp);
 
  569   } 
else if (mu == 1) {
 
  571   } 
else if (mu == 2) {
 
  573   } 
else if (mu == 3) {
 
  574     mult_tp_dirac(w, f, ieo);
 
  590   } 
else if (mu == 1) {
 
  592   } 
else if (mu == 2) {
 
  594   } 
else if (mu == 3) {
 
  595     mult_tm_dirac(w, f, ieo);
 
  607   double *wp = w.
ptr(0);
 
  612   int is = m_Ntask * ith / nth;
 
  613   int ns = m_Ntask * (ith + 1) / nth - is;
 
  615   for (
int i = is; i < is + ns; ++i) {
 
  624   double *wp = w.
ptr(0);
 
  629   int is = m_Ntask * ith / nth;
 
  630   int ns = m_Ntask * (ith + 1) / nth - is;
 
  632   for (
int i = is; i < is + ns; ++i) {
 
  633     scal_thread(i, wp, a);
 
  640                                                   const Field& f, 
const int ieo)
 
  642   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  643   double *v2 = w.
ptr(0);
 
  648   int is = m_Ntask * ith / nth;
 
  649   int ns = m_Ntask * (ith + 1) / nth - is;
 
  651   for (
int i = is; i < is + ns; ++i) {
 
  652     mult_xp1_thread(i, vcp1_xp, v1, ieo);
 
  665   for (
int i = is; i < is + ns; ++i) {
 
  666     mult_xpb_thread(i, v2, v1, ieo);
 
  669   for (
int i = is; i < is + ns; ++i) {
 
  670     mult_xp2_thread(i, v2, vcp2_xp, ieo);
 
  677                                                   const Field& f, 
const int ieo)
 
  679   double *v2 = w.
ptr(0);
 
  680   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  685   int is = m_Ntask * ith / nth;
 
  686   int ns = m_Ntask * (ith + 1) / nth - is;
 
  688   for (
int i = is; i < is + ns; ++i) {
 
  689     mult_xm1_thread(i, vcp1_xm, v1, ieo);
 
  703   for (
int i = is; i < is + ns; ++i) {
 
  704     mult_xmb_thread(i, v2, v1, ieo);
 
  707   for (
int i = is; i < is + ns; ++i) {
 
  708     mult_xm2_thread(i, v2, vcp2_xm, ieo);
 
  715                                                   const Field& f, 
const int ieo)
 
  717   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  718   double *v2 = w.
ptr(0);
 
  723   int is = m_Ntask * ith / nth;
 
  724   int ns = m_Ntask * (ith + 1) / nth - is;
 
  726   for (
int i = is; i < is + ns; ++i) {
 
  727     mult_yp1_thread(i, vcp1_yp, v1, ieo);
 
  741   for (
int i = is; i < is + ns; ++i) {
 
  742     mult_ypb_thread(i, v2, v1, ieo);
 
  745   for (
int i = is; i < is + ns; ++i) {
 
  746     mult_yp2_thread(i, v2, vcp2_yp, ieo);
 
  753                                                   const Field& f, 
const int ieo)
 
  755   double *v2 = w.
ptr(0);
 
  756   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  761   int is = m_Ntask * ith / nth;
 
  762   int ns = m_Ntask * (ith + 1) / nth - is;
 
  764   for (
int i = is; i < is + ns; ++i) {
 
  765     mult_ym1_thread(i, vcp1_ym, v1, ieo);
 
  779   for (
int i = is; i < is + ns; ++i) {
 
  780     mult_ymb_thread(i, v2, v1, ieo);
 
  783   for (
int i = is; i < is + ns; ++i) {
 
  784     mult_ym2_thread(i, v2, vcp2_ym, ieo);
 
  791                                                   const Field& f, 
const int ieo)
 
  793   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  794   double *v2 = w.
ptr(0);
 
  799   int is = m_Ntask * ith / nth;
 
  800   int ns = m_Ntask * (ith + 1) / nth - is;
 
  802   for (
int i = is; i < is + ns; ++i) {
 
  803     mult_zp1_thread(i, vcp1_zp, v1, ieo);
 
  817   for (
int i = is; i < is + ns; ++i) {
 
  818     mult_zpb_thread(i, v2, v1, ieo);
 
  821   for (
int i = is; i < is + ns; ++i) {
 
  822     mult_zp2_thread(i, v2, vcp2_zp, ieo);
 
  829                                                   const Field& f, 
const int ieo)
 
  831   double *v2 = w.
ptr(0);
 
  832   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  837   int is = m_Ntask * ith / nth;
 
  838   int ns = m_Ntask * (ith + 1) / nth - is;
 
  840   for (
int i = is; i < is + ns; ++i) {
 
  841     mult_zm1_thread(i, vcp1_zm, v1, ieo);
 
  855   for (
int i = is; i < is + ns; ++i) {
 
  856     mult_zmb_thread(i, v2, v1, ieo);
 
  859   for (
int i = is; i < is + ns; ++i) {
 
  860     mult_zm2_thread(i, v2, vcp2_zm, ieo);
 
  867                                                         const Field& f, 
const int ieo)
 
  869   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  870   double *v2 = w.
ptr(0);
 
  875   int is = m_Ntask * ith / nth;
 
  876   int ns = m_Ntask * (ith + 1) / nth - is;
 
  878   for (
int i = is; i < is + ns; ++i) {
 
  879     mult_tp1_dirac_thread(i, vcp1_tp, v1, ieo);
 
  886     int Nv = m_Nvc * 2 * m_Nx2 * m_Ny * m_Nz;
 
  892   for (
int i = is; i < is + ns; ++i) {
 
  893     mult_tpb_dirac_thread(i, v2, v1, ieo);
 
  896   for (
int i = is; i < is + ns; ++i) {
 
  897     mult_tp2_dirac_thread(i, v2, vcp2_tp, ieo);
 
  904                                                         const Field& f, 
const int ieo)
 
  906   double *v2 = w.
ptr(0);
 
  907   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  912   int is = m_Ntask * ith / nth;
 
  913   int ns = m_Ntask * (ith + 1) / nth - is;
 
  915   for (
int i = is; i < is + ns; ++i) {
 
  916     mult_tm1_dirac_thread(i, vcp1_tm, v1, ieo);
 
  923     int Nv = m_Nvc * 2 * m_Nx2 * m_Ny * m_Nz;
 
  929   for (
int i = is; i < is + ns; ++i) {
 
  930     mult_tmb_dirac_thread(i, v2, v1, ieo);
 
  933   for (
int i = is; i < is + ns; ++i) {
 
  934     mult_tm2_dirac_thread(i, v2, vcp2_tm, ieo);
 
  941                                                          const Field& f, 
const int ieo)
 
  943   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  944   double *v2 = w.
ptr(0);
 
  949   int is = m_Ntask * ith / nth;
 
  950   int ns = m_Ntask * (ith + 1) / nth - is;
 
  952   for (
int i = is; i < is + ns; ++i) {
 
  953     mult_tp1_chiral_thread(i, vcp1_tp, v1, ieo);
 
  967   for (
int i = is; i < is + ns; ++i) {
 
  968     mult_tpb_chiral_thread(i, v2, v1, ieo);
 
  971   for (
int i = is; i < is + ns; ++i) {
 
  972     mult_tp2_chiral_thread(i, v2, vcp2_tp, ieo);
 
  979                                                          const Field& f, 
const int ieo)
 
  981   double *v2 = w.
ptr(0);
 
  982   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  987   int is = m_Ntask * ith / nth;
 
  988   int ns = m_Ntask * (ith + 1) / nth - is;
 
  990   for (
int i = is; i < is + ns; ++i) {
 
  991     mult_tm1_chiral_thread(i, vcp1_tm, v1, ieo);
 
 1005   for (
int i = is; i < is + ns; ++i) {
 
 1006     mult_tmb_chiral_thread(i, v2, v1, ieo);
 
 1009   for (
int i = is; i < is + ns; ++i) {
 
 1010     mult_tm2_chiral_thread(i, v2, vcp2_tm, ieo);
 
void scal(Field &x, const double a)
scal(x, a): x = a * x 
 
const Field_F Meo(const Field_F &, const int ieo)
 
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)
 
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)
 
const Field_F Mdageo(const Field_F &, const int ieo)
 
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()
 
std::valarray< Channel * > m_bw_recv
 
void set_parameters(const double kappa, const std::valarray< int > bc)
 
double * ptr(const int jin, const int site, const int jex)
 
Container of Field-type object. 
 
std::valarray< Channel * > m_fw_recv
 
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 &)
 
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 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)
 
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(Fopr_Wilson_eo::* m_gm5)(Field &, const Field &)
 
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. 
 
std::valarray< Channel * > m_bw_send
 
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 &)
 
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 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,...)
 
std::valarray< Channel * > m_fw_send
 
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::valarray< double > m_boundary2
b.c. for each node. 
 
void reverseField(Field &lex, const Field &eo)
 
std::valarray< int > m_boundary
boundary condition. 
 
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)
 
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::string m_repr
Dirac matrix representation. 
 
std::valarray< int > m_npe
 
void gm5p(const int mu, Field &, const Field &v)
gamma_5 (1 - gamma_mu) v(x + mu) used in force calculation. 
 
std::valarray< int > m_boundary