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