Bridge++  Version 1.4.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fopr_Clover.h
Go to the documentation of this file.
1 
14 #ifndef FOPR_CLOVER_INCLUDED
15 #define FOPR_CLOVER_INCLUDED
16 
17 #include "fopr_Wilson.h"
18 #include "fopr_CloverTerm.h"
19 
20 #include "IO/bridgeIO.h"
21 using Bridge::vout;
22 
24 
42 class Fopr_Clover : public Fopr
43 {
44  public:
45  static const std::string class_name;
46 
47  private:
48  double m_kappa;
49  double m_cSW;
50  std::vector<int> m_boundary;
51  std::string m_repr;
52  std::string m_mode;
53 
55 
58  const Field_G *m_U;
59 
60  // Fopr_Clover_imp* m_imp; //!< pimple prescription
62 
63  public:
64 
66  : Fopr()
67  {
68  init("Dirac");
69  }
70 
71  Fopr_Clover(std::string repr)
72  : Fopr()
73  {
74  init(repr);
75  }
76 
78  {
79  tidyup();
80  }
81 
82  void set_parameters(const Parameters& params);
83  void set_parameters(double kappa, double cSW, std::vector<int> bc);
84 
85  void set_config(Field *U)
86  {
87  m_U = (Field_G *)U;
88  m_fopr_w->set_config(U);
90  }
91 
93  {
94  m_U = U.get();
95  m_fopr_w->set_config(U.get());
97  }
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 
109  void mult(Field& v, const Field& f)
110  {
111  if (m_mode == "D") {
112  D(v, f);
113  } else if (m_mode == "Ddag") {
114  Ddag(v, f);
115  } else if (m_mode == "DdagD") {
116  DdagD(v, f);
117  } else if (m_mode == "DDdag") {
118  DDdag(v, f);
119  } else if (m_mode == "H") {
120  H(v, f);
121  } else {
122  vout.crucial(m_vl, "Error at %s: undefined mode = %s.\n", class_name.c_str(), m_mode.c_str());
123  exit(EXIT_FAILURE);
124  }
125  }
126 
127  void mult_dag(Field& v, const Field& f)
128  {
129  if (m_mode == "D") {
130  Ddag(v, f);
131  } else if (m_mode == "DdagD") {
132  DdagD(v, f);
133  } else if (m_mode == "Ddag") {
134  D(v, f);
135  } else if (m_mode == "H") {
136  H(v, f);
137  } else {
138  vout.crucial(m_vl, "Error at %s: undefined mode = %s.\n", class_name.c_str(), m_mode.c_str());
139  exit(EXIT_FAILURE);
140  }
141  }
142 
143  void D(Field&, const Field&);
144  void Ddag(Field&, const Field&);
145  void DdagD(Field&, const Field&);
146  void DDdag(Field&, const Field&);
147  void H(Field&, const Field&);
148 
149  void mult_gm5(Field& v, const Field& w)
150  {
151  m_fopr_w->mult_gm5(v, w);
152  }
153 
154  void mult_up(int mu, Field& v, const Field& w)
155  {
156  m_fopr_w->mult_up(mu, v, w);
157  }
158 
159  void mult_dn(int mu, Field& v, const Field& w)
160  {
161  m_fopr_w->mult_dn(mu, v, w);
162  }
163 
164  void mult_isigma(Field_F&, const Field_F&,
165  const int mu, const int nu);
166 
167  int field_nvol() { return m_Nvol; }
168  int field_nin() { return 2 * m_Nc * m_Nd; }
169  int field_nex() { return 1; }
170 
172  double flop_count();
173 
174  private:
175 
176  void init(std::string repr);
177  void tidyup();
178 };
179 #endif
Fopr_Clover(std::string repr)
Definition: fopr_Clover.h:71
void DDdag(Field &, const Field &)
BridgeIO vout
Definition: bridgeIO.cpp:495
void set_config(Field *U)
setting pointer to the gauge configuration.
void set_config(unique_ptr< Field_G > &U)
Definition: fopr_Clover.h:92
const Field_G * m_U
gauge configuration (pointer)
Definition: fopr_Clover.h:58
void mult_dn(int mu, Field &v, const Field &w)
Definition: fopr_Clover.h:159
void tidyup()
Definition: fopr_Clover.cpp:66
void set_config(Field *U)
setting pointer to the gauge configuration.
Container of Field-type object.
Definition: field.h:39
void mult(Field &v, const Field &f)
multiplies fermion operator to a given field (2nd argument)
Definition: fopr_Clover.h:109
void mult_gm5(Field &v, const Field &f)
gamma_5 multiplication. [31 Mar 2017 H.Matsufuru]
void DdagD(Field &, const Field &)
Class for parameters.
Definition: parameters.h:46
std::vector< int > m_boundary
boundary conditions
Definition: fopr_Clover.h:50
void H(Field &, const Field &)
std::string m_mode
mode of multiplication
Definition: fopr_Clover.h:52
Wilson-type fermion field.
Definition: field_F.h:37
Clover fermion operator.
Definition: fopr_Clover.h:42
std::string m_repr
gamma matrix representation
Definition: fopr_Clover.h:51
void mult_isigma(Field_F &, const Field_F &, const int mu, const int nu)
void set_config(Field *U)
setting pointer to the gauge configuration.
Definition: fopr_Clover.h:85
SU(N) gauge field.
Definition: field_G.h:38
double m_cSW
clover coefficient
Definition: fopr_Clover.h:49
double m_kappa
hopping parameter
Definition: fopr_Clover.h:48
Bridge::VerboseLevel m_vl
Definition: fopr.h:128
Fopr_Wilson * m_fopr_w
Wilson fermion kernel.
Definition: fopr_Clover.h:56
static const std::string class_name
Definition: fopr_Clover.h:45
void mult_up(int mu, Field &w, const Field &f)
nearest neighbor hopping term: temporary entry [H.Matsufuru]
pointer get() const
int field_nex()
returns the external d.o.f. for which the fermion operator is defined.
Definition: fopr_Clover.h:169
void mult_gm5(Field &v, const Field &w)
gamma_5 multiplication. [31 Mar 2017 H.Matsufuru]
Definition: fopr_Clover.h:149
void D(Field &, const Field &)
Field m_v1
Definition: fopr_Clover.h:61
int field_nin()
returns the on-site d.o.f. for which the fermion operator is defined.
Definition: fopr_Clover.h:168
void mult_up(int mu, Field &v, const Field &w)
nearest neighbor hopping term: temporary entry [H.Matsufuru]
Definition: fopr_Clover.h:154
void crucial(const char *format,...)
Definition: bridgeIO.cpp:178
Fopr_CloverTerm * m_fopr_csw
Clover term operator.
Definition: fopr_Clover.h:57
void mult_dag(Field &v, const Field &f)
hermitian conjugate of mult(Field&, const Field&).
Definition: fopr_Clover.h:127
int m_NinF
internal parameters
Definition: fopr_Clover.h:54
void Ddag(Field &, const Field &)
int field_nvol()
returns the volume for which the fermion operator is defined.
Definition: fopr_Clover.h:167
void mult_dn(int mu, Field &w, const Field &f)
Field m_v2
working field.
Definition: fopr_Clover.h:61
Base class of fermion operator family.
Definition: fopr.h:47
double flop_count()
this returns the number of floating point operations.
std::string get_mode() const
only for Fopr_Overlap
Definition: fopr_Clover.h:104
void init(std::string repr)
Definition: fopr_Clover.cpp:43
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
Definition: fopr_Clover.h:99
void set_parameters(const Parameters &params)
Definition: fopr_Clover.cpp:74