Bridge++  Ver. 1.3.x
fopr_CloverTerm_eo.h
Go to the documentation of this file.
1 
14 #ifndef FOPR_CLOVERTERM_EO_INCLUDED
15 #define FOPR_CLOVERTERM_EO_INCLUDED
16 
17 #include <vector>
18 
19 #include "fopr_Wilson_eo.h"
20 #include "staples_eo.h"
21 
22 #include "gammaMatrixSet.h"
23 
24 #include "mat_SU_N.h"
25 #include "vec_SU_N.h"
26 
27 #include "bridgeIO.h"
28 using Bridge::vout;
29 
31 
55 //- parameters class
57 {
58  public:
60 };
61 //- end
62 
63 class Fopr_CloverTerm_eo : public Fopr
64 {
65  public:
66  static const std::string class_name;
67 
68 // This class return D_ee = 1-f_ee or D_oo = 1-f_oo
69  private:
70  double m_kappa;
71  double m_cSW;
72  std::vector<int> m_boundary;
73  std::string m_repr;
74  std::string m_mode;
75 
77  int m_Ndim;
78  int m_Nc, m_Nd, m_Ndm2;
79  int m_NinF;
80 
82  std::vector<GammaMatrix> m_GM, m_SG;
83 
84  void (Fopr_CloverTerm_eo::*m_mult)(Field&, const Field&);
85 
87 
88  const Field_G *m_Ueo;
89 
92 
97 
100 
102  std::vector<Field_G> m_T2;
103 
104  public:
105  Fopr_CloverTerm_eo(std::string repr)
106  : m_Nvol(CommonParameters::Nvol()),
107  m_Nvol2(m_Nvol / 2),
108  m_Ndim(CommonParameters::Ndim()),
109  m_Nc(CommonParameters::Nc()),
110  m_Nd(CommonParameters::Nd()),
111  m_Ndm2(m_Nd * m_Nd / 2),
112  m_T(m_Nvol, m_Ndm2)
113  {
114  init(repr);
115  }
116 
118  {
119  delete m_fee_inv;
120  delete m_foo_inv;
121  }
122 
123  void set_parameters(const Parameters& params);
124  void set_parameters(const double kappa, const double cSW,
125  const std::vector<int> bc);
126 
127  void set_config(Field *Ueo);
128 
130  {
131  set_config(Ueo.get());
132  }
133 
134  void set_mode(std::string mode)
135  {
136  m_mode = mode;
137  }
138 
139  std::string get_mode() const
140  {
141  return m_mode;
142  }
143 
145  const Field mult(const Field& f)
146  {
147  Field v(f.nin(), f.nvol(), f.nex());
148 
149  mult(v, f);
150  return v;
151  }
152 
153  const Field mult_dag(const Field& f)
154  {
155  Field v(f.nin(), f.nvol(), f.nex());
156 
157  mult_dag(v, f);
158  return v;
159  }
160 
161  void mult(Field& v, const Field& f)
162  {
163  if (m_mode == "even") {
164  D(v, f, 0);
165  } else if (m_mode == "odd") {
166  D(v, f, 1);
167  } else {
168  vout.crucial("%s: undefined mode = %s\n", class_name.c_str(), m_mode.c_str());
169  exit(EXIT_FAILURE);
170  }
171  }
172 
173  void mult_dag(Field& v, const Field& f)
174  {
175  mult(v, f);
176  }
177 
178  void mult_isigma(Field_F&, const Field_F&,
179  const int mu, const int nu);
180 
181  void D(Field& v, const Field& f, const int ieo);
182 
184  void D_dirac(Field& v, const Field& f, const int ieo);
185 
187  void D_chiral(Field& v, const Field& f, const int ieo);
188 
189  //const Field_F mult_csw_inv(const Field_F&, const int ieo);
190  //const Field_G trSigmaInv(const int mu, const int nu);
191  void trSigmaInv(Field_G&, const int mu, const int nu);
192 
193  void mult_csw_inv(Field&, const Field&, const int ieo);
194 
195  void mult_csw_inv_dirac(Field&, const Field&, const int ieo);
196 
197  void mult_csw_inv_chiral(Field&, const Field&, const int ieo);
198 
199  std::vector<double> csmatrix(const int&);
200 
201  int field_nvol() { return m_Nvol2; }
202  int field_nin() { return 2 * m_Nc * m_Nd; }
203  int field_nex() { return 1; }
204 
206  double flop_count();
207 
208  private:
209  void init(std::string repr);
210  void tidyup();
211 
212  void solve_csw_inv();
213 
214  void set_csw();
215 
217  void set_csw_dirac();
218 
220  void set_csw_chiral();
221 
222  void mult_csw(Field_F&, const Field_F&, const int ieo);
223  void set_fieldstrength(Field_G&, const int, const int);
224 
225  int sg_index(int mu, int nu) { return mu * m_Ndim + nu; }
226 };
227 #endif
void D_chiral(Field &v, const Field &f, const int ieo)
explicit implementation for Chiral representation (for Imp-version).
BridgeIO vout
Definition: bridgeIO.cpp:278
void init(std::string repr)
void(Fopr_CloverTerm_eo::* m_mult)(Field &, const Field &)
Container of Field-type object.
Definition: field.h:39
void D_dirac(Field &v, const Field &f, const int ieo)
explicit implementation for Dirac representation (for Imp-version).
void mult_dag(Field &v, const Field &f)
hermitian conjugate of mult(Field&, const Field&).
int nvol() const
Definition: field.h:116
Field_G m_T
m_T = 1 - kappa c_SW sigma F / 2
void set_csw_dirac()
explicit implementation for Dirac representation (for Imp-version).
const Field_G * m_Ueo
void set_config(unique_ptr< Field_G > &Ueo)
Class for parameters.
Definition: parameters.h:38
int field_nin()
returns the on-site d.o.f. for which the fermion operator is defined.
int field_nvol()
returns the volume for which the fermion operator is defined.
Even-odd site index.
Definition: index_eo.h:38
void mult_csw_inv_chiral(Field &, const Field &, const int ieo)
void set_parameters(const Parameters &params)
void mult_csw_inv(Field &, const Field &, const int ieo)
std::vector< GammaMatrix > m_SG
Wilson-type fermion field.
Definition: field_F.h:37
int nin() const
Definition: field.h:115
int field_nex()
returns the external d.o.f. for which the fermion operator is defined.
void D(Field &v, const Field &f, const int ieo)
SU(N) gauge field.
Definition: field_G.h:38
static const std::string class_name
void mult_isigma(Field_F &, const Field_F &, const int mu, const int nu)
void mult(Field &v, const Field &f)
multiplies fermion operator to a given field (2nd argument)
pointer get() const
std::vector< Field_G > m_T2
m_T2 is used in Org-version.
int nex() const
Definition: field.h:117
Common parameter class: provides parameters as singleton.
void set_fieldstrength(Field_G &, const int, const int)
void mult_csw(Field_F &, const Field_F &, const int ieo)
Fopr_CloverTerm_eo(std::string repr)
Methods to shift the even-odd field.
Definition: shiftField_eo.h:45
void crucial(const char *format,...)
Definition: bridgeIO.cpp:48
std::vector< GammaMatrix > m_GM
Gamma Matrix and Sigma_{mu,nu} = -i [Gamma_mu, Gamma_nu] /2.
void trSigmaInv(Field_G &, const int mu, const int nu)
std::vector< int > m_boundary
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
const Field mult(const Field &f)
return D = D^dag = 1-f_ee or 1-f_oo
std::string get_mode() const
only for Fopr_Overlap
const Field mult_dag(const Field &f)
Base class of fermion operator family.
Definition: fopr.h:49
void set_csw_chiral()
explicit implementation for Chiral representation (for Imp-version).
void mult_csw_inv_dirac(Field &, const Field &, const int ieo)
double flop_count()
retuns number of floating point number operations.
std::vector< double > csmatrix(const int &)
int sg_index(int mu, int nu)
ShiftField_eo m_shift_eo
void set_config(Field *Ueo)
setting pointer to the gauge configuration.