26   bool init = Fopr::Factory_noarg::Register(
"Clover_SF", create_object);
 
   37   const std::string str_vlevel = params.
get_string(
"verbose_level");
 
   42   std::string         str_gmset_type;
 
   45   std::vector<double> phi, phipr;
 
   49   err_optional += params.
fetch_string(
"gamma_matrix_type", str_gmset_type);
 
   70                                     double *phi, 
double *phipr)
 
   76   for (
int mu = 0; mu < 
m_Ndim; ++mu) {
 
   89   assert(bc.size() == 
m_Ndim);
 
   95   for (
int i = 0; i < 3; ++i) {
 
  100   for (
int mu = 0; mu < 
m_Ndim; ++mu) {
 
  111   inline double mult_uv_r(
const double *u, 
const double *v)
 
  113     return u[0] * v[0] - u[1] * v[1]
 
  114            + u[2] * v[2] - u[3] * v[3]
 
  115            + u[4] * v[4] - u[5] * v[5];
 
  119   inline double mult_uv_i(
const double *u, 
const double *v)
 
  121     return u[0] * v[1] + u[1] * v[0]
 
  122            + u[2] * v[3] + u[3] * v[2]
 
  123            + u[4] * v[5] + u[5] * v[4];
 
  197   assert(f.
nex() == 1);
 
  210   assert(f.
nex() == 1);
 
  222   assert(f.
nex() == 1);
 
  233   assert(f.
nex() == 1);
 
  254                                  const int mu, 
const int nu)
 
  265   (this->*
m_csw)(v, w);
 
  272   assert(w.
nex() == 1);
 
  276   int Ndf  = 2 * Nc * Nc;
 
  285   const double *w2 = w.
ptr(0);
 
  286   double       *v2 = v.
ptr(0);
 
  297   for (
int site = 0; site < Nvol; ++site) {
 
  298     int iv = Nvc * Nd * site;
 
  301     for (
int ic = 0; ic < Nc; ++ic) {
 
  304       int icg = ic * Nvc + ig;
 
  307       v2[icr + id1 + iv] -= mult_uv_i(&Bx[icg], &w2[id2 + iv]);
 
  308       v2[ici + id1 + iv] += mult_uv_r(&Bx[icg], &w2[id2 + iv]);
 
  309       v2[icr + id2 + iv] -= mult_uv_i(&Bx[icg], &w2[id1 + iv]);
 
  310       v2[ici + id2 + iv] += mult_uv_r(&Bx[icg], &w2[id1 + iv]);
 
  312       v2[icr + id3 + iv] -= mult_uv_i(&Bx[icg], &w2[id4 + iv]);
 
  313       v2[ici + id3 + iv] += mult_uv_r(&Bx[icg], &w2[id4 + iv]);
 
  314       v2[icr + id4 + iv] -= mult_uv_i(&Bx[icg], &w2[id3 + iv]);
 
  315       v2[ici + id4 + iv] += mult_uv_r(&Bx[icg], &w2[id3 + iv]);
 
  318       v2[icr + id1 + iv] += mult_uv_r(&By[icg], &w2[id2 + iv]);
 
  319       v2[ici + id1 + iv] += mult_uv_i(&By[icg], &w2[id2 + iv]);
 
  320       v2[icr + id2 + iv] -= mult_uv_r(&By[icg], &w2[id1 + iv]);
 
  321       v2[ici + id2 + iv] -= mult_uv_i(&By[icg], &w2[id1 + iv]);
 
  323       v2[icr + id3 + iv] += mult_uv_r(&By[icg], &w2[id4 + iv]);
 
  324       v2[ici + id3 + iv] += mult_uv_i(&By[icg], &w2[id4 + iv]);
 
  325       v2[icr + id4 + iv] -= mult_uv_r(&By[icg], &w2[id3 + iv]);
 
  326       v2[ici + id4 + iv] -= mult_uv_i(&By[icg], &w2[id3 + iv]);
 
  329       v2[icr + id1 + iv] -= mult_uv_i(&Bz[icg], &w2[id1 + iv]);
 
  330       v2[ici + id1 + iv] += mult_uv_r(&Bz[icg], &w2[id1 + iv]);
 
  331       v2[icr + id2 + iv] += mult_uv_i(&Bz[icg], &w2[id2 + iv]);
 
  332       v2[ici + id2 + iv] -= mult_uv_r(&Bz[icg], &w2[id2 + iv]);
 
  334       v2[icr + id3 + iv] -= mult_uv_i(&Bz[icg], &w2[id3 + iv]);
 
  335       v2[ici + id3 + iv] += mult_uv_r(&Bz[icg], &w2[id3 + iv]);
 
  336       v2[icr + id4 + iv] += mult_uv_i(&Bz[icg], &w2[id4 + iv]);
 
  337       v2[ici + id4 + iv] -= mult_uv_r(&Bz[icg], &w2[id4 + iv]);
 
  340       v2[icr + id1 + iv] += mult_uv_i(&Ex[icg], &w2[id2 + iv]);
 
  341       v2[ici + id1 + iv] -= mult_uv_r(&Ex[icg], &w2[id2 + iv]);
 
  342       v2[icr + id2 + iv] += mult_uv_i(&Ex[icg], &w2[id1 + iv]);
 
  343       v2[ici + id2 + iv] -= mult_uv_r(&Ex[icg], &w2[id1 + iv]);
 
  345       v2[icr + id3 + iv] -= mult_uv_i(&Ex[icg], &w2[id4 + iv]);
 
  346       v2[ici + id3 + iv] += mult_uv_r(&Ex[icg], &w2[id4 + iv]);
 
  347       v2[icr + id4 + iv] -= mult_uv_i(&Ex[icg], &w2[id3 + iv]);
 
  348       v2[ici + id4 + iv] += mult_uv_r(&Ex[icg], &w2[id3 + iv]);
 
  351       v2[icr + id1 + iv] -= mult_uv_r(&Ey[icg], &w2[id2 + iv]);
 
  352       v2[ici + id1 + iv] -= mult_uv_i(&Ey[icg], &w2[id2 + iv]);
 
  353       v2[icr + id2 + iv] += mult_uv_r(&Ey[icg], &w2[id1 + iv]);
 
  354       v2[ici + id2 + iv] += mult_uv_i(&Ey[icg], &w2[id1 + iv]);
 
  356       v2[icr + id3 + iv] += mult_uv_r(&Ey[icg], &w2[id4 + iv]);
 
  357       v2[ici + id3 + iv] += mult_uv_i(&Ey[icg], &w2[id4 + iv]);
 
  358       v2[icr + id4 + iv] -= mult_uv_r(&Ey[icg], &w2[id3 + iv]);
 
  359       v2[ici + id4 + iv] -= mult_uv_i(&Ey[icg], &w2[id3 + iv]);
 
  362       v2[icr + id1 + iv] += mult_uv_i(&Ez[icg], &w2[id1 + iv]);
 
  363       v2[ici + id1 + iv] -= mult_uv_r(&Ez[icg], &w2[id1 + iv]);
 
  364       v2[icr + id2 + iv] -= mult_uv_i(&Ez[icg], &w2[id2 + iv]);
 
  365       v2[ici + id2 + iv] += mult_uv_r(&Ez[icg], &w2[id2 + iv]);
 
  367       v2[icr + id3 + iv] -= mult_uv_i(&Ez[icg], &w2[id3 + iv]);
 
  368       v2[ici + id3 + iv] += mult_uv_r(&Ez[icg], &w2[id3 + iv]);
 
  369       v2[icr + id4 + iv] += mult_uv_i(&Ez[icg], &w2[id4 + iv]);
 
  370       v2[ici + id4 + iv] -= mult_uv_r(&Ez[icg], &w2[id4 + iv]);
 
  381   assert(w.
nex() == 1);
 
  385   int Ndf  = 2 * Nc * Nc;
 
  394   const double *w2 = w.
ptr(0);
 
  395   double       *v2 = v.
ptr(0);
 
  406   for (
int site = 0; site < Nvol; ++site) {
 
  407     int iv = Nvc * Nd * site;
 
  410     for (
int ic = 0; ic < Nc; ++ic) {
 
  413       int icg = ic * Nvc + ig;
 
  416       v2[icr + id1 + iv] -= mult_uv_i(&Bx[icg], &w2[id2 + iv]);
 
  417       v2[ici + id1 + iv] += mult_uv_r(&Bx[icg], &w2[id2 + iv]);
 
  418       v2[icr + id2 + iv] -= mult_uv_i(&Bx[icg], &w2[id1 + iv]);
 
  419       v2[ici + id2 + iv] += mult_uv_r(&Bx[icg], &w2[id1 + iv]);
 
  421       v2[icr + id3 + iv] -= mult_uv_i(&Bx[icg], &w2[id4 + iv]);
 
  422       v2[ici + id3 + iv] += mult_uv_r(&Bx[icg], &w2[id4 + iv]);
 
  423       v2[icr + id4 + iv] -= mult_uv_i(&Bx[icg], &w2[id3 + iv]);
 
  424       v2[ici + id4 + iv] += mult_uv_r(&Bx[icg], &w2[id3 + iv]);
 
  427       v2[icr + id1 + iv] += mult_uv_r(&By[icg], &w2[id2 + iv]);
 
  428       v2[ici + id1 + iv] += mult_uv_i(&By[icg], &w2[id2 + iv]);
 
  429       v2[icr + id2 + iv] -= mult_uv_r(&By[icg], &w2[id1 + iv]);
 
  430       v2[ici + id2 + iv] -= mult_uv_i(&By[icg], &w2[id1 + iv]);
 
  432       v2[icr + id3 + iv] += mult_uv_r(&By[icg], &w2[id4 + iv]);
 
  433       v2[ici + id3 + iv] += mult_uv_i(&By[icg], &w2[id4 + iv]);
 
  434       v2[icr + id4 + iv] -= mult_uv_r(&By[icg], &w2[id3 + iv]);
 
  435       v2[ici + id4 + iv] -= mult_uv_i(&By[icg], &w2[id3 + iv]);
 
  438       v2[icr + id1 + iv] -= mult_uv_i(&Bz[icg], &w2[id1 + iv]);
 
  439       v2[ici + id1 + iv] += mult_uv_r(&Bz[icg], &w2[id1 + iv]);
 
  440       v2[icr + id2 + iv] += mult_uv_i(&Bz[icg], &w2[id2 + iv]);
 
  441       v2[ici + id2 + iv] -= mult_uv_r(&Bz[icg], &w2[id2 + iv]);
 
  443       v2[icr + id3 + iv] -= mult_uv_i(&Bz[icg], &w2[id3 + iv]);
 
  444       v2[ici + id3 + iv] += mult_uv_r(&Bz[icg], &w2[id3 + iv]);
 
  445       v2[icr + id4 + iv] += mult_uv_i(&Bz[icg], &w2[id4 + iv]);
 
  446       v2[ici + id4 + iv] -= mult_uv_r(&Bz[icg], &w2[id4 + iv]);
 
  449       v2[icr + id1 + iv] += mult_uv_i(&Ex[icg], &w2[id4 + iv]);
 
  450       v2[ici + id1 + iv] -= mult_uv_r(&Ex[icg], &w2[id4 + iv]);
 
  451       v2[icr + id2 + iv] += mult_uv_i(&Ex[icg], &w2[id3 + iv]);
 
  452       v2[ici + id2 + iv] -= mult_uv_r(&Ex[icg], &w2[id3 + iv]);
 
  454       v2[icr + id3 + iv] += mult_uv_i(&Ex[icg], &w2[id2 + iv]);
 
  455       v2[ici + id3 + iv] -= mult_uv_r(&Ex[icg], &w2[id2 + iv]);
 
  456       v2[icr + id4 + iv] += mult_uv_i(&Ex[icg], &w2[id1 + iv]);
 
  457       v2[ici + id4 + iv] -= mult_uv_r(&Ex[icg], &w2[id1 + iv]);
 
  460       v2[icr + id1 + iv] -= mult_uv_r(&Ey[icg], &w2[id4 + iv]);
 
  461       v2[ici + id1 + iv] -= mult_uv_i(&Ey[icg], &w2[id4 + iv]);
 
  462       v2[icr + id2 + iv] += mult_uv_r(&Ey[icg], &w2[id3 + iv]);
 
  463       v2[ici + id2 + iv] += mult_uv_i(&Ey[icg], &w2[id3 + iv]);
 
  465       v2[icr + id3 + iv] -= mult_uv_r(&Ey[icg], &w2[id2 + iv]);
 
  466       v2[ici + id3 + iv] -= mult_uv_i(&Ey[icg], &w2[id2 + iv]);
 
  467       v2[icr + id4 + iv] += mult_uv_r(&Ey[icg], &w2[id1 + iv]);
 
  468       v2[ici + id4 + iv] += mult_uv_i(&Ey[icg], &w2[id1 + iv]);
 
  471       v2[icr + id1 + iv] += mult_uv_i(&Ez[icg], &w2[id3 + iv]);
 
  472       v2[ici + id1 + iv] -= mult_uv_r(&Ez[icg], &w2[id3 + iv]);
 
  473       v2[icr + id2 + iv] -= mult_uv_i(&Ez[icg], &w2[id4 + iv]);
 
  474       v2[ici + id2 + iv] += mult_uv_r(&Ez[icg], &w2[id4 + iv]);
 
  476       v2[icr + id3 + iv] += mult_uv_i(&Ez[icg], &w2[id1 + iv]);
 
  477       v2[ici + id3 + iv] -= mult_uv_r(&Ez[icg], &w2[id1 + iv]);
 
  478       v2[icr + id4 + iv] -= mult_uv_i(&Ez[icg], &w2[id2 + iv]);
 
  479       v2[ici + id4 + iv] += mult_uv_r(&Ez[icg], &w2[id2 + iv]);
 
  508                                        const int mu, 
const int nu)
 
  518   Field_G    v(Nvol, 1), v2(Nvol, 1);
 
SU(N) gauge field class in which a few functions are added for the SF. 
 
void scal(Field &x, const double a)
scal(x, a): x = a * x 
 
std::vector< GammaMatrix > m_SG
 
void ah_Field_G(Field_G &W, const int ex)
 
const double * ptr(const int jin, const int site, const int jex) const 
 
void mult_csw_dirac(Field_F &, const Field_F &)
 
int fetch_double_vector(const string &key, vector< double > &value) const 
 
void set(const int jin, const int site, const int jex, double v)
 
double m_phi[3]
SF boundary condition at t=0. 
 
void general(const char *format,...)
 
GammaMatrix get_GM(GMspecies spec)
 
void multadd_Field_Gnd(Field_G &W, const int ex, const Field_G &U1, const int ex1, const Field_G &U2, const int ex2, const double ff)
 
static const std::string class_name
 
Container of Field-type object. 
 
int fetch_double(const string &key, double &value) const 
 
void H(Field &, const Field &)
 
void mult_Field_Gdn(Field_G &W, const int ex, const Field_G &U1, const int ex1, const Field_G &U2, const int ex2)
 
int fetch_string(const string &key, string &value) const 
 
Wilson fermion operator with SF BC. 
 
double m_phipr[3]
SF boundary condition at t=Nt. 
 
void mult_isigma(Field_F &, const Field_F &, const int mu, const int nu)
 
void D(Field &, const Field &)
 
void set_parameters(const Parameters ¶ms)
 
Wilson-type fermion field. 
 
int sg_index(int mu, int nu)
 
void DdagD(Field &, const Field &)
 
void upper(Field_G_SF &, const Field_G &, const int, const int)
 
void mult_iGM(Field_F &y, const GammaMatrix &gm, const Field_F &x)
gamma matrix multiplication (i is multiplied) 
 
Bridge::VerboseLevel m_vl
 
void set_fieldstrength(Field_G &, const int, const int)
 
void mult_csw(Field_F &, const Field_F &)
 
Set of Gamma Matrices: basis class. 
 
std::vector< int > m_boundary
 
void mult_gm5(Field &v, const Field &w)
gamma_5 multiplication. [31 Mar 2017 H.Matsufuru] 
 
Fopr_Wilson_SF * m_fopr_w
 
std::vector< GammaMatrix > m_GM
 
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y 
 
void crucial(const char *format,...)
 
void(Fopr_Clover_SF::* m_csw)(Field_F &, const Field_F &)
 
void Ddag(Field &, const Field &)
 
void mult_csw_chiral(Field_F &, const Field_F &)
 
void D(Field &, const Field &)
 
void set_boundary_zero(Field &f)
 
Field_F_SF setzero
In order to set the boundary field to zero. 
 
Base class of fermion operator family. 
 
void lower(Field_G_SF &, const Field_G &, const int, const int)
 
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 init(std::string repr)
 
double flop_count()
this returns the number of floating point number operations. 
 
static VerboseLevel set_verbose_level(const std::string &str)
 
void set_parameters(const Parameters ¶ms)
 
void set_parameters(const Parameters ¶ms)
 
void multadd_Field_Gdn(Field_G &W, const int ex, const Field_G &U1, const int ex1, const Field_G &U2, const int ex2, const double ff)
 
void forward(Field &, const Field &, const int mu)
 
void mult_Field_Gnd(Field_G &W, const int ex, const Field_G &U1, const int ex1, const Field_G &U2, const int ex2)