44 if ((
m_Nx % 2) != 0) {
50 if ((
m_Ny % 2) != 0) {
62 for (
int t = 0; t <
m_Nt; ++t) {
63 for (
int z = 0; z <
m_Nz; ++z) {
64 for (
int y = 0; y <
m_Ny; ++y) {
69 m_Leo[y + m_Ny * (z + m_Nz * t)] = (y2 + z2 + t2) % 2;
81 }
else if (
m_repr ==
"Chiral") {
155 const string str_vlevel = params.
get_string(
"verbose_level");
179 const std::vector<int> bc)
184 for (
int mu = 0; mu <
m_Ndim; ++mu) {
190 assert(bc.size() ==
m_Ndim);
196 for (
int mu = 0; mu <
m_Ndim; ++mu) {
201 for (
int idir = 0; idir <
m_Ndim; ++idir) {
226 }
else if (
m_mode ==
"Ddag") {
231 }
else if (
m_mode ==
"DdagD") {
234 }
else if (
m_mode ==
"DDdag") {
237 }
else if (
m_mode ==
"H") {
262 double flop_site, flop;
265 flop_site =
static_cast<double>(
267 }
else if (
m_repr ==
"Chiral") {
268 flop_site =
static_cast<double>(
276 flop = flop_site *
static_cast<double>(Lvol / 2);
413 assert(f.
nex() == 1);
436 const Field& f,
const int ieo)
464 const Field& f,
const int ieo)
478 const Field& f,
const int ieo)
488 (this->*
m_gm5)(w, f);
503 const double *v1 = f.
ptr(0);
504 double *v2 = w.
ptr(0);
509 int is =
m_Ntask * i_thread / Nthread;
510 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
512 for (
int i = is; i < is + ns; ++i) {
523 const double *v1 = f.
ptr(0);
524 double *v2 = w.
ptr(0);
529 int is =
m_Ntask * i_thread / Nthread;
530 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
532 for (
int i = is; i < is + ns; ++i) {
542 double *wp = w.
ptr(0);
547 int is =
m_Ntask * i_thread / Nthread;
548 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
550 for (
int i = is; i < is + ns; ++i) {
560 double *wp = w.
ptr(0);
565 int is =
m_Ntask * i_thread / Nthread;
566 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
568 for (
int i = is; i < is + ns; ++i) {
589 double *wp = w.
ptr(0);
594 int is =
m_Ntask * i_thread / Nthread;
595 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
597 for (
int i = is; i < is + ns; ++i) {
607 double *wp = w.
ptr(0);
612 int is =
m_Ntask * i_thread / Nthread;
613 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
615 for (
int i = is; i < is + ns; ++i) {
624 const Field& f,
const int ieo)
626 const double *v1 = f.
ptr(0);
627 double *v2 = w.
ptr(0);
632 int is =
m_Ntask * i_thread / Nthread;
633 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
635 for (
int i = is; i < is + ns; ++i) {
647 for (
int i = is; i < is + ns; ++i) {
651 for (
int i = is; i < is + ns; ++i) {
660 const Field& f,
const int ieo)
662 const double *v1 = f.
ptr(0);
663 double *v2 = w.
ptr(0);
668 int is =
m_Ntask * i_thread / Nthread;
669 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) {
696 const Field& f,
const int ieo)
698 const double *v1 = f.
ptr(0);
699 double *v2 = w.
ptr(0);
704 int is =
m_Ntask * i_thread / Nthread;
705 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
707 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) {
732 const Field& f,
const int ieo)
734 const double *v1 = f.
ptr(0);
735 double *v2 = w.
ptr(0);
740 int is =
m_Ntask * i_thread / Nthread;
741 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) {
768 const Field& f,
const int ieo)
770 const double *v1 = f.
ptr(0);
771 double *v2 = w.
ptr(0);
776 int is =
m_Ntask * i_thread / Nthread;
777 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
779 for (
int i = is; i < is + ns; ++i) {
791 for (
int i = is; i < is + ns; ++i) {
795 for (
int i = is; i < is + ns; ++i) {
804 const Field& f,
const int ieo)
806 const double *v1 = f.
ptr(0);
807 double *v2 = w.
ptr(0);
812 int is =
m_Ntask * i_thread / Nthread;
813 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
815 for (
int i = is; i < is + ns; ++i) {
827 for (
int i = is; i < is + ns; ++i) {
831 for (
int i = is; i < is + ns; ++i) {
840 const Field& f,
const int ieo)
842 const double *v1 = f.
ptr(0);
843 double *v2 = w.
ptr(0);
848 int is =
m_Ntask * i_thread / Nthread;
849 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
851 for (
int i = is; i < is + ns; ++i) {
863 for (
int i = is; i < is + ns; ++i) {
867 for (
int i = is; i < is + ns; ++i) {
876 const Field& f,
const int ieo)
878 const double *v1 = f.
ptr(0);
879 double *v2 = w.
ptr(0);
884 int is =
m_Ntask * i_thread / Nthread;
885 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
887 for (
int i = is; i < is + ns; ++i) {
899 for (
int i = is; i < is + ns; ++i) {
903 for (
int i = is; i < is + ns; ++i) {
912 const Field& f,
const int ieo)
914 const double *v1 = f.
ptr(0);
915 double *v2 = w.
ptr(0);
920 int is =
m_Ntask * i_thread / Nthread;
921 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
923 for (
int i = is; i < is + ns; ++i) {
935 for (
int i = is; i < is + ns; ++i) {
939 for (
int i = is; i < is + ns; ++i) {
948 const Field& f,
const int ieo)
950 const double *v1 = f.
ptr(0);
951 double *v2 = w.
ptr(0);
956 int is =
m_Ntask * i_thread / Nthread;
957 int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
959 for (
int i = is; i < is + ns; ++i) {
971 for (
int i = is; i < is + ns; ++i) {
975 for (
int i = is; i < is + ns; ++i) {
void scal(Field &x, const double a)
scal(x, a): x = a * x
void mult_ymb_thread(int, double *, const double *, int)
void mult_xm(Field &, const Field &, const int ieo)
void postPropD(Field &, const Field &, const Field &)
void mult_tm_dirac(Field &, const Field &, const int ieo)
void(Fopr_Wilson_eo::* m_mult_tp)(Field &, const Field &, const int ieo)
void mult_tp2_chiral_thread(int, double *, const double *, int)
static int get_num_threads()
returns available number of threads.
void mult_ym(Field &, const Field &, const int ieo)
void mult_xp(Field &, const Field &, const int ieo)
const double * ptr(const int jin, const int site, const int jex) const
void mult_yp(Field &, const Field &, const int ieo)
void set(const int jin, const int site, const int jex, double v)
void DDdag(Field &v, const Field &f)
void gm5p(const int mu, Field &, const Field &v)
gamma_5 (1 - gamma_mu) v(x + mu) used in force calculation.
void(Fopr_Wilson_eo::* m_mult)(Field &, const Field &)
void mult_zm1_thread(int, double *, const double *, int)
void mult_tm1_chiral_thread(int, double *, const double *, int)
void gm5_dirac(Field &, const Field &)
void general(const char *format,...)
static Bridge::VerboseLevel Vlevel()
Container of Field-type object.
int fetch_double(const string &key, double &value) const
void mult_yp1_thread(int, double *, const double *, int)
void scal_thread(int, double *, double)
void DdagD(Field &v, const Field &f)
void Mdageo(Field &, const Field &, const int ieo)
void mult_xmb_thread(int, double *, const double *, int)
static int ipe(const int dir)
logical coordinate of current proc.
void mult_zm(Field &, const Field &, const int ieo)
void copy(Field &y, const Field &x)
copy(y, x): y = x
void gm5_dirac_thread(int, double *, const double *)
void mult_xm1_thread(int, double *, const double *, int)
void set_config(Field *U)
setting pointer to the gauge configuration.
void(Fopr_Wilson_eo::* m_postProp)(Field &, const Field &, const Field &)
void MeoMoe(Field &, const Field &)
void gm5_self_chiral(Field &)
void convertField(Field &eo, const Field &lex)
void mult_tpb_chiral_thread(int, double *, const double *, int)
void mult_yp2_thread(int, double *, const double *, int)
void mult_tp_dirac(Field &, const Field &, const int ieo)
static int get_thread_id()
returns thread id.
Wilson-type fermion field.
void Ddag(Field &v, const Field &f)
void Meo(Field &, const Field &, const int ieo)
void(Fopr_Wilson_eo::* m_gm5)(Field &, const Field &)
void(Fopr_Wilson_eo::* m_gm5_self)(Field &)
void mult_ypb_thread(int, double *, const double *, int)
void(Fopr_Wilson_eo::* m_mult_dag)(Field &, const Field &)
void mult_xp1_thread(int, double *, const double *, int)
void init(const std::string)
void mult_tm_chiral(Field &, const Field &, const int ieo)
void mult_tp1_dirac_thread(int, double *, const double *, int)
Bridge::VerboseLevel m_vl
double flop_count()
this returns the number of floating point operations of Meo.
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=COMPLEX)
void mult_zpb_thread(int, double *, const double *, int)
static void sync_barrier_all()
barrier among all the threads and nodes.
double * vcp1_xp
arrays for data transfer.
void gm5_chiral(Field &, const Field &)
void aypx(const double a, Field &y, const Field &x)
aypx(y, a, x): y := a * y + x
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(int, double *, const double *, int)
void mult_zm2_thread(int, double *, const double *, int)
void mult_tm2_dirac_thread(int, double *, const double *, int)
Field_G * m_U
dummy: pointing m_Ueo.
void mult_tp_chiral(Field &, const Field &, const int ieo)
std::string m_repr
Dirac matrix representation.
void prePropDag(Field &, Field &, const Field &)
void mult_zmb_thread(int, double *, const double *, int)
void mult_tp2_dirac_thread(int, double *, const double *, int)
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
void mult_tp1_chiral_thread(int, double *, const double *, int)
void(Fopr_Wilson_eo::* m_preProp)(Field &, Field &, const Field &)
void crucial(const char *format,...)
void Meo_gm5(Field &, const Field &, const int ieo)
void mult_xpb_thread(int, double *, const double *, int)
void D(Field &v, const Field &f)
void mult_zp1_thread(int, double *, const double *, int)
void mult_tm2_chiral_thread(int, double *, const double *, int)
std::vector< int > m_boundary
boundary condition.
void mult_tmb_chiral_thread(int, double *, const double *, int)
void mult_xm2_thread(int, double *, const double *, int)
void mult_ym1_thread(int, double *, const double *, int)
std::string get_mode() const
only for Fopr_Overlap
void mult_zp2_thread(int, double *, const double *, int)
void reverseField(Field &lex, const Field &eo)
void mult_gm5(Field &, const Field &)
gamma_5 multiplication. [31 Mar 2017 H.Matsufuru]
void prePropD(Field &, Field &, const Field &)
void mult_zp(Field &, const Field &, const int ieo)
void mult_tpb_dirac_thread(int, double *, const double *, int)
void scal_impl(Field &, double)
void H(Field &v, const Field &f)
double m_kappa
hopping parameter.
void(Fopr_Wilson_eo::* m_mult_tm)(Field &, const Field &, const int ieo)
void mult_ym2_thread(int, double *, const double *, int)
void mult_xp2_thread(int, double *, const double *, int)
std::string m_mode
mult mode.
void clear_thread(int, double *)
void gm5_self_dirac(Field &)
string get_string(const string &key) const
int fetch_int_vector(const string &key, vector< int > &value) const
void postPropDag(Field &, const Field &, const Field &)
void set_parameters(const Parameters ¶ms)
static const std::string class_name
void gm5_chiral_thread(int, double *, const double *)
static VerboseLevel set_verbose_level(const std::string &str)
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
void mult_tm1_dirac_thread(int, double *, const double *, int)
std::vector< double > m_boundary2
b.c. for each node.