Bridge++  Ver. 1.3.x
fopr_Wilson_SF.h
Go to the documentation of this file.
1 
15 #ifndef FOPR_WILSON_SF_INCLUDED
16 #define FOPR_WILSON_SF_INCLUDED
17 
18 #include "fopr_Wilson.h"
19 
20 #include "field_F_SF.h"
21 
22 //#include "index_lex.h"
23 //#include "shiftField_lex.h"
24 
25 #include "bridgeIO.h"
26 using Bridge::vout;
27 
28 //- parameters class
29 class Parameters_Fopr_Wilson_SF : virtual public Parameters
30 {
31  public:
33 };
34 
36 
60 class Fopr_Wilson_SF : public Fopr
61 {
62  public:
63  static const std::string class_name;
64 
65  private:
67  double m_kappa;
68  std::vector<int> m_boundary;
69  std::string m_mode;
70 
72  const Field_G *m_U;
73 
74  // Index_lex m_idx;
75  // ShiftField_lex m_shift;
76 
77  /*
79  Communicator* comm;
81  int Svol;
83  int m_Nc2;
84  */
85 
88 
89  public:
90 
92  {
93  m_Nvol = CommonParameters::Nvol();
94  m_Ndim = CommonParameters::Ndim();
95  m_Nc = CommonParameters::Nc();
96  m_Nd = CommonParameters::Nd();
97  m_NinF = 2 * m_Nc * m_Nd;
98 
99  m_boundary.resize(m_Ndim);
100  m_U = 0;
101  m_fopr_w = new Fopr_Wilson;
102 
103  /*
104  comm = Communicator::init();
105  m_Nc2 = 2*m_Nc;
106  int Nt = CommonParameters::Nt();
107  Svol=m_Nvol/Nt;
108  */
109  }
110 
111  void set_parameters(const Parameters& params);
112  void set_parameters(const double kappa, const std::vector<int> bc);
113 
114  void set_config(Field *U)
115  {
116  m_U = (Field_G *)U;
117  m_fopr_w->set_config(U);
118  }
119 
121  {
122  m_U = U.get();
123  m_fopr_w->set_config(U.get());
124  }
125 
127  {
128  delete m_fopr_w;
129  }
130 
131  void mult(Field& v, const Field& f)
132  {
133  if (m_mode == "D") {
134  D(v, f);
135  } else if (m_mode == "DdagD") {
136  DdagD(v, f);
137  } else if (m_mode == "Ddag") {
138  Ddag(v, f);
139  } else if (m_mode == "H") {
140  H(v, f);
141  } else {
142  vout.crucial(m_vl, "%s: mode undefined.\n", class_name.c_str());
143  exit(EXIT_FAILURE);
144  }
145  }
146 
147  void mult_dag(Field& v, const Field& f)
148  {
149  if (m_mode == "D") {
150  Ddag(v, f);
151  } else if (m_mode == "DdagD") {
152  DdagD(v, f);
153  } else if (m_mode == "Ddag") {
154  D(v, f);
155  } else if (m_mode == "H") {
156  H(v, f);
157  } else {
158  vout.crucial(m_vl, "%s: mode undefined.\n", class_name.c_str());
159  exit(EXIT_FAILURE);
160  }
161  }
162 
163  void set_mode(std::string mode)
164  {
165  m_mode = mode;
166  }
167 
168  std::string get_mode() const
169  {
170  return m_mode;
171  }
172 
173  void DdagD(Field&, const Field&);
174  void D(Field&, const Field&);
175  void Ddag(Field&, const Field&);
176  void H(Field&, const Field&);
177 
178  void mult_gm5(Field& v, const Field& w)
179  {
180  m_fopr_w->mult_gm5(v, w);
181  }
182 
183  void mult_gm5p(int mu, Field_F& v, const Field_F& w);
184 
185  int field_nvol() { return m_Nvol; }
186  int field_nin() { return 2 * m_Nc * m_Nd; }
187  int field_nex() { return 1; }
188 
190  double flop_count();
191 
192  private:
193  // A function to set the fermion field to zero at the t=0 boundary.
194  // void set_boundary_zero(Field&);
195 };
196 #endif
BridgeIO vout
Definition: bridgeIO.cpp:278
void DdagD(Field &, const Field &)
Fopr_Wilson * m_fopr_w
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...
Container of Field-type object.
Definition: field.h:39
Class for parameters.
Definition: parameters.h:38
void Ddag(Field &, const Field &)
Wilson fermion operator with SF BC.
void D(Field &, const Field &)
Wilson-type fermion field.
Definition: field_F.h:37
void set_config(Field *U)
setting pointer to the gauge configuration.
static const std::string class_name
std::string m_mode
const Field_G * m_U
SU(N) gauge field.
Definition: field_G.h:38
void set_config(Field *U)
setting pointer to the gauge configuration.
int field_nex()
returns the external d.o.f. for which the fermion operator is defined.
Bridge::VerboseLevel m_vl
Definition: fopr.h:113
pointer get() const
void H(Field &, const Field &)
double flop_count()
this returns the number of floating point operations.
void crucial(const char *format,...)
Definition: bridgeIO.cpp:48
void mult_gm5p(int mu, Field_F &v, const Field_F &w)
void set_config(unique_ptr< Field_G > &U)
void mult_gm5(Field &w, const Field &v)
void mult(Field &v, const Field &f)
multiplies fermion operator to a given field (2nd argument)
int field_nvol()
returns the volume for which the fermion operator is defined.
int field_nin()
returns the on-site d.o.f. for which the fermion operator is defined.
Field_F_SF set_zero
In order to set the boundary field to zero.
Base class of fermion operator family.
Definition: fopr.h:49
void mult_gm5(Field &v, const Field &w)
A class generated to add a function for the SF.
Definition: field_F_SF.h:33
void mult_dag(Field &v, const Field &f)
hermitian conjugate of mult(Field&, const Field&).
std::string get_mode() const
only for Fopr_Overlap
void set_parameters(const Parameters &params)