Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fopr_Clover_SF.h
Go to the documentation of this file.
1 
14 #ifndef FOPR_CLOVER_SF_INCLUDED
15 #define FOPR_CLOVER_SF_INCLUDED
16 
17 #include "fopr_Wilson_SF.h"
18 #include "staples_SF.h"
19 
20 #include "shiftField_lex.h"
21 #include "gammaMatrixSet.h"
22 
23 #include "bridgeIO.h"
24 using Bridge::vout;
25 
27 
40 //- parameters class
41 class Parameters_Fopr_Clover_SF : virtual public Parameters
42 {
43  public:
45 };
46 //- end
47 
48 class Fopr_Clover_SF : public Fopr
49 {
50  public:
51  static const std::string class_name;
52 
53  private:
55  double m_kappa, m_cSW;
56  std::valarray<int> m_boundary;
57  std::string m_repr;
58  std::string m_mode;
59 
60  void (Fopr_Clover_SF::*m_csw)(Field_F &, const Field_F &);
61 
62  // Index_lex m_idx;
64  const Field_G *m_U;
66 
68  // Bx = -iF(1,2), By = -iF(2,1), -iBz = F(0,1)
69  // Ex = -iF(4,0), Ey = -iF(4,1), Ez = -iF(4,2)
70 
71  std::valarray<GammaMatrix> m_GM, m_SG;
72 
74  double m_phi[3];
76  double m_phipr[3];
77 
80 
81  public:
83  {
84  init("Dirac");
85  }
86 
87  /*
88  Fopr_Clover_SF(std::string repr){
89  init(repr);
90  }
91  */
92 
94  {
95  tidyup();
96  }
97 
98  void set_parameters(const Parameters& params);
99  void set_parameters(double kappa, double cSW, std::valarray<int> bc,
100  double *phi, double *phipr);
101 
102  void set_config(Field *U)
103  {
104  m_U = (Field_G *)U;
105  m_fopr_w->set_config(U);
106 
107  set_csw();
108  }
109 
110  void set_mode(std::string mode)
111  {
112  m_mode = mode;
113  }
114 
115  std::string get_mode() const
116  {
117  return m_mode;
118  }
119 
120  const Field mult(const Field& f)
121  {
122  Field v(f.nin(), f.nvol(), f.nex());
123 
124  mult(v, f);
125  return v;
126  }
127 
128  const Field mult_dag(const Field& f)
129  {
130  Field v(f.nin(), f.nvol(), f.nex());
131 
132  mult_dag(v, f);
133  return v;
134  }
135 
136  void mult(Field& v, const Field& f)
137  {
138  if (m_mode == "D") {
139  D(v, f);
140  } else if (m_mode == "DdagD") {
141  DdagD(v, f);
142  } else if (m_mode == "Ddag") {
143  Ddag(v, f);
144  } else if (m_mode == "H") {
145  H(v, f);
146  } else {
147  vout.crucial(m_vl, "Fopr_Clover_SF: undefined mode = %s.\n", m_mode.c_str());
148  abort();
149  }
150  }
151 
152  void mult_dag(Field& v, const Field& f)
153  {
154  if (m_mode == "D") {
155  Ddag(v, f);
156  } else if (m_mode == "DdagD") {
157  DdagD(v, f);
158  } else if (m_mode == "Ddag") {
159  D(v, f);
160  } else if (m_mode == "H") {
161  H(v, f);
162  } else {
163  vout.crucial(m_vl, "Fopr_Clover_SF: undefined mode = %s.\n", m_mode.c_str());
164  abort();
165  }
166  }
167 
168  const Field_F DdagD(const Field_F&);
169  const Field_F D(const Field_F&);
170  const Field_F Ddag(const Field_F&);
171  const Field_F H(const Field_F&);
172 
173  const Field mult_gm5(const Field& w)
174  {
175  return m_fopr_w->mult_gm5(w);
176  }
177 
178  void DdagD(Field&, const Field&);
179  void D(Field&, const Field&);
180  void Ddag(Field&, const Field&);
181  void H(Field&, const Field&);
182 
183  void mult_gm5(Field& v, const Field& w)
184  {
185  m_fopr_w->mult_gm5(v, w);
186  }
187 
188  void mult_isigma(Field_F&, const Field_F&,
189  const int mu, const int nu);
190 
191  int field_nvol() { return m_Nvol; }
192  int field_nin() { return 2 * m_Nc * m_Nd; }
193  int field_nex() { return 1; }
194 
195  private:
196  void init(std::string repr);
197  void tidyup();
198 
199  void set_csw();
200  void mult_csw(Field_F&, const Field_F&);
201  void set_fieldstrength(Field_G&, const int, const int);
202 
203  void mult_csw_dirac(Field_F&, const Field_F&);
204  void mult_csw_chiral(Field_F&, const Field_F&);
205 
206  int sg_index(int mu, int nu) { return mu * m_Ndim + nu; }
207 };
208 #endif
BridgeIO vout
Definition: bridgeIO.cpp:207
Clover fermion operator.
void mult_csw_dirac(Field_F &, const Field_F &)
const Field_F D(const Field_F &)
double m_phi[3]
SF boundary condition at t=0.
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
ShiftField_lex m_shift
static const std::string class_name
Container of Field-type object.
Definition: field.h:37
int field_nin()
returns the on-site d.o.f. for which the fermion operator is defined.
const Field mult_gm5(const Field &w)
int nvol() const
Definition: field.h:101
void set_config(Field *U)
setting pointer to the gauge configuration.
std::string m_repr
const Field_F Ddag(const Field_F &)
Class for parameters.
Definition: parameters.h:40
const Field mult(const Field &f)
multiplies fermion operator to a given field and returns the resultant field.
std::string m_mode
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)
Wilson-type fermion field.
Definition: field_F.h:37
void set_config(Field *U)
setting pointer to the gauge configuration.
const Field_F DdagD(const Field_F &)
int nin() const
Definition: field.h:100
int sg_index(int mu, int nu)
int field_nex()
returns the external d.o.f. for which the fermion operator is defined.
SU(N) gauge field.
Definition: field_G.h:36
Bridge::VerboseLevel m_vl
Definition: fopr.h:99
std::string get_mode() const
void set_fieldstrength(Field_G &, const int, const int)
void mult_csw(Field_F &, const Field_F &)
int nex() const
Definition: field.h:102
void mult_gm5(Field &v, const Field &w)
Fopr_Wilson_SF * m_fopr_w
void crucial(const char *format,...)
Definition: bridgeIO.cpp:26
std::valarray< GammaMatrix > m_GM
const Field_G * m_U
const Field_F H(const Field_F &)
void(Fopr_Clover_SF::* m_csw)(Field_F &, const Field_F &)
void mult(Field &v, const Field &f)
multiplies fermion operator to a given field (2nd argument)
void mult_csw_chiral(Field_F &, const Field_F &)
std::valarray< GammaMatrix > m_SG
std::valarray< int > m_boundary
const Field mult_dag(const Field &f)
hermitian conjugate of mult(const Field&amp;).
Field_F_SF setzero
In order to set the boundary field to zero.
Methods to shift a field in the lexical site index.
const Field mult_gm5(const Field &w)
int field_nvol()
returns the volume for which the fermion operator is defined.
void mult_dag(Field &v, const Field &f)
hermitian conjugate of mult(Field&amp;, const Field&amp;).
Base class of fermion operator family.
Definition: fopr.h:39
void init(std::string repr)
A class generated to add a function for the SF.
Definition: field_F_SF.h:33
void set_parameters(const Parameters &params)