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 &)