24 #if defined USE_GROUP_SU3
25 #include "fopr_Wilson_impl_SU3.inc"
26 #elif defined USE_GROUP_SU2
27 #include "fopr_Wilson_impl_SU2.inc"
28 #elif defined USE_GROUP_SU_N
29 #include "fopr_Wilson_impl_SU_N.inc"
80 }
else if (
m_repr ==
"Chiral") {
123 buf_size[0] =
sizeof(double) *
m_Nvc * 2 *
m_Ny * m_Nz * m_Nt;
124 buf_size[1] =
sizeof(double) *
m_Nvc * 2 *
m_Nx * m_Nz * m_Nt;
125 buf_size[2] =
sizeof(double) *
m_Nvc * 2 *
m_Nx *
m_Ny * m_Nt;
126 buf_size[3] =
sizeof(double) *
m_Nvc * 2 *
m_Nx *
m_Ny * m_Nz;
142 for (
int imu = 0; imu <
m_Ndim; ++imu) {
178 }
else if (
m_mode ==
"Ddag") {
181 }
else if (
m_mode ==
"DdagD") {
184 }
else if (
m_mode ==
"DDdag") {
187 }
else if (
m_mode ==
"H") {
232 const string str_vlevel = params.
get_string(
"verbose_level");
255 const std::vector<int> bc)
257 assert(bc.size() ==
m_Ndim);
261 for (
int mu = 0; mu <
m_Ndim; ++mu) {
267 for (
int mu = 0; mu <
m_Ndim; ++mu) {
272 for (
int idir = 0; idir <
m_Ndim; ++idir) {
287 double flop_site, flop;
290 flop_site =
static_cast<double>(
292 }
else if (
m_repr ==
"Chiral") {
293 flop_site =
static_cast<double>(
301 flop = flop_site *
static_cast<double>(Lvol);
302 if ((
m_mode ==
"DdagD") || (
m_mode ==
"DDdag")) flop *= 2.0;
324 const Field& f,
const int ex2)
328 const double *v1 = f.
ptr(Ninvol * ex2);
329 double *v2 = w.
ptr(Ninvol * ex1);
335 int ns =
m_Ntask * (ith + 1) / nth - is;
339 for (
int i = is; i < is + ns; ++i) {
351 for (
int i = is; i < is + ns; ++i) {
363 for (
int i = is; i < is + ns; ++i) {
381 const Field& f,
const int ex2)
385 const double *v1 = f.
ptr(Ninvol * ex2);
386 double *v2 = w.
ptr(Ninvol * ex1);
392 int ns =
m_Ntask * (ith + 1) / nth - is;
396 for (
int i = is; i < is + ns; ++i) {
408 for (
int i = is; i < is + ns; ++i) {
420 for (
int i = is; i < is + ns; ++i) {
455 }
else if (mu == 1) {
457 }
else if (mu == 2) {
459 }
else if (mu == 3) {
473 }
else if (mu == 1) {
475 }
else if (mu == 2) {
477 }
else if (mu == 3) {
488 Field& w,
const int ex1,
489 const Field& v,
const int ex2,
const int ipm)
495 }
else if (ipm == -1) {
521 double fac,
const Field& f)
523 const double *v1 = f.
ptr(0);
524 double *v2 = w.
ptr(0);
530 int ns =
m_Ntask * (ith + 1) / nth - is;
532 for (
int i = is; i < is + ns; ++i) {
555 double *v2 = w.
ptr(0);
561 int ns =
m_Ntask * (ith + 1) / nth - is;
563 for (
int i = is; i < is + ns; ++i) {
572 const double *v1 = f.
ptr(0);
573 double *v2 = w.
ptr(0);
579 int ns =
m_Ntask * (ith + 1) / nth - is;
581 for (
int i = is; i < is + ns; ++i) {
591 const double *v1 = f.
ptr(0);
592 double *v2 = w.
ptr(0);
598 int ns =
m_Ntask * (ith + 1) / nth - is;
600 for (
int i = is; i < is + ns; ++i) {
610 const double *v1 = f.
ptr(0);
611 double *v2 = w.
ptr(0);
617 int ns =
m_Ntask * (ith + 1) / nth - is;
621 for (
int i = is; i < is + ns; ++i) {
626 for (
int i = is; i < is + ns; ++i) {
630 for (
int i = is; i < is + ns; ++i) {
641 const double *v1 = f.
ptr(0);
642 double *v2 = w.
ptr(0);
648 int ns =
m_Ntask * (ith + 1) / nth - is;
652 for (
int i = is; i < is + ns; ++i) {
657 for (
int i = is; i < is + ns; ++i) {
661 for (
int i = is; i < is + ns; ++i) {
672 const double *v1 = f.
ptr(0);
673 double *v2 = w.
ptr(0);
679 int ns =
m_Ntask * (ith + 1) / nth - is;
683 for (
int i = is; i < is + ns; ++i) {
688 for (
int i = is; i < is + ns; ++i) {
692 for (
int i = is; i < is + ns; ++i) {
703 const double *v1 = f.
ptr(0);
704 double *v2 = w.
ptr(0);
710 int ns =
m_Ntask * (ith + 1) / nth - is;
714 for (
int i = is; i < is + ns; ++i) {
719 for (
int i = is; i < is + ns; ++i) {
723 for (
int i = is; i < is + ns; ++i) {
734 const double *v1 = f.
ptr(0);
735 double *v2 = w.
ptr(0);
741 int ns =
m_Ntask * (ith + 1) / nth - is;
745 for (
int i = is; i < is + ns; ++i) {
750 for (
int i = is; i < is + ns; ++i) {
754 for (
int i = is; i < is + ns; ++i) {
765 const double *v1 = f.
ptr(0);
766 double *v2 = w.
ptr(0);
772 int ns =
m_Ntask * (ith + 1) / nth - is;
776 for (
int i = is; i < is + ns; ++i) {
781 for (
int i = is; i < is + ns; ++i) {
785 for (
int i = is; i < is + ns; ++i) {
796 const double *v1 = f.
ptr(0);
797 double *v2 = w.
ptr(0);
803 int ns =
m_Ntask * (ith + 1) / nth - is;
807 for (
int i = is; i < is + ns; ++i) {
812 for (
int i = is; i < is + ns; ++i) {
816 for (
int i = is; i < is + ns; ++i) {
827 const double *v1 = f.
ptr(0);
828 double *v2 = w.
ptr(0);
834 int ns =
m_Ntask * (ith + 1) / nth - is;
838 for (
int i = is; i < is + ns; ++i) {
843 for (
int i = is; i < is + ns; ++i) {
847 for (
int i = is; i < is + ns; ++i) {
858 const double *v1 = f.
ptr(0);
859 double *v2 = w.
ptr(0);
865 int ns =
m_Ntask * (ith + 1) / nth - is;
869 for (
int i = is; i < is + ns; ++i) {
874 for (
int i = is; i < is + ns; ++i) {
878 for (
int i = is; i < is + ns; ++i) {
889 const double *v1 = f.
ptr(0);
890 double *v2 = w.
ptr(0);
896 int ns =
m_Ntask * (ith + 1) / nth - is;
900 for (
int i = is; i < is + ns; ++i) {
905 for (
int i = is; i < is + ns; ++i) {
909 for (
int i = is; i < is + ns; ++i) {
void scal(Field &x, const double a)
scal(x, a): x = a * x
void clear_thread(int, double *)
void mult_undef(Field &, const Field &f)
void D_ex_dirac(Field &, const int ex1, const Field &, const int ex2)
void detailed(const char *format,...)
static int get_num_threads()
returns available number of threads.
const double * ptr(const int jin, const int site, const int jex) const
void mult_ym1_thread(int, double *, const double *)
void mult_yp2_thread(int, double *, const double *)
void mult_zm(Field &, const Field &)
void mult_tm_dirac(Field &, const Field &)
void mult_xm1_thread(int, double *, const double *)
std::vector< Channel * > m_bw_recv
void mult_tp_dirac(Field &, const Field &)
void mult_ym(Field &, const Field &)
void mult_zm1_thread(int, double *, const double *)
static const std::string class_name
std::vector< Channel * > m_bw_send
double flop_count()
returns the flops per site.
void general(const char *format,...)
GammaMatrix get_GM(GMspecies spec)
std::vector< int > m_boundary
boundary condition.
void gm5_dirac_thread(int, double *, const double *)
void mult_tp2_chiral_thread(int, double *, const double *)
static Bridge::VerboseLevel Vlevel()
void mult_tp2_dirac_thread(int, double *, const double *)
Container of Field-type object.
void mult_ymb_thread(int, double *, const double *)
int fetch_double(const string &key, double &value) const
void mult_ypb_thread(int, double *, const double *)
void mult_zm2_thread(int, double *, const double *)
const Field_F mult_gm5p(int mu, const Field_F &w)
void mult_tmb_dirac_thread(int, double *, const double *)
void mult_tm_chiral(Field &, const Field &)
static Channel * recv_init(int count, int idir, int ipm)
void(Fopr_Wilson::* m_D)(Field &, const Field &)
void DdagD(Field &w, const Field &f)
void set_parameters(const Parameters ¶ms)
static int ipe(const int dir)
logical coordinate of current proc.
void proj_chiral(Field &w, const int ex1, const Field &v, const int ex2, const int ipm)
void D_chiral(Field &, const Field &)
void mult_tp1_dirac_thread(int, double *, const double *)
void addpart_ex(int ex, const Field &w, int exw)
std::string get_mode() const
only for Fopr_Overlap
static int get_thread_id()
returns thread id.
void gm5_chiral_thread(int, double *, const double *)
void mult_tmb_chiral_thread(int, double *, const double *)
std::vector< double > m_boundary2
b.c. for each node.
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
void(Fopr_Wilson::* m_gm5)(Field &, const Field &)
void D_ex_chiral(Field &, const int ex1, const Field &, const int ex2)
void mult_yp1_thread(int, double *, const double *)
void gm5_chiral(Field &, const Field &)
void mult_up(int mu, Field &, const Field &)
nearest neighbor hopping term: temporary entry [H.Matsufuru]
Bridge::VerboseLevel m_vl
void mult_xp1_thread(int, double *, const double *)
void mult_zp1_thread(int, double *, const double *)
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=COMPLEX)
double m_kappa
hopping parameter.
static void sync_barrier_all()
barrier among all the threads and nodes.
Field m_w2
temporary fields.
std::vector< Channel * > m_fw_recv
void mult_tm1_dirac_thread(int, double *, const double *)
void mult_zp(Field &, const Field &)
void D_dirac(Field &, const Field &)
void fprop_normalize(Field &v)
void paranoiac(const char *format,...)
void daypx(Field &, double, const Field &)
void mult_yp(Field &, const Field &)
const Field_G * m_U
gauge configuration.
void mult_ym2_thread(int, double *, const double *)
void mult_xp(Field &, const Field &)
void DDdag(Field &w, const Field &f)
void crucial(const char *format,...)
void mult_xm(Field &, const Field &)
void mult_tp1_chiral_thread(int, double *, const double *)
void mult_gm5(Field &v, const Field &f)
gamma_5 multiplication. [31 Mar 2017 H.Matsufuru]
void(Fopr_Wilson::* m_mult_tp)(Field &, const Field &)
void mult_xpb_thread(int, double *, const double *)
void fopr_normalize(Field &v)
std::vector< GammaMatrix > m_GM
gamma matrices.
void(Fopr_Wilson::* m_mult)(Field &, const Field &)
void daypx_thread(int, double *, double, const double *)
void mult_tpb_chiral_thread(int, double *, const double *)
void(Fopr_Wilson::* m_mult_dag)(Field &, const Field &)
std::vector< Channel * > m_fw_send
static Channel * send_init(int count, int idir, int ipm)
void mult_xp2_thread(int, double *, const double *)
void mult_zpb_thread(int, double *, const double *)
void mult_zp2_thread(int, double *, const double *)
static int sync()
synchronize within small world.
void mult_dn(int mu, Field &, const Field &)
void(Fopr_Wilson::* m_mult_tm)(Field &, const Field &)
void mult_tm2_dirac_thread(int, double *, const double *)
void(Fopr_Wilson::* m_D_ex)(Field &, const int, const Field &, const int)
void mult_xmb_thread(int, double *, const double *)
void mult_tp_chiral(Field &, const Field &)
void mult_tm2_chiral_thread(int, double *, const double *)
void mult_tm1_chiral_thread(int, double *, const double *)
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
double * vcp1_xp
arrays for data transfer.
void init(std::string repr)
void mult_tpb_dirac_thread(int, double *, const double *)
void Ddag(Field &w, const Field &f)
void mult_xm2_thread(int, double *, const double *)
void H(Field &w, const Field &f)
static VerboseLevel set_verbose_level(const std::string &str)
void D(Field &v, const Field &f)
void gm5_dirac(Field &, const Field &)
void mult_zmb_thread(int, double *, const double *)