Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fopr_Clover_Isochemical.h
Go to the documentation of this file.
1 
14 #ifndef FOPR_CLOVER_ISOCHEMICAL_INCLUDED
15 #define FOPR_CLOVER_ISOCHEMICAL_INCLUDED
16 
18 #include "fopr_CloverTerm.h"
19 
20 #include "bridgeIO.h"
21 using Bridge::vout;
22 
24 
33 //- parameters class
35 {
36  public:
38 };
39 //- end
40 
42 {
43  private:
44  double m_kappa;
45  double m_cSW;
46  double m_mu;
47  std::valarray<int> m_boundary;
48  std::string m_repr;
49  std::string m_mode;
50 
52 
55 
56  const Field_G *m_U;
57 
58  public:
60  : Fopr()
61  {
62  init("Dirac");
63  }
64 
65  Fopr_Clover_Isochemical(std::string repr)
66  : Fopr()
67  {
68  init(repr);
69  }
70 
72  {
73  tidyup();
74  }
75 
76  void set_parameters(const Parameters& params);
77  void set_parameters(double kappa, double cSW, double mu, std::valarray<int> bc);
78 
79  void set_config(Field *U);
80 
81  void set_mode(std::string mode)
82  {
83  m_mode = mode;
84  }
85 
86  std::string get_mode() const
87  {
88  return m_mode;
89  }
90 
91  const Field mult(const Field& f)
92  {
93  Field v(f.nin(), f.nvol(), f.nex());
94 
95  mult(v, f);
96  return v;
97  }
98 
99  const Field mult_dag(const Field& f)
100  {
101  Field v(f.nin(), f.nvol(), f.nex());
102 
103  mult_dag(v, f);
104  return v;
105  }
106 
107  void mult(Field& v, const Field& f)
108  {
109  if (m_mode == "D") {
110  D(v, f);
111  } else if (m_mode == "DdagD") {
112  DdagD(v, f);
113  } else if (m_mode == "Ddag") {
114  Ddag(v, f);
115  } else if (m_mode == "H") {
116  H(v, f);
117  } else {
118  vout.crucial(m_vl, "Fopr_Clover_Isochemical: undefined mode = %s.\n", m_mode.c_str());
119  abort();
120  }
121  }
122 
123  void mult_dag(Field& v, const Field& f)
124  {
125  if (m_mode == "D") {
126  Ddag(v, f);
127  } else if (m_mode == "DdagD") {
128  DdagD(v, f);
129  } else if (m_mode == "Ddag") {
130  D(v, f);
131  } else if (m_mode == "H") {
132  Hdag(v, f);
133  } else {
134  vout.crucial(m_vl, "Fopr_Clover_Isochemical: undefined mode = %s.\n", m_mode.c_str());
135  abort();
136  }
137  }
138 
139  void DdagD(Field&, const Field&);
140  void D(Field&, const Field&);
141  void Ddag(Field&, const Field&);
142  void H(Field&, const Field&);
143  void Hdag(Field&, const Field&);
144 
145  void mult_gm5(Field& v, const Field& w)
146  {
147  m_fopr_w->mult_gm5(v, w);
148  }
149 
150  const Field mult_gm5(const Field& w)
151  {
152  return m_fopr_w->mult_gm5(w);
153  }
154 
155  void mult_up(int mu, Field& v, const Field& w)
156  {
157  m_fopr_w->mult_up(mu, v, w);
158  }
159 
160  void mult_dn(int mu, Field& v, const Field& w)
161  {
162  m_fopr_w->mult_dn(mu, v, w);
163  }
164 
165  void mult_isigma(Field_F&, const Field_F&,
166  const int mu, const int nu);
167 
168  int field_nvol() { return m_Nvol; }
169  int field_nin() { return 2 * m_Nc * m_Nd; }
170  int field_nex() { return 1; }
171 
172  private:
173  void init(std::string repr);
174  void tidyup();
175 };
176 #endif