16 #ifdef USE_PARAMETERS_FACTORY 
   29   bool init = Fopr::Factory_noarg::Register(
"Clover_SF", create_object);
 
   48 #ifdef USE_PARAMETERS_FACTORY 
   63   const std::string str_vlevel = params.
get_string(
"verbose_level");
 
   68   std::string         str_gmset_type;
 
   71   std::vector<double> phi, phipr;
 
   75   err_optional += params.
fetch_string(
"gamma_matrix_type", str_gmset_type);
 
   96                                     double *phi, 
double *phipr)
 
  102   for (
int mu = 0; mu < 
m_Ndim; ++mu) {
 
  115   assert(bc.size() == 
m_Ndim);
 
  121   for (
int i = 0; i < 3; ++i) {
 
  126   for (
int mu = 0; mu < 
m_Ndim; ++mu) {
 
  137   inline double mult_uv_r(
const double *u, 
const double *v)
 
  139     return u[0] * v[0] - u[1] * v[1]
 
  140            + u[2] * v[2] - u[3] * v[3]
 
  141            + u[4] * v[4] - u[5] * v[5];
 
  145   inline double mult_uv_i(
const double *u, 
const double *v)
 
  147     return u[0] * v[1] + u[1] * v[0]
 
  148            + u[2] * v[3] + u[3] * v[2]
 
  149            + u[4] * v[5] + u[5] * v[4];
 
  223   assert(f.
nex() == 1);
 
  236   assert(f.
nex() == 1);
 
  248   assert(f.
nex() == 1);
 
  259   assert(f.
nex() == 1);
 
  280                                  const int mu, 
const int nu)
 
  291   (this->*
m_csw)(v, w);
 
  298   assert(w.
nex() == 1);
 
  302   int Ndf  = 2 * Nc * Nc;
 
  311   const double *w2 = w.
ptr(0);
 
  312   double       *v2 = v.
ptr(0);
 
  323   for (
int site = 0; site < Nvol; ++site) {
 
  324     int iv = Nvc * Nd * site;
 
  327     for (
int ic = 0; ic < Nc; ++ic) {
 
  330       int icg = ic * Nvc + ig;
 
  333       v2[icr + id1 + iv] -= mult_uv_i(&Bx[icg], &w2[id2 + iv]);
 
  334       v2[ici + id1 + iv] += mult_uv_r(&Bx[icg], &w2[id2 + iv]);
 
  335       v2[icr + id2 + iv] -= mult_uv_i(&Bx[icg], &w2[id1 + iv]);
 
  336       v2[ici + id2 + iv] += mult_uv_r(&Bx[icg], &w2[id1 + iv]);
 
  338       v2[icr + id3 + iv] -= mult_uv_i(&Bx[icg], &w2[id4 + iv]);
 
  339       v2[ici + id3 + iv] += mult_uv_r(&Bx[icg], &w2[id4 + iv]);
 
  340       v2[icr + id4 + iv] -= mult_uv_i(&Bx[icg], &w2[id3 + iv]);
 
  341       v2[ici + id4 + iv] += mult_uv_r(&Bx[icg], &w2[id3 + iv]);
 
  344       v2[icr + id1 + iv] += mult_uv_r(&By[icg], &w2[id2 + iv]);
 
  345       v2[ici + id1 + iv] += mult_uv_i(&By[icg], &w2[id2 + iv]);
 
  346       v2[icr + id2 + iv] -= mult_uv_r(&By[icg], &w2[id1 + iv]);
 
  347       v2[ici + id2 + iv] -= mult_uv_i(&By[icg], &w2[id1 + iv]);
 
  349       v2[icr + id3 + iv] += mult_uv_r(&By[icg], &w2[id4 + iv]);
 
  350       v2[ici + id3 + iv] += mult_uv_i(&By[icg], &w2[id4 + iv]);
 
  351       v2[icr + id4 + iv] -= mult_uv_r(&By[icg], &w2[id3 + iv]);
 
  352       v2[ici + id4 + iv] -= mult_uv_i(&By[icg], &w2[id3 + iv]);
 
  355       v2[icr + id1 + iv] -= mult_uv_i(&Bz[icg], &w2[id1 + iv]);
 
  356       v2[ici + id1 + iv] += mult_uv_r(&Bz[icg], &w2[id1 + iv]);
 
  357       v2[icr + id2 + iv] += mult_uv_i(&Bz[icg], &w2[id2 + iv]);
 
  358       v2[ici + id2 + iv] -= mult_uv_r(&Bz[icg], &w2[id2 + iv]);
 
  360       v2[icr + id3 + iv] -= mult_uv_i(&Bz[icg], &w2[id3 + iv]);
 
  361       v2[ici + id3 + iv] += mult_uv_r(&Bz[icg], &w2[id3 + iv]);
 
  362       v2[icr + id4 + iv] += mult_uv_i(&Bz[icg], &w2[id4 + iv]);
 
  363       v2[ici + id4 + iv] -= mult_uv_r(&Bz[icg], &w2[id4 + iv]);
 
  366       v2[icr + id1 + iv] += mult_uv_i(&Ex[icg], &w2[id2 + iv]);
 
  367       v2[ici + id1 + iv] -= mult_uv_r(&Ex[icg], &w2[id2 + iv]);
 
  368       v2[icr + id2 + iv] += mult_uv_i(&Ex[icg], &w2[id1 + iv]);
 
  369       v2[ici + id2 + iv] -= mult_uv_r(&Ex[icg], &w2[id1 + iv]);
 
  371       v2[icr + id3 + iv] -= mult_uv_i(&Ex[icg], &w2[id4 + iv]);
 
  372       v2[ici + id3 + iv] += mult_uv_r(&Ex[icg], &w2[id4 + iv]);
 
  373       v2[icr + id4 + iv] -= mult_uv_i(&Ex[icg], &w2[id3 + iv]);
 
  374       v2[ici + id4 + iv] += mult_uv_r(&Ex[icg], &w2[id3 + iv]);
 
  377       v2[icr + id1 + iv] -= mult_uv_r(&Ey[icg], &w2[id2 + iv]);
 
  378       v2[ici + id1 + iv] -= mult_uv_i(&Ey[icg], &w2[id2 + iv]);
 
  379       v2[icr + id2 + iv] += mult_uv_r(&Ey[icg], &w2[id1 + iv]);
 
  380       v2[ici + id2 + iv] += mult_uv_i(&Ey[icg], &w2[id1 + iv]);
 
  382       v2[icr + id3 + iv] += mult_uv_r(&Ey[icg], &w2[id4 + iv]);
 
  383       v2[ici + id3 + iv] += mult_uv_i(&Ey[icg], &w2[id4 + iv]);
 
  384       v2[icr + id4 + iv] -= mult_uv_r(&Ey[icg], &w2[id3 + iv]);
 
  385       v2[ici + id4 + iv] -= mult_uv_i(&Ey[icg], &w2[id3 + iv]);
 
  388       v2[icr + id1 + iv] += mult_uv_i(&Ez[icg], &w2[id1 + iv]);
 
  389       v2[ici + id1 + iv] -= mult_uv_r(&Ez[icg], &w2[id1 + iv]);
 
  390       v2[icr + id2 + iv] -= mult_uv_i(&Ez[icg], &w2[id2 + iv]);
 
  391       v2[ici + id2 + iv] += mult_uv_r(&Ez[icg], &w2[id2 + iv]);
 
  393       v2[icr + id3 + iv] -= mult_uv_i(&Ez[icg], &w2[id3 + iv]);
 
  394       v2[ici + id3 + iv] += mult_uv_r(&Ez[icg], &w2[id3 + iv]);
 
  395       v2[icr + id4 + iv] += mult_uv_i(&Ez[icg], &w2[id4 + iv]);
 
  396       v2[ici + id4 + iv] -= mult_uv_r(&Ez[icg], &w2[id4 + iv]);
 
  407   assert(w.
nex() == 1);
 
  411   int Ndf  = 2 * Nc * Nc;
 
  420   const double *w2 = w.
ptr(0);
 
  421   double       *v2 = v.
ptr(0);
 
  432   for (
int site = 0; site < Nvol; ++site) {
 
  433     int iv = Nvc * Nd * site;
 
  436     for (
int ic = 0; ic < Nc; ++ic) {
 
  439       int icg = ic * Nvc + ig;
 
  442       v2[icr + id1 + iv] -= mult_uv_i(&Bx[icg], &w2[id2 + iv]);
 
  443       v2[ici + id1 + iv] += mult_uv_r(&Bx[icg], &w2[id2 + iv]);
 
  444       v2[icr + id2 + iv] -= mult_uv_i(&Bx[icg], &w2[id1 + iv]);
 
  445       v2[ici + id2 + iv] += mult_uv_r(&Bx[icg], &w2[id1 + iv]);
 
  447       v2[icr + id3 + iv] -= mult_uv_i(&Bx[icg], &w2[id4 + iv]);
 
  448       v2[ici + id3 + iv] += mult_uv_r(&Bx[icg], &w2[id4 + iv]);
 
  449       v2[icr + id4 + iv] -= mult_uv_i(&Bx[icg], &w2[id3 + iv]);
 
  450       v2[ici + id4 + iv] += mult_uv_r(&Bx[icg], &w2[id3 + iv]);
 
  453       v2[icr + id1 + iv] += mult_uv_r(&By[icg], &w2[id2 + iv]);
 
  454       v2[ici + id1 + iv] += mult_uv_i(&By[icg], &w2[id2 + iv]);
 
  455       v2[icr + id2 + iv] -= mult_uv_r(&By[icg], &w2[id1 + iv]);
 
  456       v2[ici + id2 + iv] -= mult_uv_i(&By[icg], &w2[id1 + iv]);
 
  458       v2[icr + id3 + iv] += mult_uv_r(&By[icg], &w2[id4 + iv]);
 
  459       v2[ici + id3 + iv] += mult_uv_i(&By[icg], &w2[id4 + iv]);
 
  460       v2[icr + id4 + iv] -= mult_uv_r(&By[icg], &w2[id3 + iv]);
 
  461       v2[ici + id4 + iv] -= mult_uv_i(&By[icg], &w2[id3 + iv]);
 
  464       v2[icr + id1 + iv] -= mult_uv_i(&Bz[icg], &w2[id1 + iv]);
 
  465       v2[ici + id1 + iv] += mult_uv_r(&Bz[icg], &w2[id1 + iv]);
 
  466       v2[icr + id2 + iv] += mult_uv_i(&Bz[icg], &w2[id2 + iv]);
 
  467       v2[ici + id2 + iv] -= mult_uv_r(&Bz[icg], &w2[id2 + iv]);
 
  469       v2[icr + id3 + iv] -= mult_uv_i(&Bz[icg], &w2[id3 + iv]);
 
  470       v2[ici + id3 + iv] += mult_uv_r(&Bz[icg], &w2[id3 + iv]);
 
  471       v2[icr + id4 + iv] += mult_uv_i(&Bz[icg], &w2[id4 + iv]);
 
  472       v2[ici + id4 + iv] -= mult_uv_r(&Bz[icg], &w2[id4 + iv]);
 
  475       v2[icr + id1 + iv] += mult_uv_i(&Ex[icg], &w2[id4 + iv]);
 
  476       v2[ici + id1 + iv] -= mult_uv_r(&Ex[icg], &w2[id4 + iv]);
 
  477       v2[icr + id2 + iv] += mult_uv_i(&Ex[icg], &w2[id3 + iv]);
 
  478       v2[ici + id2 + iv] -= mult_uv_r(&Ex[icg], &w2[id3 + iv]);
 
  480       v2[icr + id3 + iv] += mult_uv_i(&Ex[icg], &w2[id2 + iv]);
 
  481       v2[ici + id3 + iv] -= mult_uv_r(&Ex[icg], &w2[id2 + iv]);
 
  482       v2[icr + id4 + iv] += mult_uv_i(&Ex[icg], &w2[id1 + iv]);
 
  483       v2[ici + id4 + iv] -= mult_uv_r(&Ex[icg], &w2[id1 + iv]);
 
  486       v2[icr + id1 + iv] -= mult_uv_r(&Ey[icg], &w2[id4 + iv]);
 
  487       v2[ici + id1 + iv] -= mult_uv_i(&Ey[icg], &w2[id4 + iv]);
 
  488       v2[icr + id2 + iv] += mult_uv_r(&Ey[icg], &w2[id3 + iv]);
 
  489       v2[ici + id2 + iv] += mult_uv_i(&Ey[icg], &w2[id3 + iv]);
 
  491       v2[icr + id3 + iv] -= mult_uv_r(&Ey[icg], &w2[id2 + iv]);
 
  492       v2[ici + id3 + iv] -= mult_uv_i(&Ey[icg], &w2[id2 + iv]);
 
  493       v2[icr + id4 + iv] += mult_uv_r(&Ey[icg], &w2[id1 + iv]);
 
  494       v2[ici + id4 + iv] += mult_uv_i(&Ey[icg], &w2[id1 + iv]);
 
  497       v2[icr + id1 + iv] += mult_uv_i(&Ez[icg], &w2[id3 + iv]);
 
  498       v2[ici + id1 + iv] -= mult_uv_r(&Ez[icg], &w2[id3 + iv]);
 
  499       v2[icr + id2 + iv] -= mult_uv_i(&Ez[icg], &w2[id4 + iv]);
 
  500       v2[ici + id2 + iv] += mult_uv_r(&Ez[icg], &w2[id4 + iv]);
 
  502       v2[icr + id3 + iv] += mult_uv_i(&Ez[icg], &w2[id1 + iv]);
 
  503       v2[ici + id3 + iv] -= mult_uv_r(&Ez[icg], &w2[id1 + iv]);
 
  504       v2[icr + id4 + iv] -= mult_uv_i(&Ez[icg], &w2[id2 + iv]);
 
  505       v2[ici + id4 + iv] += mult_uv_r(&Ez[icg], &w2[id2 + iv]);
 
  534                                        const int mu, 
const int nu)
 
  544   Field_G    v(Nvol, 1), v2(Nvol, 1);
 
void Register_int_vector(const string &, const std::vector< int > &)
 
void scal(Field &x, const double a)
scal(x, a): x = a * x 
 
std::vector< GammaMatrix > m_SG
 
void Register_string(const string &, const string &)
 
const double * ptr(const int jin, const int site, const int jex) const 
 
void mult_csw_dirac(Field_F &, const Field_F &)
 
void set(const int jin, const int site, const int jex, double v)
 
void upper(Field_G_SF &, const Field_G &, const int, const int)
 
void set_parameters(const Parameters ¶ms)
 
void mult_Field_Gdn(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2)
 
void(Fopr_Clover_SF::* m_csw)(Field_F &, const Field_F &)
 
double m_phi[3]
SF boundary condition at t=0. 
 
void general(const char *format,...)
 
GammaMatrix get_GM(GMspecies spec)
 
static const std::string class_name
 
Container of Field-type object. 
 
void H(Field &, const Field &)
 
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 &)
 
Wilson-type fermion field. 
 
void ah_Field_G(Field_G &w, const int ex)
 
int sg_index(int mu, int nu)
 
void DdagD(Field &, const Field &)
 
Parameters_Fopr_Clover_SF()
 
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 mult_Field_Gnd(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2)
 
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)
 
int fetch_string(const string &key, string &val) const 
 
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)
 
Fopr_Wilson_SF * m_fopr_w
 
std::vector< GammaMatrix > m_GM
 
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)
 
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y 
 
void crucial(const char *format,...)
 
void Ddag(Field &, const Field &)
 
void mult_csw_chiral(Field_F &, const Field_F &)
 
void D(Field &, const Field &)
 
static bool Register(const std::string &realm, const creator_callback &cb)
 
void set_boundary_zero(Field &f)
 
void Register_double_vector(const string &, const std::vector< double > &)
 
void lower(Field_G_SF &, const Field_G &, const int, const int)
 
int fetch_double_vector(const string &key, std::vector< double > &val) const 
 
Field_F_SF setzero
In order to set the boundary field to zero. 
 
void Register_double(const string &, const double)
 
Base class of fermion operator family. 
 
void setpart_ex(int ex, const Field &w, int exw)
 
int fetch_double(const string &key, double &val) const 
 
string get_string(const string &key) 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)
 
int fetch_int_vector(const string &key, std::vector< int > &val) const 
 
void set_parameters(const Parameters ¶ms)
 
void forward(Field &, const Field &, const int mu)