22 #ifdef USE_FACTORY_AUTOREGISTER
24 bool init = Fopr_Wilson_eo::register_factory();
50 if ((
m_Nx % 2) != 0) {
56 if ((
m_Ny % 2) != 0) {
68 for (
int t = 0; t <
m_Nt; ++t) {
69 for (
int z = 0; z <
m_Nz; ++z) {
70 for (
int y = 0; y <
m_Ny; ++y) {
75 m_yzt_eo[y + m_Ny * (z + m_Nz * t)] = (y_global + z_global + t_global) % 2;
87 }
else if (
m_repr ==
"Chiral") {
161 const string str_vlevel = params.
get_string(
"verbose_level");
185 const std::vector<int> bc)
190 for (
int mu = 0; mu <
m_Ndim; ++mu) {
196 assert(bc.size() ==
m_Ndim);
204 for (
int idir = 0; idir <
m_Ndim; ++idir) {
229 }
else if (
m_mode ==
"Ddag") {
234 }
else if (
m_mode ==
"DdagD") {
237 }
else if (
m_mode ==
"DDdag") {
240 }
else if (
m_mode ==
"H") {
261 const int Nin = b.
nin();
262 const int Nex = b.
nex();
287 const int Nin = xe.
nin();
288 const int Nex = xe.
nex();
310 const int Nin = b.
nin();
311 const int Nex = b.
nex();
335 const int Nin = xe.
nin();
336 const int Nex = xe.
nex();
392 assert(f.
nex() == 1);
415 const Field& f,
const int ieo)
443 const Field& f,
const int ieo)
457 const Field& f,
const int ieo)
467 (this->*
m_gm5)(w, f);
482 const double *v1 = f.
ptr(0);
483 double *v2 = w.
ptr(0);
488 const int is =
m_Ntask * i_thread / Nthread;
489 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
491 for (
int i = is; i < is + ns; ++i) {
502 const double *v1 = f.
ptr(0);
503 double *v2 = w.
ptr(0);
508 const int is =
m_Ntask * i_thread / Nthread;
509 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
511 for (
int i = is; i < is + ns; ++i) {
521 double *wp = w.
ptr(0);
526 const int is =
m_Ntask * i_thread / Nthread;
527 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
529 for (
int i = is; i < is + ns; ++i) {
539 double *wp = w.
ptr(0);
544 const int is =
m_Ntask * i_thread / Nthread;
545 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
547 for (
int i = is; i < is + ns; ++i) {
568 double *wp = w.
ptr(0);
573 const int is =
m_Ntask * i_thread / Nthread;
574 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
576 for (
int i = is; i < is + ns; ++i) {
586 double *wp = w.
ptr(0);
591 const int is =
m_Ntask * i_thread / Nthread;
592 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
594 for (
int i = is; i < is + ns; ++i) {
603 const Field& f,
const int ieo)
605 const double *v1 = f.
ptr(0);
606 double *v2 = w.
ptr(0);
611 const int is =
m_Ntask * i_thread / Nthread;
612 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
614 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) {
639 const Field& f,
const int ieo)
641 const double *v1 = f.
ptr(0);
642 double *v2 = w.
ptr(0);
647 const int is =
m_Ntask * i_thread / Nthread;
648 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
650 for (
int i = is; i < is + ns; ++i) {
662 for (
int i = is; i < is + ns; ++i) {
666 for (
int i = is; i < is + ns; ++i) {
675 const Field& f,
const int ieo)
677 const double *v1 = f.
ptr(0);
678 double *v2 = w.
ptr(0);
683 const int is =
m_Ntask * i_thread / Nthread;
684 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
686 for (
int i = is; i < is + ns; ++i) {
698 for (
int i = is; i < is + ns; ++i) {
702 for (
int i = is; i < is + ns; ++i) {
711 const Field& f,
const int ieo)
713 const double *v1 = f.
ptr(0);
714 double *v2 = w.
ptr(0);
719 const int is =
m_Ntask * i_thread / Nthread;
720 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
722 for (
int i = is; i < is + ns; ++i) {
734 for (
int i = is; i < is + ns; ++i) {
738 for (
int i = is; i < is + ns; ++i) {
747 const Field& f,
const int ieo)
749 const double *v1 = f.
ptr(0);
750 double *v2 = w.
ptr(0);
755 const int is =
m_Ntask * i_thread / Nthread;
756 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
758 for (
int i = is; i < is + ns; ++i) {
770 for (
int i = is; i < is + ns; ++i) {
774 for (
int i = is; i < is + ns; ++i) {
783 const Field& f,
const int ieo)
785 const double *v1 = f.
ptr(0);
786 double *v2 = w.
ptr(0);
791 const int is =
m_Ntask * i_thread / Nthread;
792 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
794 for (
int i = is; i < is + ns; ++i) {
806 for (
int i = is; i < is + ns; ++i) {
810 for (
int i = is; i < is + ns; ++i) {
819 const Field& f,
const int ieo)
821 const double *v1 = f.
ptr(0);
822 double *v2 = w.
ptr(0);
827 const int is =
m_Ntask * i_thread / Nthread;
828 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
830 for (
int i = is; i < is + ns; ++i) {
842 for (
int i = is; i < is + ns; ++i) {
846 for (
int i = is; i < is + ns; ++i) {
855 const Field& f,
const int ieo)
857 const double *v1 = f.
ptr(0);
858 double *v2 = w.
ptr(0);
863 const int is =
m_Ntask * i_thread / Nthread;
864 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
866 for (
int i = is; i < is + ns; ++i) {
878 for (
int i = is; i < is + ns; ++i) {
882 for (
int i = is; i < is + ns; ++i) {
891 const Field& f,
const int ieo)
893 const double *v1 = f.
ptr(0);
894 double *v2 = w.
ptr(0);
899 const int is =
m_Ntask * i_thread / Nthread;
900 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
902 for (
int i = is; i < is + ns; ++i) {
914 for (
int i = is; i < is + ns; ++i) {
918 for (
int i = is; i < is + ns; ++i) {
927 const Field& f,
const int ieo)
929 const double *v1 = f.
ptr(0);
930 double *v2 = w.
ptr(0);
935 const int is =
m_Ntask * i_thread / Nthread;
936 const int ns =
m_Ntask * (i_thread + 1) / Nthread - is;
938 for (
int i = is; i < is + ns; ++i) {
950 for (
int i = is; i < is + ns; ++i) {
954 for (
int i = is; i < is + ns; ++i) {
976 }
else if (
m_repr ==
"Chiral") {
984 double gflop = flop_site * ((Nvol / 2) * (NPE / 1.0e+9));
void scal(Field &x, const double a)
scal(x, a): x = a * x
void mult_zp2_thread(const int, double *, const double *, const 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 mult_tp1_dirac_thread(const int, double *, const double *, const int)
void mult_zpb_thread(const int, double *, const double *, const int)
void(Fopr_Wilson_eo::* m_mult_tp)(Field &, const Field &, const int ieo)
void mult_ymb_thread(const int, double *, const double *, const 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 gm5_chiral_thread(const int, double *, const double *)
void mult_zm2_thread(const int, double *, const double *, const int)
void set(const int jin, const int site, const int jex, double v)
void clear_thread(const int, double *)
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 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_xp2_thread(const int, double *, const double *, const int)
void scal_impl(Field &, const double)
void DdagD(Field &v, const Field &f)
void Mdageo(Field &, const Field &, const int ieo)
std::vector< double > m_boundary_each_node
b.c. for each node.
void mult_tmb_chiral_thread(const int, double *, const double *, const int)
static int ipe(const int dir)
logical coordinate of current proc.
void mult_zp1_thread(const int, double *, const double *, const int)
void mult_zm(Field &, const Field &, const int ieo)
void copy(Field &y, const Field &x)
copy(y, x): y = x
void mult_tp2_dirac_thread(const int, double *, const double *, const 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)
std::vector< int > m_yzt_eo
void mult_xp1_thread(const int, double *, const double *, const int)
void mult_tp_dirac(Field &, const Field &, const int ieo)
void mult_ym1_thread(const int, double *, const double *, const int)
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 gm5_dirac_thread(const int, double *, const double *)
void(Fopr_Wilson_eo::* m_gm5_self)(Field &)
void mult_xm1_thread(const int, double *, const double *, const int)
void mult_tpb_dirac_thread(const int, double *, const double *, const int)
void(Fopr_Wilson_eo::* m_mult_dag)(Field &, const Field &)
void mult_tm2_dirac_thread(const int, double *, const double *, const int)
void mult_tp2_chiral_thread(const int, double *, const double *, const int)
void mult_yp1_thread(const int, double *, const double *, const int)
void init(const std::string)
void mult_tm_chiral(Field &, const Field &, const int ieo)
Bridge::VerboseLevel m_vl
void mult_zmb_thread(const int, double *, const double *, const int)
double flop_count()
this returns the number of floating point operations of Meo.
void mult_xm2_thread(const int, double *, const double *, const 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...
Field_G * m_U
dummy: pointing m_Ueo.
void mult_tm1_dirac_thread(const int, double *, const double *, const int)
void mult_tpb_chiral_thread(const int, double *, const double *, const int)
void mult_tp_chiral(Field &, const Field &, const int ieo)
std::string m_repr
Dirac matrix representation.
void prePropDag(Field &, Field &, const Field &)
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=Element_type::COMPLEX)
void mult_yp2_thread(const int, double *, const double *, const int)
void mult_tp1_chiral_thread(const int, double *, const double *, const int)
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
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 D(Field &v, const Field &f)
std::vector< int > m_boundary
boundary condition.
void mult_tm2_chiral_thread(const int, double *, const double *, const int)
void mult_tm1_chiral_thread(const int, double *, const double *, const int)
std::string get_mode() const
only for Fopr_Overlap
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_xmb_thread(const int, double *, const double *, const int)
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)
std::string m_mode
mult mode.
void gm5_self_dirac(Field &)
void mult_xpb_thread(const int, double *, const double *, const int)
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 scal_thread(const int, double *, const double)
void mult_ym2_thread(const int, double *, const double *, const int)
void set_parameters(const Parameters ¶ms)
static const std::string class_name
void set_mode(const std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
void mult_tmb_dirac_thread(const int, double *, const double *, const int)
static VerboseLevel set_verbose_level(const std::string &str)
void mult_ypb_thread(const int, double *, const double *, const int)
void mult_zm1_thread(const int, double *, const double *, const int)