19 #if defined USE_GROUP_SU3
21 #elif defined USE_GROUP_SU2
23 #elif defined USE_GROUP_SU_N
27 #ifdef USE_FACTORY_AUTOREGISTER
29 bool init = Fopr_Wilson::register_factory();
82 }
else if (
m_repr ==
"Chiral") {
132 }
else if (
m_mode ==
"Ddag") {
135 }
else if (
m_mode ==
"DdagD") {
138 }
else if (
m_mode ==
"DDdag") {
141 }
else if (
m_mode ==
"H") {
186 const string str_vlevel = params.
get_string(
"verbose_level");
209 const std::vector<int> bc)
214 for (
int mu = 0; mu <
m_Ndim; ++mu) {
220 assert(bc.size() ==
m_Ndim);
226 for (
int idir = 0; idir <
m_Ndim; ++idir) {
253 }
else if (mu == 1) {
255 }
else if (mu == 2) {
257 }
else if (mu == 3) {
271 }
else if (mu == 1) {
273 }
else if (mu == 2) {
275 }
else if (mu == 3) {
286 const Field& f,
const int ex2)
289 const double *v1 = f.
ptr(Ninvol * ex2);
290 double *v2 = w.
ptr(Ninvol * ex1);
295 const int is =
m_Ntask * i_thread / Nthread;
296 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
298 for (
int i = is; i < is + ns; ++i) {
333 for (
int i = is; i < is + ns; ++i) {
348 for (
int i = is; i < is + ns; ++i) {
370 const Field& f,
const int ex2)
373 const double *v1 = f.
ptr(Ninvol * ex2);
374 double *v2 = w.
ptr(Ninvol * ex1);
379 const int is =
m_Ntask * i_thread / Nthread;
380 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
382 for (
int i = is; i < is + ns; ++i) {
417 for (
int i = is; i < is + ns; ++i) {
433 for (
int i = is; i < is + ns; ++i) {
479 const Field& v,
const int ex2,
const int ipm)
485 }
else if (ipm == -1) {
503 const double fac,
const Field& f)
505 double *v2 = w.
ptr(0);
506 const double *v1 = f.
ptr(0);
511 const int is =
m_Ntask * i_thread / Nthread;
512 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
514 for (
int i = is; i < is + ns; ++i) {
524 double *v2 = w.
ptr(0);
529 const int is =
m_Ntask * i_thread / Nthread;
530 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
532 for (
int i = is; i < is + ns; ++i) {
542 double *v2 = w.
ptr(0);
543 const double *v1 = f.
ptr(0);
548 const int is =
m_Ntask * i_thread / Nthread;
549 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
551 for (
int i = is; i < is + ns; ++i) {
561 double *v2 = w.
ptr(0);
562 const double *v1 = f.
ptr(0);
567 const int is =
m_Ntask * i_thread / Nthread;
568 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
570 for (
int i = is; i < is + ns; ++i) {
580 double *v2 = w.
ptr(0);
581 const double *v1 = f.
ptr(0);
586 const int is =
m_Ntask * i_thread / Nthread;
587 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
591 for (
int i = is; i < is + ns; ++i) {
603 for (
int i = is; i < is + ns; ++i) {
607 for (
int i = is; i < is + ns; ++i) {
618 double *v2 = w.
ptr(0);
619 const double *v1 = f.
ptr(0);
624 const int is =
m_Ntask * i_thread / Nthread;
625 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
629 for (
int i = is; i < is + ns; ++i) {
641 for (
int i = is; i < is + ns; ++i) {
645 for (
int i = is; i < is + ns; ++i) {
656 double *v2 = w.
ptr(0);
657 const double *v1 = f.
ptr(0);
662 const int is =
m_Ntask * i_thread / Nthread;
663 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
667 for (
int i = is; i < is + ns; ++i) {
679 for (
int i = is; i < is + ns; ++i) {
683 for (
int i = is; i < is + ns; ++i) {
694 double *v2 = w.
ptr(0);
695 const double *v1 = f.
ptr(0);
700 const int is =
m_Ntask * i_thread / Nthread;
701 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
705 for (
int i = is; i < is + ns; ++i) {
717 for (
int i = is; i < is + ns; ++i) {
721 for (
int i = is; i < is + ns; ++i) {
732 double *v2 = w.
ptr(0);
733 const double *v1 = f.
ptr(0);
738 const int is =
m_Ntask * i_thread / Nthread;
739 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
743 for (
int i = is; i < is + ns; ++i) {
755 for (
int i = is; i < is + ns; ++i) {
759 for (
int i = is; i < is + ns; ++i) {
770 double *v2 = w.
ptr(0);
771 const double *v1 = f.
ptr(0);
776 const int is =
m_Ntask * i_thread / Nthread;
777 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
781 for (
int i = is; i < is + ns; ++i) {
793 for (
int i = is; i < is + ns; ++i) {
797 for (
int i = is; i < is + ns; ++i) {
808 double *v2 = w.
ptr(0);
809 const double *v1 = f.
ptr(0);
814 const int is =
m_Ntask * i_thread / Nthread;
815 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
819 for (
int i = is; i < is + ns; ++i) {
831 for (
int i = is; i < is + ns; ++i) {
835 for (
int i = is; i < is + ns; ++i) {
846 double *v2 = w.
ptr(0);
847 const double *v1 = f.
ptr(0);
852 const int is =
m_Ntask * i_thread / Nthread;
853 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
857 for (
int i = is; i < is + ns; ++i) {
869 for (
int i = is; i < is + ns; ++i) {
873 for (
int i = is; i < is + ns; ++i) {
884 double *v2 = w.
ptr(0);
885 const double *v1 = f.
ptr(0);
890 const int is =
m_Ntask * i_thread / Nthread;
891 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
895 for (
int i = is; i < is + ns; ++i) {
907 for (
int i = is; i < is + ns; ++i) {
911 for (
int i = is; i < is + ns; ++i) {
922 double *v2 = w.
ptr(0);
923 const double *v1 = f.
ptr(0);
928 const int is =
m_Ntask * i_thread / Nthread;
929 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
933 for (
int i = is; i < is + ns; ++i) {
945 for (
int i = is; i < is + ns; ++i) {
949 for (
int i = is; i < is + ns; ++i) {
972 }
else if (
m_repr ==
"Chiral") {
979 double gflop = flop_site * (Nvol * (NPE / 1.0e+9));
981 if ((
m_mode ==
"DdagD") || (
m_mode ==
"DDdag")) gflop *= 2;
void mult_tp_dirac(Field &, const Field &)
void mult_ypb_thread(const int, double *, const double *)
void Ddag(Field &w, const Field &f)
double flop_count()
returns the flop in giga unit
void mult_yp2_thread(const int, double *, const double *)
void mult_zp(Field &, const Field &)
void DDdag(Field &w, const Field &f)
void(Fopr_Wilson::* m_mult_dag)(Field &, const Field &)
static int get_num_threads()
returns available number of threads.
const double * ptr(const int jin, const int site, const int jex) const
void init(const std::string repr)
void mult_xmb_thread(const int, double *, const double *)
void(Fopr_Wilson::* m_mult)(Field &, const Field &)
void proj_chiral(Field &w, const int ex1, const Field &v, const int ex2, const int ipm)
void(Fopr_Wilson::* m_gm5)(Field &, const Field &)
void mult_tmb_chiral_thread(const int, double *, const double *)
void D_dirac(Field &, const Field &)
void(Fopr_Wilson::* m_mult_tp)(Field &, const Field &)
void general(const char *format,...)
GammaMatrix get_GM(GMspecies spec)
void mult_yp(Field &, const Field &)
static Bridge::VerboseLevel Vlevel()
void mult_yp1_thread(const int, double *, const double *)
void mult_xpb_thread(const int, double *, const double *)
Container of Field-type object.
int fetch_double(const string &key, double &value) const
void gm5_chiral(Field &, const Field &)
std::vector< double > m_boundary_each_node
b.c. for each node.
void mult_tm_chiral(Field &, const Field &)
void D(Field &v, const Field &f)
void mult_tp1_chiral_thread(const int, double *, const double *)
double * vcp1_xp
arrays for data transfer.
Bridge::VerboseLevel m_vl
void clear_thread(const int, double *)
void gm5_dirac(Field &, const Field &)
void(Fopr_Wilson::* m_D_ex)(Field &, const int, const Field &, const int)
const Field_G * m_U
gauge configuration.
void mult_tpb_chiral_thread(const int, double *, const double *)
void(Fopr_Wilson::* m_D)(Field &, const Field &)
static int ipe(const int dir)
logical coordinate of current proc.
void mult_xm(Field &, const Field &)
void set_parameters(const Parameters ¶ms)
void mult_tpb_dirac_thread(const int, double *, const double *)
void mult_zm2_thread(const int, double *, const double *)
void addpart_ex(int ex, const Field &w, int exw)
void mult_tp1_dirac_thread(const int, double *, const double *)
void mult_zp2_thread(const int, double *, const double *)
static int get_thread_id()
returns thread id.
void mult_xm1_thread(const int, double *, const double *)
void gm5_chiral_thread(const int, double *, const double *)
void mult_xp2_thread(const int, double *, const double *)
void mult_zmb_thread(const int, double *, const double *)
void mult_ymb_thread(const int, double *, const double *)
const Field_F mult_gm5p(const int mu, const Field_F &w)
void mult_tp_chiral(Field &, const Field &)
void daypx_thread(const int, double *, const double, const double *)
std::vector< int > m_boundary
boundary condition.
void D_chiral(Field &, const Field &)
void mult_tm2_dirac_thread(const int, double *, const double *)
void mult_tm1_chiral_thread(const int, double *, const double *)
static void sync_barrier_all()
barrier among all the threads and nodes.
void mult_xp1_thread(const int, double *, const double *)
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_tmb_dirac_thread(const int, double *, const double *)
void mult_tm1_dirac_thread(const int, double *, const double *)
void mult_tp2_dirac_thread(const int, double *, const double *)
void gm5_dirac_thread(const int, double *, const double *)
void mult_zm1_thread(const int, double *, const double *)
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=Element_type::COMPLEX)
void D_ex_chiral(Field &, const int ex1, const Field &, const int ex2)
void mult_tm_dirac(Field &, const Field &)
void set_mode(const std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
void crucial(const char *format,...)
void mult_undef(Field &, const Field &f)
void mult_tm2_chiral_thread(const int, double *, const double *)
void mult_ym(Field &, const Field &)
void mult_up(const int mu, Field &, const Field &)
nearest neighbor hopping term: temporary entry [H.Matsufuru]
void mult_dn(const int mu, Field &, const Field &)
void mult_ym2_thread(const int, double *, const double *)
void mult_tp2_chiral_thread(const int, double *, const double *)
void D_ex_dirac(Field &, const int ex1, const Field &, const int ex2)
void DdagD(Field &w, const Field &f)
void H(Field &w, const Field &f)
void(Fopr_Wilson::* m_mult_tm)(Field &, const Field &)
std::string get_mode() const
only for Fopr_Overlap
void mult_xm2_thread(const int, double *, const double *)
void mult_zp1_thread(const int, double *, const double *)
void mult_xp(Field &, const Field &)
void setpart_ex(int ex, const Field &w, int exw)
string get_string(const string &key) const
int fetch_int_vector(const string &key, vector< int > &value) const
std::vector< GammaMatrix > m_GM
gamma matrices.
void mult_zm(Field &, const Field &)
void mult_zpb_thread(const int, double *, const double *)
Field m_w2
temporary fields.
void mult_ym1_thread(const int, double *, const double *)
static VerboseLevel set_verbose_level(const std::string &str)
void daypx(Field &, const double, const Field &)
void mult_gm5(Field &v, const Field &f)
gamma_5 multiplication. [31 Mar 2017 H.Matsufuru]
static const std::string class_name