Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
forceSmear_HYP.h
Go to the documentation of this file.
1 
14 #ifndef FORCESMEAR_HYP_INCLUDED
15 #define FORCESMEAR_HYP_INCLUDED
16 
17 #include "forceSmear.h"
18 
19 #include "shiftField_lex.h"
20 #include "bridge_complex.h"
21 
22 #include "projection.h"
23 
24 #include "bridgeIO.h"
25 using Bridge::vout;
26 
28 
35 //- parameters class
36 class Parameters_ForceSmear_HYP : virtual public Parameters
37 {
38  public:
40 };
41 //- end
42 
43 class ForceSmear_HYP : public ForceSmear
44 {
45  public:
46  static const std::string class_name;
47 
48  private:
49  int m_Ndim, m_Nvol;
50  double m_alpha1, m_alpha2, m_alpha3; // HYP smearing parameters
52  std::valarray<Field_G> m_U;
53  std::valarray<Field_G> m_v1, m_v2;
54  std::valarray<Field_G> m_Sigma3, m_Sigma2;
55  std::valarray<Field_G> m_iTheta3, m_iTheta2, m_iTheta1;
57 
58  public:
59 
61  : ForceSmear(), m_proj(proj)
62  {
63  init();
64  }
65 
66  // ~ForceSmear_HYP(){ };
67 
68  void set_parameters(const Parameters& params);
69 
70  // void set_parameters(const Parameters_Smear_HYP& params);
71  void set_parameters(double alpha1, double alpha2, double alpha3);
72 
73  void force_udiv(Field_G& Sigma, const Field_G& Sigma_p, const Field_G& U);
74 
75  // old interface
76  Field force_udiv(const Field_G& Sigma, const Field_G& U);
77 
78  private:
79  void init();
80 
81  void force_step3(Field_G&, const Field_G&);
82  void force_step2(Field_G&);
83  void force_step1(Field_G&);
84 
85  void force_each(Field_G&, const Field_G&, const Field_G&,
86  const Field_G&, const Field_G&, int mu, int nu);
87 
88  void smear_step1();
89  void smear_step2();
90 
91  void staple(Field_G&, const Field_G&, const Field_G&,
92  int mu, int nu);
93 
94  int idx1(int mu, int nu, int rho)
95  {
96  int sig = 6 - mu - nu - rho;
97 
98  if (sig > mu) --sig;
99  return mu + m_Ndim * sig;
100  }
101 
102  int idx1b(int mu, int nu, int rho)
103  {
104  if (nu > mu) --nu;
105  if (rho > mu) --rho;
106  if (rho > nu) --rho;
107  return mu + m_Ndim * (nu + (m_Ndim - 1) * rho);
108  }
109 
110  int idx2(int mu, int nu)
111  {
112  if (nu > mu) --nu;
113  return mu + m_Ndim * nu;
114  }
115 
116  int size1()
117  {
118  return m_Ndim * (m_Ndim - 1);
119  }
120 
121  int size1b()
122  {
123  return m_Ndim * (m_Ndim - 1) * (m_Ndim - 2);
124  }
125 
126  int size2()
127  {
128  return m_Ndim * (m_Ndim - 1);
129  }
130 };
131 #endif
Projection * m_proj
BridgeIO vout
Definition: bridgeIO.cpp:207
void set_parameters(const Parameters &params)
int idx2(int mu, int nu)
std::valarray< Field_G > m_v1
void force_step3(Field_G &, const Field_G &)
Container of Field-type object.
Definition: field.h:37
Class for parameters.
Definition: parameters.h:40
void force_each(Field_G &, const Field_G &, const Field_G &, const Field_G &, const Field_G &, int mu, int nu)
ShiftField_lex m_shift
void staple(Field_G &, const Field_G &, const Field_G &, int mu, int nu)
std::valarray< Field_G > m_iTheta3
Base class for force calculation of smeared operators.
Definition: forceSmear.h:37
std::valarray< Field_G > m_Sigma3
SU(N) gauge field.
Definition: field_G.h:36
Recursive calculation of HYP smeared fermion force.
std::valarray< Field_G > m_U
static const std::string class_name
std::valarray< Field_G > m_v2
int idx1(int mu, int nu, int rho)
int idx1b(int mu, int nu, int rho)
void force_udiv(Field_G &Sigma, const Field_G &Sigma_p, const Field_G &U)
base class for projection operator into gauge group.
Definition: projection.h:33
std::valarray< Field_G > m_iTheta2
ForceSmear_HYP(Projection *proj)
Methods to shift a field in the lexical site index.
void force_step1(Field_G &)
void force_step2(Field_G &)
std::valarray< Field_G > m_iTheta1
std::valarray< Field_G > m_Sigma2