25 #if defined USE_GROUP_SU3 
   26 #include "fopr_Wilson_impl_SU3.inc" 
   27 #elif defined USE_GROUP_SU2 
   28 #include "fopr_Wilson_impl_SU2.inc" 
   29 #elif defined USE_GROUP_SU_N 
   30 #include "fopr_Wilson_impl_SU_N.inc" 
   84   } 
else if (
m_repr == 
"Chiral") {
 
  133   } 
else if (m_mode == 
"Ddag") {
 
  136   } 
else if (m_mode == 
"DdagD") {
 
  139   } 
else if (m_mode == 
"DDdag") {
 
  142   } 
else if (m_mode == 
"H") {
 
  184                                                    const valarray<int> bc)
 
  186   assert(bc.size() == m_Ndim);
 
  190   for (
int mu = 0; mu < m_Ndim; ++mu) {
 
  191     m_boundary[mu] = bc[mu];
 
  196   for (
int mu = 0; mu < m_Ndim; ++mu) {
 
  201   for (
int idir = 0; idir < m_Ndim; ++idir) {
 
  202     m_boundary2[idir] = 1.0;
 
  216   double flop_site, flop;
 
  218   if (m_repr == 
"Dirac") {
 
  219     flop_site = 
static_cast<double>(
 
  220       m_Nc * m_Nd * (4 + 6 * (4 * m_Nc + 2) + 2 * (4 * m_Nc + 1)));
 
  221   } 
else if (m_repr == 
"Chiral") {
 
  222     flop_site = 
static_cast<double>(
 
  223       m_Nc * m_Nd * (4 + 8 * (4 * m_Nc + 2)));
 
  230   flop = flop_site * 
static_cast<double>(Lvol);
 
  232   if ((m_mode == 
"DdagD") || (m_mode == 
"DDdag")) flop *= 2.0;
 
  240   D_ex_dirac(w, 0, f, 0);
 
  246   D_ex_chiral(w, 0, f, 0);
 
  255   } 
else if (mu == 1) {
 
  257   } 
else if (mu == 2) {
 
  259   } 
else if (mu == 3) {
 
  260     (this->*m_mult_tp)(w, f);
 
  273   } 
else if (mu == 1) {
 
  275   } 
else if (mu == 2) {
 
  277   } 
else if (mu == 3) {
 
  278     (this->*m_mult_tm)(w, f);
 
  288                                                const Field& f, 
const int ex2)
 
  290   int    Ninvol = m_Nvc * m_Nd * m_Nvol;
 
  291   double *v1    = 
const_cast<Field *
>(&f)->ptr(Ninvol * ex2);
 
  292   double *v2    = w.
ptr(Ninvol * ex1);
 
  297   int is = m_Ntask * ith / nth;
 
  298   int ns = m_Ntask * (ith + 1) / nth - is;
 
  300   for (
int i = is; i < is + ns; ++i) {
 
  301     mult_xp1_thread(i, vcp1_xp, v1);
 
  302     mult_xm1_thread(i, vcp1_xm, v1);
 
  303     mult_yp1_thread(i, vcp1_yp, v1);
 
  304     mult_ym1_thread(i, vcp1_ym, v1);
 
  305     mult_zp1_thread(i, vcp1_zp, v1);
 
  306     mult_zm1_thread(i, vcp1_zm, v1);
 
  307     mult_tp1_dirac_thread(i, vcp1_tp, v1);
 
  308     mult_tm1_dirac_thread(i, vcp1_tm, v1);
 
  314     int Nvx = m_Nvc * 2 * m_Ny * m_Nz * m_Nt;
 
  318     int Nvy = m_Nvc * 2 * m_Nx * m_Nz * m_Nt;
 
  322     int Nvz = m_Nvc * 2 * m_Nx * m_Ny * m_Nt;
 
  326     int Nvt = m_Nvc * 2 * m_Nx * m_Ny * m_Nz;
 
  332   for (
int i = is; i < is + ns; ++i) {
 
  334     mult_xpb_thread(i, v2, v1);
 
  335     mult_xmb_thread(i, v2, v1);
 
  336     mult_ypb_thread(i, v2, v1);
 
  337     mult_ymb_thread(i, v2, v1);
 
  338     mult_zpb_thread(i, v2, v1);
 
  339     mult_zmb_thread(i, v2, v1);
 
  340     mult_tpb_dirac_thread(i, v2, v1);
 
  341     mult_tmb_dirac_thread(i, v2, v1);
 
  344   for (
int i = is; i < is + ns; ++i) {
 
  345     mult_xp2_thread(i, v2, vcp2_xp);
 
  346     mult_xm2_thread(i, v2, vcp2_xm);
 
  347     mult_yp2_thread(i, v2, vcp2_yp);
 
  348     mult_ym2_thread(i, v2, vcp2_ym);
 
  349     mult_zp2_thread(i, v2, vcp2_zp);
 
  350     mult_zm2_thread(i, v2, vcp2_zm);
 
  351     mult_tp2_dirac_thread(i, v2, vcp2_tp);
 
  352     mult_tm2_dirac_thread(i, v2, vcp2_tm);
 
  353     daypx_thread(i, v2, -m_kappa, v1);   
 
  361                                                 const Field& f, 
const int ex2)
 
  363   int    Ninvol = m_Nvc * m_Nd * m_Nvol;
 
  364   double *v1    = 
const_cast<Field *
>(&f)->ptr(Ninvol * ex2);
 
  365   double *v2    = w.
ptr(Ninvol * ex1);
 
  370   int is = m_Ntask * ith / nth;
 
  371   int ns = m_Ntask * (ith + 1) / nth - is;
 
  373   for (
int i = is; i < is + ns; ++i) {
 
  374     mult_xp1_thread(i, vcp1_xp, v1);
 
  375     mult_xm1_thread(i, vcp1_xm, v1);
 
  376     mult_yp1_thread(i, vcp1_yp, v1);
 
  377     mult_ym1_thread(i, vcp1_ym, v1);
 
  378     mult_zp1_thread(i, vcp1_zp, v1);
 
  379     mult_zm1_thread(i, vcp1_zm, v1);
 
  380     mult_tp1_chiral_thread(i, vcp1_tp, v1);
 
  381     mult_tm1_chiral_thread(i, vcp1_tm, v1);
 
  387     int Nvx = m_Nvc * 2 * m_Ny * m_Nz * m_Nt;
 
  391     int Nvy = m_Nvc * 2 * m_Nx * m_Nz * m_Nt;
 
  395     int Nvz = m_Nvc * 2 * m_Nx * m_Ny * m_Nt;
 
  399     int Nvt = m_Nvc * 2 * m_Nx * m_Ny * m_Nz;
 
  405   for (
int i = is; i < is + ns; ++i) {
 
  407     mult_xpb_thread(i, v2, v1);
 
  408     mult_xmb_thread(i, v2, v1);
 
  409     mult_ypb_thread(i, v2, v1);
 
  410     mult_ymb_thread(i, v2, v1);
 
  411     mult_zpb_thread(i, v2, v1);
 
  412     mult_zmb_thread(i, v2, v1);
 
  413     mult_tpb_chiral_thread(i, v2, v1);
 
  414     mult_tmb_chiral_thread(i, v2, v1);
 
  417   for (
int i = is; i < is + ns; ++i) {
 
  418     mult_xp2_thread(i, v2, vcp2_xp);
 
  419     mult_xm2_thread(i, v2, vcp2_xm);
 
  420     mult_yp2_thread(i, v2, vcp2_yp);
 
  421     mult_ym2_thread(i, v2, vcp2_ym);
 
  422     mult_zp2_thread(i, v2, vcp2_zp);
 
  423     mult_zm2_thread(i, v2, vcp2_zm);
 
  424     mult_tp2_chiral_thread(i, v2, vcp2_tp);
 
  425     mult_tm2_chiral_thread(i, v2, vcp2_tm);
 
  426     daypx_thread(i, v2, -m_kappa, v1);   
 
  457                                                 const Field& v, 
const int ex2, 
const int ipm)
 
  463   } 
else if (ipm == -1) {
 
  470   m_w1.setpart_ex(0, v, ex2);
 
  472   m_w1.addpart_ex(0, m_w2, 0, fpm);
 
  478                                           double fac, 
const Field& f)
 
  480   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  481   double *v2 = w.
ptr(0);
 
  486   int is = m_Ntask * ith / nth;
 
  487   int ns = m_Ntask * (ith + 1) / nth - is;
 
  489   for (
int i = is; i < is + ns; ++i) {
 
  490     daypx_thread(i, v2, fac, v1);
 
  498   double *v2 = w.
ptr(0);
 
  503   int is = m_Ntask * ith / nth;
 
  504   int ns = m_Ntask * (ith + 1) / nth - is;
 
  506   for (
int i = is; i < is + ns; ++i) {
 
  515   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  516   double *v2 = w.
ptr(0);
 
  521   int is = m_Ntask * ith / nth;
 
  522   int ns = m_Ntask * (ith + 1) / nth - is;
 
  524   for (
int i = is; i < is + ns; ++i) {
 
  525     gm5_dirac_thread(i, v2, v1);
 
  533   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  534   double *v2 = w.
ptr(0);
 
  539   int is = m_Ntask * ith / nth;
 
  540   int ns = m_Ntask * (ith + 1) / nth - is;
 
  542   for (
int i = is; i < is + ns; ++i) {
 
  543     gm5_chiral_thread(i, v2, v1);
 
  551   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  552   double *v2 = w.
ptr(0);
 
  557   int is = m_Ntask * ith / nth;
 
  558   int ns = m_Ntask * (ith + 1) / nth - is;
 
  562   for (
int i = is; i < is + ns; ++i) {
 
  563     mult_xp1_thread(i, vcp1_xp, v1);
 
  569     int Nv = m_Nvc * 2 * m_Ny * m_Nz * m_Nt;
 
  574   for (
int i = is; i < is + ns; ++i) {
 
  575     mult_xpb_thread(i, v2, v1);
 
  578   for (
int i = is; i < is + ns; ++i) {
 
  579     mult_xp2_thread(i, v2, vcp2_xp);
 
  588   double *v2 = w.
ptr(0);
 
  589   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  594   int is = m_Ntask * ith / nth;
 
  595   int ns = m_Ntask * (ith + 1) / nth - is;
 
  599   for (
int i = is; i < is + ns; ++i) {
 
  600     mult_xm1_thread(i, vcp1_xm, v1);
 
  606     int Nv = m_Nvc * 2 * m_Ny * m_Nz * m_Nt;
 
  611   for (
int i = is; i < is + ns; ++i) {
 
  612     mult_xmb_thread(i, v2, v1);
 
  615   for (
int i = is; i < is + ns; ++i) {
 
  616     mult_xm2_thread(i, v2, vcp2_xm);
 
  625   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  626   double *v2 = w.
ptr(0);
 
  631   int is = m_Ntask * ith / nth;
 
  632   int ns = m_Ntask * (ith + 1) / nth - is;
 
  636   for (
int i = is; i < is + ns; ++i) {
 
  637     mult_yp1_thread(i, vcp1_yp, v1);
 
  643     int Nv = m_Nvc * 2 * m_Nx * m_Nz * m_Nt;
 
  648   for (
int i = is; i < is + ns; ++i) {
 
  649     mult_ypb_thread(i, v2, v1);
 
  652   for (
int i = is; i < is + ns; ++i) {
 
  653     mult_yp2_thread(i, v2, vcp2_yp);
 
  662   double *v2 = w.
ptr(0);
 
  663   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  668   int is = m_Ntask * ith / nth;
 
  669   int ns = m_Ntask * (ith + 1) / nth - is;
 
  673   for (
int i = is; i < is + ns; ++i) {
 
  674     mult_ym1_thread(i, vcp1_ym, v1);
 
  680     int Nv = m_Nvc * 2 * m_Nx * m_Nz * m_Nt;
 
  685   for (
int i = is; i < is + ns; ++i) {
 
  686     mult_ymb_thread(i, v2, v1);
 
  689   for (
int i = is; i < is + ns; ++i) {
 
  690     mult_ym2_thread(i, v2, vcp2_ym);
 
  699   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  700   double *v2 = w.
ptr(0);
 
  705   int is = m_Ntask * ith / nth;
 
  706   int ns = m_Ntask * (ith + 1) / nth - is;
 
  710   for (
int i = is; i < is + ns; ++i) {
 
  711     mult_zp1_thread(i, vcp1_zp, v1);
 
  717     int Nv = m_Nvc * 2 * m_Nx * m_Ny * m_Nt;
 
  722   for (
int i = is; i < is + ns; ++i) {
 
  723     mult_zpb_thread(i, v2, v1);
 
  726   for (
int i = is; i < is + ns; ++i) {
 
  727     mult_zp2_thread(i, v2, vcp2_zp);
 
  736   double *v2 = w.
ptr(0);
 
  737   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  742   int is = m_Ntask * ith / nth;
 
  743   int ns = m_Ntask * (ith + 1) / nth - is;
 
  747   for (
int i = is; i < is + ns; ++i) {
 
  748     mult_zm1_thread(i, vcp1_zm, v1);
 
  754     int Nv = m_Nvc * 2 * m_Nx * m_Ny * m_Nt;
 
  759   for (
int i = is; i < is + ns; ++i) {
 
  760     mult_zmb_thread(i, v2, v1);
 
  763   for (
int i = is; i < is + ns; ++i) {
 
  764     mult_zm2_thread(i, v2, vcp2_zm);
 
  773   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  774   double *v2 = w.
ptr(0);
 
  779   int is = m_Ntask * ith / nth;
 
  780   int ns = m_Ntask * (ith + 1) / nth - is;
 
  784   for (
int i = is; i < is + ns; ++i) {
 
  785     mult_tp1_dirac_thread(i, vcp1_tp, v1);
 
  791     int Nv = m_Nvc * 2 * m_Nx * m_Ny * m_Nz;
 
  796   for (
int i = is; i < is + ns; ++i) {
 
  797     mult_tpb_dirac_thread(i, v2, v1);
 
  800   for (
int i = is; i < is + ns; ++i) {
 
  801     mult_tp2_dirac_thread(i, v2, vcp2_tp);
 
  810   double *v2 = w.
ptr(0);
 
  811   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  816   int is = m_Ntask * ith / nth;
 
  817   int ns = m_Ntask * (ith + 1) / nth - is;
 
  821   for (
int i = is; i < is + ns; ++i) {
 
  822     mult_tm1_dirac_thread(i, vcp1_tm, v1);
 
  828     int Nv = m_Nvc * 2 * m_Nx * m_Ny * m_Nz;
 
  833   for (
int i = is; i < is + ns; ++i) {
 
  834     mult_tmb_dirac_thread(i, v2, v1);
 
  837   for (
int i = is; i < is + ns; ++i) {
 
  838     mult_tm2_dirac_thread(i, v2, vcp2_tm);
 
  847   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  848   double *v2 = w.
ptr(0);
 
  853   int is = m_Ntask * ith / nth;
 
  854   int ns = m_Ntask * (ith + 1) / nth - is;
 
  858   for (
int i = is; i < is + ns; ++i) {
 
  859     mult_tp1_chiral_thread(i, vcp1_tp, v1);
 
  865     int Nv = m_Nvc * 2 * m_Nx * m_Ny * m_Nz;
 
  870   for (
int i = is; i < is + ns; ++i) {
 
  871     mult_tpb_chiral_thread(i, v2, v1);
 
  874   for (
int i = is; i < is + ns; ++i) {
 
  875     mult_tp2_chiral_thread(i, v2, vcp2_tp);
 
  884   double *v2 = w.
ptr(0);
 
  885   double *v1 = 
const_cast<Field *
>(&f)->ptr(0);
 
  890   int is = m_Ntask * ith / nth;
 
  891   int ns = m_Ntask * (ith + 1) / nth - is;
 
  895   for (
int i = is; i < is + ns; ++i) {
 
  896     mult_tm1_chiral_thread(i, vcp1_tm, v1);
 
  902     int Nv = m_Nvc * 2 * m_Nx * m_Ny * m_Nz;
 
  907   for (
int i = is; i < is + ns; ++i) {
 
  908     mult_tmb_chiral_thread(i, v2, v1);
 
  911   for (
int i = is; i < is + ns; ++i) {
 
  912     mult_tm2_chiral_thread(i, v2, vcp2_tm);
 
void daypx(Field &, double, const Field &)
 
void mult_zp(Field &, const Field &)
 
static int get_num_threads()
returns available number of threads. 
 
void set_parameters(const double kappa, const std::valarray< int > bc)
 
void gm5_chiral(Field &, const Field &)
 
void proj_chiral(Field &w, const int ex1, const Field &v, const int ex2, const int ipm)
 
double * vcp1_xp
arrays for data transfer. 
 
void mult_tm_dirac(Field &, const Field &)
 
void general(const char *format,...)
 
GammaMatrix get_GM(GMspecies spec)
 
static Bridge::VerboseLevel Vlevel()
 
double * ptr(const int jin, const int site, const int jex)
 
Container of Field-type object. 
 
void(Fopr_Wilson::Fopr_Wilson_impl::* m_D_ex)(Field &, const int, const Field &, const int)
 
void D(Field &v, const Field &f)
 
void(Fopr_Wilson::Fopr_Wilson_impl::* m_mult_dag)(Field &, const Field &)
 
void mult_up(int mu, Field &w, const Field &v)
adding the hopping to nearest neighbor site in mu-th direction. 
 
void mult_tp_chiral(Field &, const Field &)
 
static int ipe(const int dir)
logical coordinate of current proc. 
 
void H(Field &w, const Field &f)
 
std::valarray< double > m_boundary2
b.c. for each node. 
 
void D_chiral(Field &, const Field &)
 
static int get_thread_id()
returns thread id. 
 
void mult_xm(Field &, const Field &)
 
void DdagD(Field &w, const Field &f)
 
const Field_G * m_U
gauge configuration. 
 
Field m_w2
temporary fields. 
 
std::string get_mode() const 
 
void(Fopr_Wilson::Fopr_Wilson_impl::* m_mult)(Field &, const Field &)
 
void DDdag(Field &w, const Field &f)
 
Bridge::VerboseLevel m_vl
 
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=COMPLEX)
 
Bridge::VerboseLevel m_vl
 
std::valarray< GammaMatrix > m_GM
gamma matrices. 
 
static void sync_barrier_all()
barrier among all the threads and nodes. 
 
void mult_ym(Field &, const Field &)
 
void(Fopr_Wilson::Fopr_Wilson_impl::* m_D)(Field &, const Field &)
 
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...
 
Set of Gamma Matrices: basis class. 
 
static const std::string class_name
 
void(Fopr_Wilson::Fopr_Wilson_impl::* m_gm5)(Field &, const Field &)
 
void D_ex_chiral(Field &, const int ex1, const Field &, const int ex2)
 
void D_ex_dirac(Field &, const int ex1, const Field &, const int ex2)
 
static const std::string class_name
 
const Field_F mult_gm5p(int mu, const Field_F &w)
 
void crucial(const char *format,...)
 
void set_mode(std::string mode)
 
void(Fopr_Wilson::Fopr_Wilson_impl::* m_mult_tm)(Field &, const Field &)
 
void mult_tp_dirac(Field &, const Field &)
 
std::valarray< int > m_boundary
boundary condition. 
 
void mult_up(int mu, Field &, const Field &)
 
void D_dirac(Field &, const Field &)
 
void mult_zm(Field &, const Field &)
 
void mult_undef(Field &, const Field &f)
 
void mult_yp(Field &, const Field &)
 
void setpart_ex(int ex, const Field &w, int exw)
 
void mult_xp(Field &, const Field &)
 
void mult_dn(int mu, Field &, const Field &)
 
void Ddag(Field &w, const Field &f)
 
void init(std::string repr)
 
void(Fopr_Wilson::Fopr_Wilson_impl::* m_mult_tp)(Field &, const Field &)
 
const Field mult_gm5(const Field &f)
 
void mult_tm_chiral(Field &, const Field &)
 
void gm5_dirac(Field &, const Field &)