Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fopr_Wilson_SF.cpp
Go to the documentation of this file.
1 
14 #include "fopr_Wilson_SF.h"
15 
16 #ifdef USE_PARAMETERS_FACTORY
17 #include "parameters_factory.h"
18 #endif
19 
20 using std::valarray;
21 
22 //- parameter entries
23 namespace {
24  void append_entry(Parameters& param)
25  {
26  param.Register_double("hopping_parameter", 0.0);
27  param.Register_int_vector("boundary_condition", std::valarray<int>());
28 
29  param.Register_string("verbose_level", "NULL");
30  }
31 
32 
33 #ifdef USE_PARAMETERS_FACTORY
34  bool init_param = ParametersFactory::Register("Fopr.Wilson_SF", append_entry);
35 #endif
36 }
37 //- end
38 
39 //- parameters class
41 //- end
42 
43 //====================================================================
45 {
46  const string str_vlevel = params.get_string("verbose_level");
47 
48  m_vl = vout.set_verbose_level(str_vlevel);
49 
50  //- fetch and check input parameters
51  double kappa;
52  valarray<int> bc;
53 
54  int err = 0;
55  err += params.fetch_double("hopping_parameter", kappa);
56  err += params.fetch_int_vector("boundary_condition", bc);
57 
58  if (err) {
59  vout.crucial(m_vl, "Fopr_Wilson_SF: fetch error, input parameter not found.\n");
60  abort();
61  }
62 
63  set_parameters(kappa, bc);
64 }
65 
66 
67 //====================================================================
68 void Fopr_Wilson_SF::set_parameters(const double kappa, const std::valarray<int> bc)
69 {
70  //- print input parameters
71  vout.general(m_vl, "Parameters of Fopr_Wilson_SF:\n");
72  vout.general(m_vl, " kappa = %8.4f\n", kappa);
73  for (int dir = 0; dir < m_Ndim; ++dir) {
74  vout.general(m_vl, " boundary[%d] = %2d\n", dir, bc[dir]);
75  }
76 
77  //- range check
78  // NB. kappa = 0 is allowed.
79  assert(bc.size() == m_Ndim);
80 
81  //- store values
82  m_kappa = kappa;
83 
84  m_boundary.resize(m_Ndim);
85  for (int mu = 0; mu < m_Ndim; ++mu) {
86  m_boundary[mu] = bc[mu];
87  }
88 
89  //- propagate parameters
91 }
92 
93 
94 //====================================================================
95 void Fopr_Wilson_SF::DdagD(Field& w, const Field& f)
96 {
97  Field w2(f.nin(), f.nvol(), f.nex());
98 
99  D(w2, f);
100  mult_gm5(w, w2);
101  D(w2, w);
102  mult_gm5(w, w2);
103 }
104 
105 
106 //====================================================================
107 void Fopr_Wilson_SF::Ddag(Field& w, const Field& f)
108 {
109  Field w2(f.nin(), f.nvol(), f.nex());
110 
111  mult_gm5(w, f);
112  D(w2, w);
113  mult_gm5(w, w2);
114 }
115 
116 
117 //====================================================================
118 void Fopr_Wilson_SF::H(Field& w, const Field& f)
119 {
120  Field w2(f.nin(), f.nvol(), f.nex());
121 
122  D(w2, f);
123  mult_gm5(w, w2);
124 }
125 
126 
127 //====================================================================
128 void Fopr_Wilson_SF::D(Field& w, const Field& f)
129 {
130  Field w2(f);
131 
133  m_fopr_w->D(w, w2);
135 }
136 
137 
138 //====================================================================
140 {
141  Field_F w = H(H(f));
142 
143  return w;
144 }
145 
146 
147 //====================================================================
149 {
150  Field_F w(f);
151 
152  w = (Field_F)mult_gm5((Field)w);
153  w = H(w);
154 
155  return w;
156 }
157 
158 
159 //====================================================================
161 {
162  Field_F w = D(f);
163 
164  w = (Field_F)mult_gm5((Field)w);
165 
166  return w;
167 }
168 
169 
170 //====================================================================
172 {
173  int Nvol = f.nvol();
174  int Nex = f.nex();
175  Field_F w(Nvol, Nex);
176 
177  Field_F w2(f);
178 
180 
181  // w = m_fopr_w->D(f);
182  m_fopr_w->set_mode("D");
183  w = (Field_F)m_fopr_w->mult(w2);
185 
186  return w;
187 }
188 
189 
190 //====================================================================
192 {
193  Field_F vt(w.nvol(), w.nex());
194  Field_F w2(w);
195 
197  vt = m_fopr_w->mult_gm5p(mu, w2);
199 
200  return vt;
201 }
202 
203 
204 //====================================================================
205 
210 /*
211 void Fopr_Wilson_SF::set_boundary_zero(Field& f){
212  if(comm->ipe(3)==0){
213  for(int site = 0; site < Svol; ++site){
214  for(int s = 0; s < m_Nd; ++s){
215  for(int cc = 0; cc < m_Nc2; ++cc){
216  f.set(cc+m_Nc2*s, site, 0, 0.0);
217  }
218  }
219  }
220  }
221 }
222 */
223 
224 //====================================================================
225 //============================================================END=====