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) {
68 m_Leo[y + m_Ny * (z + m_Nz * t)] = (y2 + z2 + t2) % 2;
80 }
else if (
m_repr ==
"Chiral") {
115 buf_size[0] =
sizeof(double) *
m_Nvc * 2 * (
m_Ny / 2) * m_Nz *
m_Nt;
116 buf_size[1] =
sizeof(double) *
m_Nvc * 2 *
m_Nx2 * m_Nz * m_Nt;
134 for (
int imu = 0; imu <
m_Ndim; ++imu) {
194 const string str_vlevel = params.
get_string(
"verbose_level");
218 const std::vector<int> bc)
223 for (
int mu = 0; mu <
m_Ndim; ++mu) {
229 assert(bc.size() ==
m_Ndim);
235 for (
int mu = 0; mu <
m_Ndim; ++mu) {
240 for (
int idir = 0; idir <
m_Ndim; ++idir) {
267 double flop_site, flop;
270 flop_site =
static_cast<double>(
272 }
else if (
m_repr ==
"Chiral") {
273 flop_site =
static_cast<double>(
280 flop = flop_site *
static_cast<double>(Lvol / 2);
377 assert(f.
nex() == 1);
433 const Field& f,
const int ieo)
461 const Field& f,
const int ieo)
475 const Field& f,
const int ieo)
485 (this->*
m_gm5)(w, f);
500 const double *v1 = f.
ptr(0);
501 double *v2 = w.
ptr(0);
507 int ns =
m_Ntask * (ith + 1) / nth - is;
509 for (
int i = is; i < is + ns; ++i) {
519 const double *v1 = f.
ptr(0);
520 double *v2 = w.
ptr(0);
526 int ns =
m_Ntask * (ith + 1) / nth - is;
528 for (
int i = is; i < is + ns; ++i) {
537 double *wp = w.
ptr(0);
543 int ns =
m_Ntask * (ith + 1) / nth - is;
545 for (
int i = is; i < is + ns; ++i) {
554 double *wp = w.
ptr(0);
560 int ns =
m_Ntask * (ith + 1) / nth - is;
562 for (
int i = is; i < is + ns; ++i) {
582 double *wp = w.
ptr(0);
588 int ns =
m_Ntask * (ith + 1) / nth - is;
590 for (
int i = is; i < is + ns; ++i) {
599 double *wp = w.
ptr(0);
605 int ns =
m_Ntask * (ith + 1) / nth - is;
607 for (
int i = is; i < is + ns; ++i) {
615 const Field& f,
const int ieo)
617 const double *v1 = f.
ptr(0);
618 double *v2 = w.
ptr(0);
624 int ns =
m_Ntask * (ith + 1) / nth - is;
626 for (
int i = is; i < is + ns; ++i) {
640 for (
int i = is; i < is + ns; ++i) {
644 for (
int i = is; i < is + ns; ++i) {
652 const Field& f,
const int ieo)
654 const double *v1 = f.
ptr(0);
655 double *v2 = w.
ptr(0);
661 int ns =
m_Ntask * (ith + 1) / nth - is;
663 for (
int i = is; i < is + ns; ++i) {
678 for (
int i = is; i < is + ns; ++i) {
682 for (
int i = is; i < is + ns; ++i) {
690 const Field& f,
const int ieo)
692 const double *v1 = f.
ptr(0);
693 double *v2 = w.
ptr(0);
699 int ns =
m_Ntask * (ith + 1) / nth - is;
701 for (
int i = is; i < is + ns; ++i) {
716 for (
int i = is; i < is + ns; ++i) {
720 for (
int i = is; i < is + ns; ++i) {
728 const Field& f,
const int ieo)
730 const double *v1 = f.
ptr(0);
731 double *v2 = w.
ptr(0);
737 int ns =
m_Ntask * (ith + 1) / nth - is;
739 for (
int i = is; i < is + ns; ++i) {
754 for (
int i = is; i < is + ns; ++i) {
758 for (
int i = is; i < is + ns; ++i) {
766 const Field& f,
const int ieo)
768 const double *v1 = f.
ptr(0);
769 double *v2 = w.
ptr(0);
775 int ns =
m_Ntask * (ith + 1) / nth - is;
777 for (
int i = is; i < is + ns; ++i) {
792 for (
int i = is; i < is + ns; ++i) {
796 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);
813 int ns =
m_Ntask * (ith + 1) / nth - is;
815 for (
int i = is; i < is + ns; ++i) {
830 for (
int i = is; i < is + ns; ++i) {
834 for (
int i = is; i < is + ns; ++i) {
842 const Field& f,
const int ieo)
844 const double *v1 = f.
ptr(0);
845 double *v2 = w.
ptr(0);
851 int ns =
m_Ntask * (ith + 1) / nth - is;
853 for (
int i = is; i < is + ns; ++i) {
867 for (
int i = is; i < is + ns; ++i) {
871 for (
int i = is; i < is + ns; ++i) {
879 const Field& f,
const int ieo)
881 const double *v1 = f.
ptr(0);
882 double *v2 = w.
ptr(0);
888 int ns =
m_Ntask * (ith + 1) / nth - is;
890 for (
int i = is; i < is + ns; ++i) {
904 for (
int i = is; i < is + ns; ++i) {
908 for (
int i = is; i < is + ns; ++i) {
916 const Field& f,
const int ieo)
918 const double *v1 = f.
ptr(0);
919 double *v2 = w.
ptr(0);
925 int ns =
m_Ntask * (ith + 1) / nth - is;
927 for (
int i = is; i < is + ns; ++i) {
942 for (
int i = is; i < is + ns; ++i) {
946 for (
int i = is; i < is + ns; ++i) {
954 const Field& f,
const int ieo)
956 const double *v1 = f.
ptr(0);
957 double *v2 = w.
ptr(0);
963 int ns =
m_Ntask * (ith + 1) / nth - is;
965 for (
int i = is; i < is + ns; ++i) {
980 for (
int i = is; i < is + ns; ++i) {
984 for (
int i = is; i < is + ns; ++i) {
std::vector< Channel * > m_fw_send
void scal(Field &x, const double a)
scal(x, a): x = a * x
void prePropD(Field &, Field &, const Field &)
void mult_tm1_chiral_thread(int, double *, const double *, int)
double * vcp1_xp
arrays for data transfer.
void detailed(const char *format,...)
void mult_tm1_dirac_thread(int, double *, const double *, int)
std::vector< double > m_boundary2
b.c. for each node.
static int get_num_threads()
returns available number of threads.
const double * ptr(const int jin, const int site, const int jex) const
void set(const int jin, const int site, const int jex, double v)
void DDdag(Field &v, const Field &f)
std::vector< int > m_boundary
boundary condition.
void gm5_self_chiral(Field &)
void mult_yp2_thread(int, double *, const double *, int)
void Meo_gm5(Field &, const Field &, const int ieo)
void general(const char *format,...)
static Bridge::VerboseLevel Vlevel()
Container of Field-type object.
int fetch_double(const string &key, double &value) const
static const std::string class_name
void Mdageo(Field &, const Field &, const int ieo)
void set_config(Field *U)
setting pointer to the gauge configuration.
static Channel * recv_init(int count, int idir, int ipm)
void Ddag(Field &v, const Field &f)
void(Fopr_Wilson_eo::* m_gm5)(Field &, const Field &)
void mult_xp(Field &, const Field &, const int ieo)
void mult_tp2_dirac_thread(int, double *, const double *, int)
void(Fopr_Wilson_eo::* m_gm5_self)(Field &)
void init(const std::string)
void mult_ypb_thread(int, double *, const double *, int)
static int ipe(const int dir)
logical coordinate of current proc.
void mult_tp_chiral(Field &, const Field &, const int ieo)
void mult_zm(Field &, const Field &, const int ieo)
void copy(Field &y, const Field &x)
copy(y, x): y = x
void postPropD(Field &, const Field &, const Field &)
void gm5_chiral_thread(int, double *, const double *)
void convertField(Field &eo, const Field &lex)
void mult_yp1_thread(int, double *, const double *, int)
void Meo(Field &, const Field &, const int ieo)
void mult_tm2_chiral_thread(int, double *, const double *, int)
void mult_tm_chiral(Field &, const Field &, const int ieo)
void scal_impl(Field &, double)
void H(Field &v, const Field &f)
static int get_thread_id()
returns thread id.
void gm5_chiral(Field &, const Field &)
void mult_ym2_thread(int, double *, const double *, int)
Wilson-type fermion field.
double flop_count()
retuns number of floating point operations of Meo.
void gm5_dirac(Field &, const Field &)
void scal_thread(int, double *, double)
void mult_xm1_thread(int, double *, const double *, int)
void mult_zp2_thread(int, double *, const double *, int)
void mult_tp1_dirac_thread(int, double *, const double *, int)
void gm5_dirac_thread(int, double *, const double *)
void D(Field &v, const Field &f)
void mult_tm_dirac(Field &, const Field &, const int ieo)
void MeoMoe(Field &, const Field &)
void mult_xp2_thread(int, double *, const double *, int)
void mult_zp1_thread(int, double *, const double *, int)
Bridge::VerboseLevel m_vl
void mult_tpb_dirac_thread(int, double *, const double *, int)
void mult_zp(Field &, const Field &, const int ieo)
void mult_zmb_thread(int, double *, const double *, int)
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=COMPLEX)
void mult_tp1_chiral_thread(int, double *, const double *, int)
static void sync_barrier_all()
barrier among all the threads and nodes.
std::string m_repr
Dirac matrix representation.
void mult_zpb_thread(int, double *, const double *, int)
void mult_tm2_dirac_thread(int, double *, const double *, int)
void mult_xmb_thread(int, double *, const double *, int)
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(Fopr_Wilson_eo::* m_mult_tm)(Field &, const Field &, const int ieo)
void mult_tpb_chiral_thread(int, double *, const double *, int)
Field_G * m_U
dummy: pointing m_Ueo.
void paranoiac(const char *format,...)
void mult_ym(Field &, const Field &, const int ieo)
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
void set_parameters(const Parameters ¶ms)
void DdagD(Field &v, const Field &f)
void crucial(const char *format,...)
std::vector< Channel * > m_bw_recv
void mult_tp2_chiral_thread(int, double *, const double *, int)
double m_kappa
hopping parameter.
void mult_ymb_thread(int, double *, const double *, int)
void clear_thread(int, double *)
void prePropDag(Field &, Field &, const Field &)
void mult_yp(Field &, const Field &, const int ieo)
void gm5p(const int mu, Field &, const Field &v)
gamma_5 (1 - gamma_mu) v(x + mu) used in force calculation.
void mult_tmb_dirac_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]
static Channel * send_init(int count, int idir, int ipm)
void mult_ym1_thread(int, double *, const double *, int)
static int sync()
synchronize within small world.
void mult_xm2_thread(int, double *, const double *, int)
void mult_zm2_thread(int, double *, const double *, int)
void mult_tp_dirac(Field &, const Field &, const int ieo)
void mult_xpb_thread(int, double *, const double *, 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 mult_zm1_thread(int, double *, const double *, int)
std::vector< Channel * > m_fw_recv
void mult_xm(Field &, const Field &, const int ieo)
void mult_tmb_chiral_thread(int, double *, const double *, int)
void mult_xp1_thread(int, double *, const double *, int)
static VerboseLevel set_verbose_level(const std::string &str)
std::vector< Channel * > m_bw_send
void gm5_self_dirac(Field &)
void(Fopr_Wilson_eo::* m_mult_tp)(Field &, const Field &, const int ieo)