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"
82 }
else if (
m_repr ==
"Chiral") {
125 buf_size[0] =
sizeof(double) *
m_Nvc * 2 *
m_Ny * m_Nz * m_Nt;
126 buf_size[1] =
sizeof(double) *
m_Nvc * 2 *
m_Nx * m_Nz * m_Nt;
127 buf_size[2] =
sizeof(double) *
m_Nvc * 2 *
m_Nx *
m_Ny * m_Nt;
128 buf_size[3] =
sizeof(double) *
m_Nvc * 2 *
m_Nx *
m_Ny * m_Nz;
144 for (
int imu = 0; imu <
m_Ndim; ++imu) {
180 }
else if (
m_mode ==
"Ddag") {
183 }
else if (
m_mode ==
"DdagD") {
186 }
else if (
m_mode ==
"DDdag") {
189 }
else if (
m_mode ==
"H") {
234 const string str_vlevel = params.
get_string(
"verbose_level");
239 double kappa_s, kappa_t;
244 err += params.
fetch_double(
"hopping_parameter_spatial", kappa_s);
245 err += params.
fetch_double(
"hopping_parameter_temporal", kappa_t);
246 err += params.
fetch_double(
"dispersion_parameter_spatial", nu_s);
247 err += params.
fetch_double(
"Wilson_parameter_spatial", r_s);
261 const double kappa_t,
264 const std::vector<int> bc)
266 assert(bc.size() ==
m_Ndim);
273 for (
int mu = 0; mu <
m_Ndim; ++mu) {
282 for (
int mu = 0; mu <
m_Ndim; ++mu) {
287 for (
int idir = 0; idir <
m_Ndim; ++idir) {
302 double flop_site, flop;
305 flop_site =
static_cast<double>(
307 }
else if (
m_repr ==
"Chiral") {
308 flop_site =
static_cast<double>(
315 flop = flop_site *
static_cast<double>(Lvol);
316 if ((
m_mode ==
"DdagD") || (
m_mode ==
"DDdag")) flop *= 2.0;
338 const Field& f,
const int ex2)
342 const double *v1 = f.
ptr(Ninvol * ex2);
343 double *v2 = w.
ptr(Ninvol * ex1);
349 int ns =
m_Ntask * (ith + 1) / nth - is;
353 for (
int i = is; i < is + ns; ++i) {
365 for (
int i = is; i < is + ns; ++i) {
377 for (
int i = is; i < is + ns; ++i) {
388 for (
int i = is; i < is + ns; ++i) {
400 const Field& f,
const int ex2)
404 const double *v1 = f.
ptr(Ninvol * ex2);
405 double *v2 = w.
ptr(Ninvol * ex1);
411 int ns =
m_Ntask * (ith + 1) / nth - is;
415 for (
int i = is; i < is + ns; ++i) {
427 for (
int i = is; i < is + ns; ++i) {
439 for (
int i = is; i < is + ns; ++i) {
450 for (
int i = is; i < is + ns; ++i) {
477 }
else if (mu == 1) {
479 }
else if (mu == 2) {
481 }
else if (mu == 3) {
495 }
else if (mu == 1) {
497 }
else if (mu == 2) {
499 }
else if (mu == 3) {
510 Field& w,
const int ex1,
511 const Field& v,
const int ex2,
const int ipm)
517 }
else if (ipm == -1) {
543 double fac,
const Field& f)
545 const double *v1 = f.
ptr(0);
546 double *v2 = w.
ptr(0);
552 int ns =
m_Ntask * (ith + 1) / nth - is;
554 for (
int i = is; i < is + ns; ++i) {
577 double *v2 = w.
ptr(0);
583 int ns =
m_Ntask * (ith + 1) / nth - is;
585 for (
int i = is; i < is + ns; ++i) {
594 const double *v1 = f.
ptr(0);
595 double *v2 = w.
ptr(0);
601 int ns =
m_Ntask * (ith + 1) / nth - is;
603 for (
int i = is; i < is + ns; ++i) {
613 const double *v1 = f.
ptr(0);
614 double *v2 = w.
ptr(0);
620 int ns =
m_Ntask * (ith + 1) / nth - is;
622 for (
int i = is; i < is + ns; ++i) {
632 const double *v1 = f.
ptr(0);
633 double *v2 = w.
ptr(0);
639 int ns =
m_Ntask * (ith + 1) / nth - is;
643 for (
int i = is; i < is + ns; ++i) {
648 for (
int i = is; i < is + ns; ++i) {
652 for (
int i = is; i < is + ns; ++i) {
663 const double *v1 = f.
ptr(0);
664 double *v2 = w.
ptr(0);
670 int ns =
m_Ntask * (ith + 1) / nth - is;
674 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 const double *v1 = f.
ptr(0);
695 double *v2 = w.
ptr(0);
701 int ns =
m_Ntask * (ith + 1) / nth - is;
705 for (
int i = is; i < is + ns; ++i) {
710 for (
int i = is; i < is + ns; ++i) {
714 for (
int i = is; i < is + ns; ++i) {
725 const double *v1 = f.
ptr(0);
726 double *v2 = w.
ptr(0);
732 int ns =
m_Ntask * (ith + 1) / nth - is;
736 for (
int i = is; i < is + ns; ++i) {
741 for (
int i = is; i < is + ns; ++i) {
745 for (
int i = is; i < is + ns; ++i) {
756 const double *v1 = f.
ptr(0);
757 double *v2 = w.
ptr(0);
763 int ns =
m_Ntask * (ith + 1) / nth - is;
767 for (
int i = is; i < is + ns; ++i) {
772 for (
int i = is; i < is + ns; ++i) {
776 for (
int i = is; i < is + ns; ++i) {
787 const double *v1 = f.
ptr(0);
788 double *v2 = w.
ptr(0);
794 int ns =
m_Ntask * (ith + 1) / nth - is;
798 for (
int i = is; i < is + ns; ++i) {
803 for (
int i = is; i < is + ns; ++i) {
807 for (
int i = is; i < is + ns; ++i) {
818 const double *v1 = f.
ptr(0);
819 double *v2 = w.
ptr(0);
825 int ns =
m_Ntask * (ith + 1) / nth - is;
829 for (
int i = is; i < is + ns; ++i) {
834 for (
int i = is; i < is + ns; ++i) {
838 for (
int i = is; i < is + ns; ++i) {
849 const double *v1 = f.
ptr(0);
850 double *v2 = w.
ptr(0);
856 int ns =
m_Ntask * (ith + 1) / nth - is;
860 for (
int i = is; i < is + ns; ++i) {
865 for (
int i = is; i < is + ns; ++i) {
869 for (
int i = is; i < is + ns; ++i) {
880 const double *v1 = f.
ptr(0);
881 double *v2 = w.
ptr(0);
887 int ns =
m_Ntask * (ith + 1) / nth - is;
891 for (
int i = is; i < is + ns; ++i) {
896 for (
int i = is; i < is + ns; ++i) {
900 for (
int i = is; i < is + ns; ++i) {
911 const double *v1 = f.
ptr(0);
912 double *v2 = w.
ptr(0);
918 int ns =
m_Ntask * (ith + 1) / nth - is;
922 for (
int i = is; i < is + ns; ++i) {
927 for (
int i = is; i < is + ns; ++i) {
931 for (
int i = is; i < is + ns; ++i) {
double * vcp1_xp
arrays for data transfer.
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
void mult_zpb_thread(int, double *, const double *)
void D_ex_chiral(Field &, const int ex1, const Field &, const int ex2)
void mult_tp1_chiral_thread(int, double *, const double *)
void mult_tp_chiral(Field &, const Field &)
void(Fopr_WilsonGeneral::* m_mult_tp)(Field &, const Field &)
void detailed(const char *format,...)
void mult_xp(Field &, const Field &)
void mult_yp(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 mult_tm1_dirac_thread(int, double *, const double *)
const Field_G * m_U
gauge configuration.
void mult_yp1_thread(int, double *, const double *)
double m_nu_s
spatial anisotropy parameter.
void mult_yp2_thread(int, double *, const double *)
void mult_zp2_thread(int, double *, const double *)
double m_kappa_s
spatial hopping parameter.
void general(const char *format,...)
GammaMatrix get_GM(GMspecies spec)
void mult_dn(int mu, Field &, const Field &)
Field m_w2
temporary fields.
static Bridge::VerboseLevel Vlevel()
Container of Field-type object.
void mult_ym2_thread(int, double *, const double *)
int fetch_double(const string &key, double &value) const
void Ddag(Field &w, const Field &f)
static Channel * recv_init(int count, int idir, int ipm)
void mult_up(int mu, Field &, const Field &)
nearest neighbor hopping term: temporary entry [H.Matsufuru]
void proj_chiral(Field &w, const int ex1, const Field &v, const int ex2, const int ipm)
void clear_thread(int, double *)
void mult_tpb_chiral_thread(int, double *, const double *)
void mult_xm(Field &, const Field &)
void mult_ym(Field &, const Field &)
static int ipe(const int dir)
logical coordinate of current proc.
void gm5_chiral_thread(int, double *, const double *)
void addpart_ex(int ex, const Field &w, int exw)
std::vector< Channel * > m_bw_recv
void D_ex_dirac(Field &, const int ex1, const Field &, const int ex2)
static int get_thread_id()
returns thread id.
void mult_tpb_dirac_thread(int, double *, const double *)
void H(Field &w, const Field &f)
void mult_tm_dirac(Field &, const Field &)
void mult_tp2_dirac_thread(int, double *, const double *)
void daypx(Field &, double, const Field &)
void mult_zm2_thread(int, double *, const double *)
void mult_xm2_thread(int, double *, const double *)
std::string get_mode() const
only for Fopr_Overlap
void mult_tm1_chiral_thread(int, double *, const double *)
void mult_tmb_dirac_thread(int, double *, const double *)
void init(std::string repr)
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=COMPLEX)
static void sync_barrier_all()
barrier among all the threads and nodes.
void(Fopr_WilsonGeneral::* m_D_ex)(Field &, const int, const Field &, const int)
void mult_gm5(Field &v, const Field &f)
gamma_5 multiplication. [31 Mar 2017 H.Matsufuru]
void mult_tm2_dirac_thread(int, double *, const double *)
void mult_tp1_dirac_thread(int, double *, const double *)
double flop_count()
returns the flops per site.
void mult_zp(Field &, const Field &)
std::vector< int > m_boundary
boundary condition.
void paranoiac(const char *format,...)
void gm5_chiral(Field &, const Field &)
void D(Field &v, const Field &f)
void mult_zmb_thread(int, double *, const double *)
void DdagD(Field &w, const Field &f)
void crucial(const char *format,...)
void mult_xmb_thread(int, double *, const double *)
void gm5_dirac_thread(int, double *, const double *)
std::vector< double > m_boundary2
b.c. for each node.
void mult_tp_dirac(Field &, const Field &)
void D_chiral(Field &, const Field &)
void daypx_thread(int, double *, double, const double *)
void mult_tmb_chiral_thread(int, double *, const double *)
void mult_ypb_thread(int, double *, const double *)
void D_dirac(Field &, const Field &)
void(Fopr_WilsonGeneral::* m_mult_tm)(Field &, const Field &)
double m_r_s
spatial Wilson parameter.
static Channel * send_init(int count, int idir, int ipm)
void mult_undef(Field &, const Field &f)
static int sync()
synchronize within small world.
void set_parameters(const Parameters ¶ms)
void mult_ymb_thread(int, double *, const double *)
void mult_zm(Field &, const Field &)
void DDdag(Field &w, const Field &f)
void mult_xpb_thread(int, double *, const double *)
void(Fopr_WilsonGeneral::* m_mult_dag)(Field &, const Field &)
void mult_ym1_thread(int, double *, const double *)
void gm5_dirac(Field &, const Field &)
void mult_tm_chiral(Field &, const Field &)
std::vector< GammaMatrix > m_GM
gamma matrices.
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
void mult_xp1_thread(int, double *, const double *)
void mult_tm2_chiral_thread(int, double *, const double *)
static const std::string class_name
double m_kappa_t
temporal hopping parameter.
Bridge::VerboseLevel m_vl
void mult_tp2_chiral_thread(int, double *, const double *)
void mult_zp1_thread(int, double *, const double *)
std::vector< Channel * > m_fw_send
void(Fopr_WilsonGeneral::* m_D)(Field &, const Field &)
void(Fopr_WilsonGeneral::* m_mult)(Field &, const Field &)
void mult_xm1_thread(int, double *, const double *)
static VerboseLevel set_verbose_level(const std::string &str)
void mult_xp2_thread(int, double *, const double *)
void mult_zm1_thread(int, double *, const double *)
std::vector< Channel * > m_fw_recv
void(Fopr_WilsonGeneral::* m_gm5)(Field &, const Field &)
std::vector< Channel * > m_bw_send
const Field_F mult_gm5p(int mu, const Field_F &w)