21 #if defined USE_GROUP_SU3
22 #include "fopr_Wilson_impl_SU3.inc"
23 #elif defined USE_GROUP_SU2
24 #include "fopr_Wilson_impl_SU2.inc"
25 #elif defined USE_GROUP_SU_N
26 #include "fopr_Wilson_impl_SU_N.inc"
78 }
else if (
m_repr ==
"Chiral") {
128 }
else if (
m_mode ==
"Ddag") {
131 }
else if (
m_mode ==
"DdagD") {
134 }
else if (
m_mode ==
"DDdag") {
137 }
else if (
m_mode ==
"H") {
182 const string str_vlevel = params.
get_string(
"verbose_level");
205 const std::vector<int> bc)
207 assert(bc.size() ==
m_Ndim);
211 for (
int mu = 0; mu <
m_Ndim; ++mu) {
217 for (
int mu = 0; mu <
m_Ndim; ++mu) {
222 for (
int idir = 0; idir <
m_Ndim; ++idir) {
237 double flop_site, flop;
240 flop_site =
static_cast<double>(
242 }
else if (
m_repr ==
"Chiral") {
243 flop_site =
static_cast<double>(
250 flop = flop_site *
static_cast<double>(Lvol);
252 if ((
m_mode ==
"DdagD") || (
m_mode ==
"DDdag")) flop *= 2.0;
278 }
else if (mu == 1) {
280 }
else if (mu == 2) {
282 }
else if (mu == 3) {
296 }
else if (mu == 1) {
298 }
else if (mu == 2) {
300 }
else if (mu == 3) {
311 const Field& f,
const int ex2)
314 const double *v1 = f.
ptr(Ninvol * ex2);
315 double *v2 = w.
ptr(Ninvol * ex1);
320 int is =
m_Ntask * i_thread / Nthread;
321 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
323 for (
int i = is; i < is + ns; ++i) {
355 for (
int i = is; i < is + ns; ++i) {
367 for (
int i = is; i < is + ns; ++i) {
385 const Field& f,
const int ex2)
388 const double *v1 = f.
ptr(Ninvol * ex2);
389 double *v2 = w.
ptr(Ninvol * ex1);
394 int is =
m_Ntask * i_thread / Nthread;
395 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
397 for (
int i = is; i < is + ns; ++i) {
429 for (
int i = is; i < is + ns; ++i) {
441 for (
int i = is; i < is + ns; ++i) {
483 const Field& v,
const int ex2,
const int ipm)
489 }
else if (ipm == -1) {
507 double fac,
const Field& f)
509 const double *v1 = f.
ptr(0);
510 double *v2 = w.
ptr(0);
515 int is =
m_Ntask * i_thread / Nthread;
516 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
518 for (
int i = is; i < is + ns; ++i) {
528 double *v2 = w.
ptr(0);
533 int is =
m_Ntask * i_thread / Nthread;
534 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
536 for (
int i = is; i < is + ns; ++i) {
546 const double *v1 = f.
ptr(0);
547 double *v2 = w.
ptr(0);
552 int is =
m_Ntask * i_thread / Nthread;
553 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
555 for (
int i = is; i < is + ns; ++i) {
565 const double *v1 = f.
ptr(0);
566 double *v2 = w.
ptr(0);
571 int is =
m_Ntask * i_thread / Nthread;
572 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
574 for (
int i = is; i < is + ns; ++i) {
584 const double *v1 = f.
ptr(0);
585 double *v2 = w.
ptr(0);
590 int is =
m_Ntask * i_thread / Nthread;
591 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
595 for (
int i = is; i < is + ns; ++i) {
607 for (
int i = is; i < is + ns; ++i) {
611 for (
int i = is; i < is + ns; ++i) {
622 double *v2 = w.
ptr(0);
623 const double *v1 = f.
ptr(0);
628 int is =
m_Ntask * i_thread / Nthread;
629 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
633 for (
int i = is; i < is + ns; ++i) {
645 for (
int i = is; i < is + ns; ++i) {
649 for (
int i = is; i < is + ns; ++i) {
660 const double *v1 = f.
ptr(0);
661 double *v2 = w.
ptr(0);
666 int is =
m_Ntask * i_thread / Nthread;
667 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
671 for (
int i = is; i < is + ns; ++i) {
683 for (
int i = is; i < is + ns; ++i) {
687 for (
int i = is; i < is + ns; ++i) {
698 double *v2 = w.
ptr(0);
699 const double *v1 = f.
ptr(0);
704 int is =
m_Ntask * i_thread / Nthread;
705 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
709 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) {
759 for (
int i = is; i < is + ns; ++i) {
763 for (
int i = is; i < is + ns; ++i) {
774 double *v2 = w.
ptr(0);
775 const double *v1 = f.
ptr(0);
780 int is =
m_Ntask * i_thread / Nthread;
781 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
785 for (
int i = is; i < is + ns; ++i) {
797 for (
int i = is; i < is + ns; ++i) {
801 for (
int i = is; i < is + ns; ++i) {
812 const double *v1 = f.
ptr(0);
813 double *v2 = w.
ptr(0);
818 int is =
m_Ntask * i_thread / Nthread;
819 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
823 for (
int i = is; i < is + ns; ++i) {
835 for (
int i = is; i < is + ns; ++i) {
839 for (
int i = is; i < is + ns; ++i) {
850 double *v2 = w.
ptr(0);
851 const double *v1 = f.
ptr(0);
856 int is =
m_Ntask * i_thread / Nthread;
857 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
861 for (
int i = is; i < is + ns; ++i) {
873 for (
int i = is; i < is + ns; ++i) {
877 for (
int i = is; i < is + ns; ++i) {
888 const double *v1 = f.
ptr(0);
889 double *v2 = w.
ptr(0);
894 int is =
m_Ntask * i_thread / Nthread;
895 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
899 for (
int i = is; i < is + ns; ++i) {
911 for (
int i = is; i < is + ns; ++i) {
915 for (
int i = is; i < is + ns; ++i) {
926 double *v2 = w.
ptr(0);
927 const double *v1 = f.
ptr(0);
932 int is =
m_Ntask * i_thread / Nthread;
933 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
937 for (
int i = is; i < is + ns; ++i) {
949 for (
int i = is; i < is + ns; ++i) {
953 for (
int i = is; i < is + ns; ++i) {
void mult_tp_dirac(Field &, const Field &)
void mult_zm1_thread(int, double *, const double *)
void mult_zpb_thread(int, double *, const double *)
void Ddag(Field &w, const Field &f)
void mult_ymb_thread(int, double *, const double *)
double flop_count()
returns the flops per site.
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.
void mult_tp2_chiral_thread(int, double *, const double *)
const double * ptr(const int jin, const int site, const int jex) const
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_ym2_thread(int, double *, const double *)
void mult_zmb_thread(int, double *, const double *)
void D_dirac(Field &, const Field &)
void mult_xpb_thread(int, double *, const double *)
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()
Container of Field-type object.
int fetch_double(const string &key, double &value) const
void gm5_chiral(Field &, const Field &)
void mult_tm1_chiral_thread(int, double *, const double *)
void mult_tm_chiral(Field &, const Field &)
void D(Field &v, const Field &f)
const Field_F mult_gm5p(int mu, const Field_F &w)
double * vcp1_xp
arrays for data transfer.
Bridge::VerboseLevel m_vl
void gm5_chiral_thread(int, double *, const double *)
void mult_ypb_thread(int, double *, const 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_tm1_dirac_thread(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_tp1_chiral_thread(int, double *, const double *)
void addpart_ex(int ex, const Field &w, int exw)
void gm5_dirac_thread(int, double *, const double *)
void mult_tmb_chiral_thread(int, double *, const double *)
static int get_thread_id()
returns thread id.
void mult_zp1_thread(int, double *, const double *)
void daypx(Field &, double, const Field &)
void mult_up(int mu, Field &, const Field &)
nearest neighbor hopping term: temporary entry [H.Matsufuru]
void mult_ym1_thread(int, double *, const double *)
void mult_tp_chiral(Field &, const Field &)
void daypx_thread(int, double *, double, const double *)
std::vector< int > m_boundary
boundary condition.
void D_chiral(Field &, const Field &)
void mult_xp1_thread(int, double *, const double *)
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=COMPLEX)
void mult_tpb_chiral_thread(int, double *, const double *)
static void sync_barrier_all()
barrier among all the threads and nodes.
void mult_tm2_dirac_thread(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 init(std::string repr)
void D_ex_chiral(Field &, const int ex1, const Field &, const int ex2)
void mult_tm_dirac(Field &, const Field &)
void crucial(const char *format,...)
void mult_zp2_thread(int, double *, const double *)
std::vector< double > m_boundary2
b.c. for each node.
void mult_undef(Field &, const Field &f)
void mult_tm2_chiral_thread(int, double *, const double *)
void mult_tp2_dirac_thread(int, double *, const double *)
void mult_ym(Field &, const Field &)
void mult_xm2_thread(int, double *, const double *)
void clear_thread(int, 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 mult_yp2_thread(int, double *, const double *)
void mult_xm1_thread(int, double *, const double *)
void(Fopr_Wilson::* m_mult_tm)(Field &, const Field &)
std::string get_mode() const
only for Fopr_Overlap
void mult_tpb_dirac_thread(int, double *, const double *)
void mult_xp(Field &, const Field &)
void setpart_ex(int ex, const Field &w, int exw)
void mult_xmb_thread(int, double *, const double *)
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_zm2_thread(int, double *, const double *)
void mult_dn(int mu, Field &, const Field &)
Field m_w2
temporary fields.
void mult_tp1_dirac_thread(int, double *, const double *)
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
static VerboseLevel set_verbose_level(const std::string &str)
void mult_yp1_thread(int, double *, const double *)
void mult_tmb_dirac_thread(int, double *, const double *)
void mult_gm5(Field &v, const Field &f)
gamma_5 multiplication. [31 Mar 2017 H.Matsufuru]
static const std::string class_name
void mult_xp2_thread(int, double *, const double *)