Bridge++  Ver. 1.1.x
 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_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 
46 //- parameters class
48 {
49  public:
51 };
52 //- end
53 
54 class Fopr_CloverTerm_eo : public Fopr
55 {
56 // This class return D_ee = 1-f_ee or D_oo = 1-f_oo
57  private:
59  double m_kappa, m_cSW;
60  std::valarray<int> m_boundary;
61  std::string m_repr;
62  std::string m_mode;
63 
65  std::valarray<GammaMatrix> m_GM, m_SG;
66 
67  void (Fopr_CloverTerm_eo::*m_mult) (Field&, const Field&);
68 
70 
71  const Field_G *m_Ueo;
73 
76 
78 
79  public:
80  Fopr_CloverTerm_eo(std::string repr)
81  : m_Nvol(CommonParameters::Nvol()),
82  m_Nvol2(m_Nvol / 2),
83  m_Ndim(CommonParameters::Ndim()),
84  m_Nc(CommonParameters::Nc()),
85  m_Nd(CommonParameters::Nd()),
86  m_Ndm2(m_Nd * m_Nd / 2),
87  m_T(m_Nvol, m_Ndm2)
88  {
89  init(repr);
90  }
91 
93 
94  void set_parameters(const Parameters& params);
95  void set_parameters(const double kappa, const double cSW,
96  const std::valarray<int> bc);
97  void set_config(Field *Ueo);
98 
99  void set_mode(std::string mode)
100  {
101  m_mode = mode;
102  }
103 
104  std::string get_mode() const
105  {
106  return m_mode;
107  }
108 
110  const Field mult(const Field& f)
111  {
112  Field v(f.nin(), f.nvol(), f.nex());
113 
114  mult(v, f);
115  return v;
116  }
117 
118  const Field mult_dag(const Field& f)
119  {
120  Field v(f.nin(), f.nvol(), f.nex());
121 
122  mult_dag(v, f);
123  return v;
124  }
125 
126  void mult(Field& v, const Field& f)
127  {
128  if (m_mode == "even") {
129  D(v, f, 0);
130  } else if (m_mode == "odd") {
131  D(v, f, 1);
132  } else {
133  vout.crucial("Fopr_CloverTerm_eo: undefined mode = %s\n", m_mode.c_str());
134  abort();
135  }
136  }
137 
138  void mult_dag(Field& v, const Field& f)
139  {
140  mult(v, f);
141  }
142 
143  void mult_isigma(Field_F&, const Field_F&,
144  const int mu, const int nu);
145 
146  const Field D(const Field& f, const int ieo)
147  {
148  Field v(f.nin(), f.nvol(), f.nex());
149 
150  D(v, f, ieo);
151  return v;
152  }
153 
154  void D(Field& v, const Field& f, const int ieo);
155 
156  std::vector<double> csmatrix(const int&);
157 
158  int field_nvol() { return m_Nvol2; }
159  int field_nin() { return 2 * m_Nc * m_Nd; }
160  int field_nex() { return 1; }
161 
162  private:
163  void init(std::string repr);
164 
165  void set_csw();
166  void mult_csw(Field_F&, const Field_F&, const int ieo);
167  void set_fieldstrength(Field_G&, const int, const int);
168 
169  int sg_index(int mu, int nu) { return mu * m_Ndim + nu; }
170 };
171 #endif