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") {
 
  153   const std::valarray<int> bc)
 
  158   for (
int mu = 0; mu < 
m_Ndim; ++mu) {
 
  164   assert(bc.size() == 
m_Ndim);
 
  170   for (
int mu = 0; mu < 
m_Ndim; ++mu) {
 
  175   for (
int idir = 0; idir < 
m_Ndim; ++idir) {
 
  176     m_boundary2[idir] = 1.0;
 
  197   double flop_site, flop;
 
  200     flop_site = 
static_cast<double>(
 
  202   } 
else if (
m_repr == 
"Chiral") {
 
  203     flop_site = 
static_cast<double>(
 
  211   flop = flop_site * 
static_cast<double>(Lvol / 2);
 
  334   assert(f.
nex() == 1);
 
  353                                               const Field& f, 
const int ieo)
 
  374   (this->*m_mult_tp)(w, f, ieo);
 
  375   (this->*m_mult_tm)(w, f, ieo);
 
  385                                                  const Field& f, 
const int ieo)
 
  398                                                   const Field& f, 
const int ieo)
 
  407   (this->*
m_gm5)(w, f);
 
  413   (this->*m_gm5_self)(w);
 
  420   double *
v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  421   double *
v2 = w.
ptr(0);
 
  426   int is = m_Ntask * ith / nth;
 
  427   int ns = m_Ntask * (ith + 1) / nth - is;
 
  429   for (
int i = is; i < is + ns; ++i) {
 
  430     gm5_dirac_thread(i, v2, v1);
 
  439   double *
v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  440   double *
v2 = w.
ptr(0);
 
  445   int is = m_Ntask * ith / nth;
 
  446   int ns = m_Ntask * (ith + 1) / nth - is;
 
  448   for (
int i = is; i < is + ns; ++i) {
 
  449     gm5_chiral_thread(i, v2, v1);
 
  457   double *wp = w.
ptr(0);
 
  462   int is = m_Ntask * ith / nth;
 
  463   int ns = m_Ntask * (ith + 1) / nth - is;
 
  465   for (
int i = is; i < is + ns; ++i) {
 
  466     gm5_dirac_thread(i, wp);
 
  474   double *wp = w.
ptr(0);
 
  479   int is = m_Ntask * ith / nth;
 
  480   int ns = m_Ntask * (ith + 1) / nth - is;
 
  482   for (
int i = is; i < is + ns; ++i) {
 
  483     gm5_chiral_thread(i, wp);
 
  504   } 
else if (mu == 1) {
 
  506   } 
else if (mu == 2) {
 
  508   } 
else if (mu == 3) {
 
  509     mult_tp_dirac(w, f, ieo);
 
  525   } 
else if (mu == 1) {
 
  527   } 
else if (mu == 2) {
 
  529   } 
else if (mu == 3) {
 
  530     mult_tm_dirac(w, f, ieo);
 
  542   double *wp = w.
ptr(0);
 
  547   int is = m_Ntask * ith / nth;
 
  548   int ns = m_Ntask * (ith + 1) / nth - is;
 
  550   for (
int i = is; i < is + ns; ++i) {
 
  559   double *wp = w.
ptr(0);
 
  564   int is = m_Ntask * ith / nth;
 
  565   int ns = m_Ntask * (ith + 1) / nth - is;
 
  567   for (
int i = is; i < is + ns; ++i) {
 
  568     scal_thread(i, wp, a);
 
  575                                                   const Field& f, 
const int ieo)
 
  577   double *
v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  578   double *
v2 = w.
ptr(0);
 
  583   int is = m_Ntask * ith / nth;
 
  584   int ns = m_Ntask * (ith + 1) / nth - is;
 
  586   for (
int i = is; i < is + ns; ++i) {
 
  587     mult_xp1_thread(i, vcp1_xp, v1, ieo);
 
  593     int Nv = m_Nvc * 2 * (m_Ny / 2) * m_Nz * m_Nt;
 
  598   for (
int i = is; i < is + ns; ++i) {
 
  599     mult_xpb_thread(i, v2, v1, ieo);
 
  602   for (
int i = is; i < is + ns; ++i) {
 
  603     mult_xp2_thread(i, v2, vcp2_xp, ieo);
 
  610                                                   const Field& f, 
const int ieo)
 
  612   double *
v2 = w.
ptr(0);
 
  613   double *
v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  618   int is = m_Ntask * ith / nth;
 
  619   int ns = m_Ntask * (ith + 1) / nth - is;
 
  621   for (
int i = is; i < is + ns; ++i) {
 
  622     mult_xm1_thread(i, vcp1_xm, v1, ieo);
 
  628     int Nv = m_Nvc * 2 * (m_Ny / 2) * m_Nz * m_Nt;
 
  633   for (
int i = is; i < is + ns; ++i) {
 
  634     mult_xmb_thread(i, v2, v1, ieo);
 
  637   for (
int i = is; i < is + ns; ++i) {
 
  638     mult_xm2_thread(i, v2, vcp2_xm, ieo);
 
  645                                                   const Field& f, 
const int ieo)
 
  647   double *
v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  648   double *
v2 = w.
ptr(0);
 
  653   int is = m_Ntask * ith / nth;
 
  654   int ns = m_Ntask * (ith + 1) / nth - is;
 
  656   for (
int i = is; i < is + ns; ++i) {
 
  657     mult_yp1_thread(i, vcp1_yp, v1, ieo);
 
  663     int Nv = m_Nvc * 2 * m_Nx2 * m_Nz * m_Nt;
 
  668   for (
int i = is; i < is + ns; ++i) {
 
  669     mult_ypb_thread(i, v2, v1, ieo);
 
  672   for (
int i = is; i < is + ns; ++i) {
 
  673     mult_yp2_thread(i, v2, vcp2_yp, ieo);
 
  680                                                   const Field& f, 
const int ieo)
 
  682   double *
v2 = w.
ptr(0);
 
  683   double *
v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  688   int is = m_Ntask * ith / nth;
 
  689   int ns = m_Ntask * (ith + 1) / nth - is;
 
  691   for (
int i = is; i < is + ns; ++i) {
 
  692     mult_ym1_thread(i, vcp1_ym, v1, ieo);
 
  698     int Nv = m_Nvc * 2 * m_Nx2 * m_Nz * m_Nt;
 
  703   for (
int i = is; i < is + ns; ++i) {
 
  704     mult_ymb_thread(i, v2, v1, ieo);
 
  707   for (
int i = is; i < is + ns; ++i) {
 
  708     mult_ym2_thread(i, v2, vcp2_ym, 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_zp1_thread(i, vcp1_zp, v1, ieo);
 
  733     int Nv = m_Nvc * 2 * m_Nx2 * m_Ny * m_Nt;
 
  738   for (
int i = is; i < is + ns; ++i) {
 
  739     mult_zpb_thread(i, v2, v1, ieo);
 
  742   for (
int i = is; i < is + ns; ++i) {
 
  743     mult_zp2_thread(i, v2, vcp2_zp, ieo);
 
  750                                                   const Field& f, 
const int ieo)
 
  752   double *
v2 = w.
ptr(0);
 
  753   double *
v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  758   int is = m_Ntask * ith / nth;
 
  759   int ns = m_Ntask * (ith + 1) / nth - is;
 
  761   for (
int i = is; i < is + ns; ++i) {
 
  762     mult_zm1_thread(i, vcp1_zm, v1, ieo);
 
  768     int Nv = m_Nvc * 2 * m_Nx2 * m_Ny * m_Nt;
 
  773   for (
int i = is; i < is + ns; ++i) {
 
  774     mult_zmb_thread(i, v2, v1, ieo);
 
  777   for (
int i = is; i < is + ns; ++i) {
 
  778     mult_zm2_thread(i, v2, vcp2_zm, ieo);
 
  785                                                         const Field& f, 
const int ieo)
 
  787   double *
v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  788   double *
v2 = w.
ptr(0);
 
  793   int is = m_Ntask * ith / nth;
 
  794   int ns = m_Ntask * (ith + 1) / nth - is;
 
  796   for (
int i = is; i < is + ns; ++i) {
 
  797     mult_tp1_dirac_thread(i, vcp1_tp, v1, ieo);
 
  803     int Nv = m_Nvc * 2 * m_Nx2 * m_Ny * m_Nz;
 
  808   for (
int i = is; i < is + ns; ++i) {
 
  809     mult_tpb_dirac_thread(i, v2, v1, ieo);
 
  812   for (
int i = is; i < is + ns; ++i) {
 
  813     mult_tp2_dirac_thread(i, v2, vcp2_tp, ieo);
 
  820                                                         const Field& f, 
const int ieo)
 
  822   double *
v2 = w.
ptr(0);
 
  823   double *
v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  828   int is = m_Ntask * ith / nth;
 
  829   int ns = m_Ntask * (ith + 1) / nth - is;
 
  831   for (
int i = is; i < is + ns; ++i) {
 
  832     mult_tm1_dirac_thread(i, vcp1_tm, v1, ieo);
 
  838     int Nv = m_Nvc * 2 * m_Nx2 * m_Ny * m_Nz;
 
  843   for (
int i = is; i < is + ns; ++i) {
 
  844     mult_tmb_dirac_thread(i, v2, v1, ieo);
 
  847   for (
int i = is; i < is + ns; ++i) {
 
  848     mult_tm2_dirac_thread(i, v2, vcp2_tm, ieo);
 
  855                                                          const Field& f, 
const int ieo)
 
  857   double *
v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  858   double *
v2 = w.
ptr(0);
 
  863   int is = m_Ntask * ith / nth;
 
  864   int ns = m_Ntask * (ith + 1) / nth - is;
 
  866   for (
int i = is; i < is + ns; ++i) {
 
  867     mult_tp1_chiral_thread(i, vcp1_tp, v1, ieo);
 
  873     int Nv = m_Nvc * 2 * m_Nx2 * m_Ny * m_Nz;
 
  878   for (
int i = is; i < is + ns; ++i) {
 
  879     mult_tpb_chiral_thread(i, v2, v1, ieo);
 
  882   for (
int i = is; i < is + ns; ++i) {
 
  883     mult_tp2_chiral_thread(i, v2, vcp2_tp, ieo);
 
  890                                                          const Field& f, 
const int ieo)
 
  892   double *
v2 = w.
ptr(0);
 
  893   double *
v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  898   int is = m_Ntask * ith / nth;
 
  899   int ns = m_Ntask * (ith + 1) / nth - is;
 
  901   for (
int i = is; i < is + ns; ++i) {
 
  902     mult_tm1_chiral_thread(i, vcp1_tm, v1, ieo);
 
  908     int Nv = m_Nvc * 2 * m_Nx2 * m_Ny * m_Nz;
 
  913   for (
int i = is; i < is + ns; ++i) {
 
  914     mult_tmb_chiral_thread(i, v2, v1, ieo);
 
  917   for (
int i = is; i < is + ns; ++i) {
 
  918     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()
 
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. 
 
void DdagD(Field &v, const Field &f)
 
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. 
 
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 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,...)
 
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. 
 
void Ddag(Field &v, const Field &f)
 
Bridge::VerboseLevel m_vl
 
void mult_yp(Field &, const Field &, const int ieo)
 
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. 
 
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