17 #if defined USE_GROUP_SU3 
   18 #include "fopr_Wilson_impl_SU3.inc" 
   19 #elif defined USE_GROUP_SU2 
   20 #include "fopr_Wilson_impl_SU2.inc" 
   21 #elif defined USE_GROUP_SU_N 
   22 #include "fopr_Wilson_impl_SU_N.inc" 
   74     } 
else if (
m_repr == 
"Chiral") {
 
  125     } 
else if (
m_mode == 
"Ddag") {
 
  128     } 
else if (
m_mode == 
"DdagD") {
 
  131     } 
else if (
m_mode == 
"DDdag") {
 
  134     } 
else if (
m_mode == 
"H") {
 
  179     const string str_vlevel = params.
get_string(
"verbose_level");
 
  184     double           kappa_s, kappa_t;
 
  189     err += params.
fetch_double(
"hopping_parameter_spatial", kappa_s);
 
  190     err += params.
fetch_double(
"hopping_parameter_temporal", kappa_t);
 
  191     err += params.
fetch_double(
"dispersion_parameter_spatial", nu_s);
 
  192     err += params.
fetch_double(
"Wilson_parameter_spatial", r_s);
 
  206                                           const double kappa_t,
 
  209                                           const std::vector<int> bc)
 
  211     assert(bc.size() == 
m_Ndim);
 
  219     for (
int mu = 0; mu < 
m_Ndim; ++mu) {
 
  229     for (
int mu = 0; mu < 
m_Ndim; ++mu) {
 
  234     for (
int idir = 0; idir < 
m_Ndim; ++idir) {
 
  249     double flop_site, flop;
 
  252       flop_site = 
static_cast<double>(
 
  254     } 
else if (
m_repr == 
"Chiral") {
 
  255       flop_site = 
static_cast<double>(
 
  263     flop = flop_site * 
static_cast<double>(Lvol);
 
  265     if ((
m_mode == 
"DdagD") || (
m_mode == 
"DDdag")) flop *= 2.0;
 
  280     for (
int mu = 0; mu < (
m_Ndim - 1); ++mu) {
 
  308     for (
int mu = 0; mu < (
m_Ndim - 1); ++mu) {
 
  333     } 
else if (mu == 1) {
 
  335     } 
else if (mu == 2) {
 
  337     } 
else if (mu == 3) {
 
  351     } 
else if (mu == 1) {
 
  353     } 
else if (mu == 2) {
 
  355     } 
else if (mu == 3) {
 
  366                                       const Field& f, 
const int ex2)
 
  369     const double *v1    = f.
ptr(Ninvol * ex2);
 
  370     double       *v2    = w.
ptr(Ninvol * ex1);
 
  375     int is = 
m_Ntask * i_thread / Nthread;
 
  376     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
  378     for (
int i = is; i < is + ns; ++i) {
 
  415     for (
int i = is; i < is + ns; ++i) {
 
  427     for (
int i = is; i < is + ns; ++i) {
 
  450                                        const Field& f, 
const int ex2)
 
  453     const double *v1    = f.
ptr(Ninvol * ex2);
 
  454     double       *v2    = w.
ptr(Ninvol * ex1);
 
  459     int is = 
m_Ntask * i_thread / Nthread;
 
  460     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
  462     for (
int i = is; i < is + ns; ++i) {
 
  499     for (
int i = is; i < is + ns; ++i) {
 
  511     for (
int i = is; i < is + ns; ++i) {
 
  556                                        const Field& v, 
const int ex2,
 
  563     } 
else if (ipm == -1) {
 
  581                                  double fac, 
const Field& f)
 
  583     const double *v1 = f.
ptr(0);
 
  584     double       *v2 = w.
ptr(0);
 
  589     int is = 
m_Ntask * i_thread / Nthread;
 
  590     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
  592     for (
int i = is; i < is + ns; ++i) {
 
  601                                  double fac, 
const Field& f)
 
  603     const double *v1 = f.
ptr(0);
 
  604     double       *v2 = w.
ptr(0);
 
  609     int is = 
m_Ntask * i_thread / Nthread;
 
  610     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
  612     for (
int i = is; i < is + ns; ++i) {
 
  623     double *v2 = w.
ptr(0);
 
  628     int is = 
m_Ntask * i_thread / Nthread;
 
  629     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
  631     for (
int i = is; i < is + ns; ++i) {
 
  641     double *v2 = w.
ptr(0);
 
  646     int is = 
m_Ntask * i_thread / Nthread;
 
  647     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
  649     for (
int i = is; i < is + ns; ++i) {
 
  659     const double *v1 = f.
ptr(0);
 
  660     double       *v2 = w.
ptr(0);
 
  665     int is = 
m_Ntask * i_thread / Nthread;
 
  666     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
  668     for (
int i = is; i < is + ns; ++i) {
 
  678     const double *v1 = f.
ptr(0);
 
  679     double       *v2 = w.
ptr(0);
 
  684     int is = 
m_Ntask * i_thread / Nthread;
 
  685     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
  687     for (
int i = is; i < is + ns; ++i) {
 
  697     const double *v1 = f.
ptr(0);
 
  698     double       *v2 = w.
ptr(0);
 
  703     int is = 
m_Ntask * i_thread / Nthread;
 
  704     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
  708     for (
int i = is; i < is + ns; ++i) {
 
  721     for (
int i = is; i < is + ns; ++i) {
 
  725     for (
int i = is; i < is + ns; ++i) {
 
  736     const double *v1 = f.
ptr(0);
 
  737     double       *v2 = w.
ptr(0);
 
  742     int is = 
m_Ntask * i_thread / Nthread;
 
  743     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
  747     for (
int i = is; i < is + ns; ++i) {
 
  760     for (
int i = is; i < is + ns; ++i) {
 
  764     for (
int i = is; i < is + ns; ++i) {
 
  775     const double *v1 = f.
ptr(0);
 
  776     double       *v2 = w.
ptr(0);
 
  781     int is = 
m_Ntask * i_thread / Nthread;
 
  782     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
  786     for (
int i = is; i < is + ns; ++i) {
 
  799     for (
int i = is; i < is + ns; ++i) {
 
  803     for (
int i = is; i < is + ns; ++i) {
 
  814     const double *v1 = f.
ptr(0);
 
  815     double       *v2 = w.
ptr(0);
 
  820     int is = 
m_Ntask * i_thread / Nthread;
 
  821     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
  825     for (
int i = is; i < is + ns; ++i) {
 
  838     for (
int i = is; i < is + ns; ++i) {
 
  842     for (
int i = is; i < is + ns; ++i) {
 
  853     const double *v1 = f.
ptr(0);
 
  854     double       *v2 = w.
ptr(0);
 
  859     int is = 
m_Ntask * i_thread / Nthread;
 
  860     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
  864     for (
int i = is; i < is + ns; ++i) {
 
  877     for (
int i = is; i < is + ns; ++i) {
 
  881     for (
int i = is; i < is + ns; ++i) {
 
  892     const double *v1 = f.
ptr(0);
 
  893     double       *v2 = w.
ptr(0);
 
  898     int is = 
m_Ntask * i_thread / Nthread;
 
  899     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
  903     for (
int i = is; i < is + ns; ++i) {
 
  916     for (
int i = is; i < is + ns; ++i) {
 
  920     for (
int i = is; i < is + ns; ++i) {
 
  931     const double *v1 = f.
ptr(0);
 
  932     double       *v2 = w.
ptr(0);
 
  937     int is = 
m_Ntask * i_thread / Nthread;
 
  938     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
  942     for (
int i = is; i < is + ns; ++i) {
 
  956     for (
int i = is; i < is + ns; ++i) {
 
  960     for (
int i = is; i < is + ns; ++i) {
 
  971     const double *v1 = f.
ptr(0);
 
  972     double       *v2 = w.
ptr(0);
 
  977     int is = 
m_Ntask * i_thread / Nthread;
 
  978     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
  982     for (
int i = is; i < is + ns; ++i) {
 
  996     for (
int i = is; i < is + ns; ++i) {
 
 1000     for (
int i = is; i < is + ns; ++i) {
 
 1011     const double *v1 = f.
ptr(0);
 
 1012     double       *v2 = w.
ptr(0);
 
 1017     int is = 
m_Ntask * i_thread / Nthread;
 
 1018     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
 1022     for (
int i = is; i < is + ns; ++i) {
 
 1036     for (
int i = is; i < is + ns; ++i) {
 
 1040     for (
int i = is; i < is + ns; ++i) {
 
 1051     const double *v1 = f.
ptr(0);
 
 1052     double       *v2 = w.
ptr(0);
 
 1057     int is = 
m_Ntask * i_thread / Nthread;
 
 1058     int ns = 
m_Ntask * (i_thread + 1) / Nthread - is;
 
 1062     for (
int i = is; i < is + ns; ++i) {
 
 1076     for (
int i = is; i < is + ns; ++i) {
 
 1080     for (
int i = is; i < is + ns; ++i) {
 
const Field_F mult_gm5p(int mu, const Field_F &w)
 
void mult_t_plus1_chiral_thread(int, double *, const double *)
 
void(Fopr_WilsonGeneral::* m_mult_t_plus)(Field &, const Field &)
 
static int get_num_threads()
returns available number of threads. 
 
void DDdag(Field &w, const Field &f)
 
const double * ptr(const int jin, const int site, const int jex) const 
 
void mult_y_plus2_thread(int, double *, const double *)
 
double * vcp1_x_plus
arrays for data transfer. 
 
void D_dirac(Field &, const Field &)
 
void mult_t_plus2_dirac_thread(int, double *, const double *)
 
void general(const char *format,...)
 
GammaMatrix get_GM(GMspecies spec)
 
void D_ex_chiral(Field &, const int ex1, const Field &, const int ex2)
 
Bridge::VerboseLevel m_vl
 
void mult_x_minus_bulk_thread(int, double *, const double *)
 
void mult_x_plus2_thread(int, double *, const double *)
 
void(Fopr_WilsonGeneral::* m_mult)(Field &, const Field &)
 
static Bridge::VerboseLevel Vlevel()
 
Container of Field-type object. 
 
void H(Field &w, const Field &f)
 
int fetch_double(const string &key, double &value) const 
 
void mult_t_plus_dirac(Field &, const Field &)
 
void mult_t_plus_bulk_dirac_thread(int, double *, const double *)
 
void mult_t_minus2_chiral_thread(int, double *, const double *)
 
std::string get_mode() const 
only for Fopr_Overlap 
 
void gm5_dirac_thread(int, double *, const double *)
 
void mult_x_plus(Field &, const Field &)
 
void daxpy_thread(int, double *, double, const double *)
 
void gm5_chiral_thread(int, double *, const double *)
 
static int ipe(const int dir)
logical coordinate of current proc. 
 
double flop_count()
returns the flops per site. 
 
void daxpy(Field &, double, const Field &)
 
void init(std::string repr)
 
void addpart_ex(int ex, const Field &w, int exw)
 
void mult_x_minus1_thread(int, double *, const double *)
 
void mult_y_plus_bulk_thread(int, double *, const double *)
 
void mult_x_minus2_thread(int, double *, const double *)
 
static int get_thread_id()
returns thread id. 
 
std::vector< GammaMatrix > m_GM
gamma matrices. 
 
void mult_t_minus_dirac(Field &, const Field &)
 
void mult_z_plus_bulk_thread(int, double *, const double *)
 
void DdagD(Field &w, const Field &f)
 
void mult_y_minus(Field &, const Field &)
 
void mult_y_minus_bulk_thread(int, double *, const double *)
 
void mult_z_minus1_thread(int, double *, const double *)
 
void mult_t_minus1_dirac_thread(int, double *, const double *)
 
void mult_undef(Field &, const Field &f)
 
void mult_t_minus_bulk_chiral_thread(int, double *, const double *)
 
void mult_gm5(Field &v, const Field &f)
gamma_5 multiplication. [31 Mar 2017 H.Matsufuru] 
 
void mult_x_plus1_thread(int, double *, const double *)
 
const Field_G * m_U
gauge configuration. 
 
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=COMPLEX)
 
Field m_w2
temporary fields. 
 
static void sync_barrier_all()
barrier among all the threads and nodes. 
 
void daypx_thread(int, double *, double, const double *)
 
std::vector< double > m_boundary2
b.c. for each node. 
 
void mult_t_plus2_chiral_thread(int, double *, const double *)
 
void mult_x_minus(Field &, const Field &)
 
void mult_dn(int mu, Field &, const Field &)
 
void mult_t_plus_chiral(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...
 
void mult_t_minus_chiral(Field &, const Field &)
 
void mult_x_plus_bulk_thread(int, double *, const double *)
 
void clear_thread(int, double *)
 
void mult_t_minus2_dirac_thread(int, double *, const double *)
 
void(Fopr_WilsonGeneral::* m_mult_dag)(Field &, const Field &)
 
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
 
void mult_y_plus(Field &, const Field &)
 
void mult_y_minus1_thread(int, double *, const double *)
 
void crucial(const char *format,...)
 
void mult_y_minus2_thread(int, double *, const double *)
 
void mult_z_plus2_thread(int, double *, const double *)
 
void(Fopr_WilsonGeneral::* m_mult_t_minus)(Field &, const Field &)
 
void(Fopr_WilsonGeneral::* m_D_ex)(Field &, const int, const Field &, const int)
 
void scal(Field &, double)
 
void scal_thread(int, double *, double)
 
static const std::string class_name
 
void mult_t_plus_bulk_chiral_thread(int, double *, const double *)
 
void gm5_chiral(Field &, const Field &)
 
void set_parameters(const Parameters ¶ms)
 
void mult_z_minus_bulk_thread(int, double *, const double *)
 
void mult_z_plus1_thread(int, double *, const double *)
 
void proj_chiral(Field &w, const int ex1, const Field &v, const int ex2, const int ipm)
 
void Ddag(Field &w, const Field &f)
 
void mult_up(int mu, Field &, const Field &)
nearest neighbor hopping term: temporary entry [H.Matsufuru] 
 
void(Fopr_WilsonGeneral::* m_gm5)(Field &, const Field &)
 
void D_ex_dirac(Field &, const int ex1, const Field &, const int ex2)
 
void daypx(Field &, double, const Field &)
 
void D(Field &v, const Field &f)
 
void mult_z_minus(Field &, const Field &)
 
void setpart_ex(int ex, const Field &w, int exw)
 
void mult_y_plus1_thread(int, double *, const double *)
 
string get_string(const string &key) const 
 
void mult_t_minus1_chiral_thread(int, double *, const double *)
 
int fetch_int_vector(const string &key, vector< int > &value) const 
 
void mult_t_plus1_dirac_thread(int, double *, const double *)
 
std::vector< int > m_boundary
boundary condition. 
 
void mult_z_plus(Field &, const Field &)
 
void gm5_dirac(Field &, const Field &)
 
void(Fopr_WilsonGeneral::* m_D)(Field &, const Field &)
 
void mult_t_minus_bulk_dirac_thread(int, double *, const double *)
 
static VerboseLevel set_verbose_level(const std::string &str)
 
void mult_z_minus2_thread(int, double *, const double *)
 
void D_chiral(Field &, const Field &)