Bridge++  Ver. 1.3.x
fopr_Clover_SF.cpp
Go to the documentation of this file.
1 
14 #include "fopr_Clover_SF.h"
15 
16 #ifdef USE_PARAMETERS_FACTORY
17 #include "parameters_factory.h"
18 #endif
19 
20 
21 #ifdef USE_FACTORY
22 namespace {
23  Fopr *create_object()
24  {
25  return new Fopr_Clover_SF();
26  }
27 
28 
29  bool init = Fopr::Factory_noarg::Register("Clover_SF", create_object);
30 }
31 #endif
32 
33 //- parameter entries
34 namespace {
35  void append_entry(Parameters& param)
36  {
37  param.Register_string("gamma_matrix_type", "NULL");
38  param.Register_double("hopping_parameter", 0.0);
39  param.Register_double("clover_coefficient", 0.0);
40  param.Register_int_vector("boundary_condition", std::vector<int>());
41  param.Register_double_vector("phi", std::vector<double>());
42  param.Register_double_vector("phipr", std::vector<double>());
43 
44  param.Register_string("verbose_level", "NULL");
45  }
46 
47 
48 #ifdef USE_PARAMETERS_FACTORY
49  bool init_param = ParametersFactory::Register("Fopr.Clover_SF", append_entry);
50 #endif
51 }
52 //- end
53 
54 //- parameters class
56 //- end
57 
58 const std::string Fopr_Clover_SF::class_name = "Fopr_Clover_SF";
59 
60 //====================================================================
62 {
63  const std::string str_vlevel = params.get_string("verbose_level");
64 
65  m_vl = vout.set_verbose_level(str_vlevel);
66 
67  //- fetch and check input parameters
68  std::string str_gmset_type;
69  double kappa, cSW;
70  std::vector<int> bc;
71  std::vector<double> phi, phipr;
72 
73  int err = 0;
74  int err_optional = 0;
75  err_optional += params.fetch_string("gamma_matrix_type", str_gmset_type);
76  err += params.fetch_double("hopping_parameter", kappa);
77  err += params.fetch_double("clover_coefficient", cSW);
78  err += params.fetch_int_vector("boundary_condition", bc);
79  err += params.fetch_double_vector("phi", phi);
80  err += params.fetch_double_vector("phipr", phipr);
81 
82  if (err) {
83  vout.crucial(m_vl, "%s: fetch error, input parameter not found.\n", class_name.c_str());
84  exit(EXIT_FAILURE);
85  }
86 
87 
88  m_repr = str_gmset_type;
89 
90  set_parameters(kappa, cSW, bc, &phi[0], &phipr[0]);
91 }
92 
93 
94 //====================================================================
95 void Fopr_Clover_SF::set_parameters(double kappa, double cSW, std::vector<int> bc,
96  double *phi, double *phipr)
97 {
98  //- print input parameters
99  vout.general(m_vl, "Parameters of %s:\n", class_name.c_str());
100  vout.general(m_vl, " kappa = %8.4f\n", kappa);
101  vout.general(m_vl, " cSW = %8.4f\n", cSW);
102  for (int mu = 0; mu < m_Ndim; ++mu) {
103  vout.general(m_vl, " boundary[%d] = %2d\n", mu, bc[mu]);
104  }
105  vout.general(m_vl, " phi1 = %12.6f\n", phi[0]);
106  vout.general(m_vl, " phi2 = %12.6f\n", phi[1]);
107  vout.general(m_vl, " phi3 = %12.6f\n", phi[2]);
108  vout.general(m_vl, " phipr1= %12.6f\n", phipr[0]);
109  vout.general(m_vl, " phipr2= %12.6f\n", phipr[1]);
110  vout.general(m_vl, " phipr3= %12.6f\n", phipr[2]);
111 
112  //- range check
113  // NB. kappa,cSW == 0 is allowed.
114  // NB. phi,phipr == 0 is allowed.
115  assert(bc.size() == m_Ndim);
116 
117  //- store values
118  m_kappa = kappa;
119  m_cSW = cSW;
120 
121  for (int i = 0; i < 3; ++i) {
122  m_phi[i] = phi[i];
123  m_phipr[i] = phipr[i];
124  }
125 
126  for (int mu = 0; mu < m_Ndim; ++mu) {
127  m_boundary[mu] = bc[mu];
128  }
129 
130  //- propagate parameters
132 }
133 
134 
135 //====================================================================
136 namespace {
137  inline double mult_uv_r(const double *u, const double *v)
138  {
139  return u[0] * v[0] - u[1] * v[1]
140  + u[2] * v[2] - u[3] * v[3]
141  + u[4] * v[4] - u[5] * v[5];
142  }
143 
144 
145  inline double mult_uv_i(const double *u, const double *v)
146  {
147  return u[0] * v[1] + u[1] * v[0]
148  + u[2] * v[3] + u[3] * v[2]
149  + u[4] * v[5] + u[5] * v[4];
150  }
151 }
152 
153 //====================================================================
154 void Fopr_Clover_SF::init(std::string repr)
155 {
160  m_NinF = 2 * m_Nc * m_Nd;
161 
162  m_U = 0;
163 
164  m_repr = repr;
165 
166  m_boundary.resize(m_Ndim);
167  m_GM.resize(m_Ndim + 1);
168  m_SG.resize(m_Ndim * m_Ndim);
169 
170  GammaMatrixSet *gmset = GammaMatrixSet::New(m_repr);
171 
172  m_GM[0] = gmset->get_GM(gmset->GAMMA1);
173  m_GM[1] = gmset->get_GM(gmset->GAMMA2);
174  m_GM[2] = gmset->get_GM(gmset->GAMMA3);
175  m_GM[3] = gmset->get_GM(gmset->GAMMA4);
176  m_GM[4] = gmset->get_GM(gmset->GAMMA5);
177 
178  m_SG[sg_index(0, 1)] = gmset->get_GM(gmset->SIGMA12);
179  m_SG[sg_index(1, 2)] = gmset->get_GM(gmset->SIGMA23);
180  m_SG[sg_index(2, 0)] = gmset->get_GM(gmset->SIGMA31);
181  m_SG[sg_index(3, 0)] = gmset->get_GM(gmset->SIGMA41);
182  m_SG[sg_index(3, 1)] = gmset->get_GM(gmset->SIGMA42);
183  m_SG[sg_index(3, 2)] = gmset->get_GM(gmset->SIGMA43);
184 
185  m_SG[sg_index(1, 0)] = m_SG[sg_index(0, 1)].mult(-1);
186  m_SG[sg_index(2, 1)] = m_SG[sg_index(1, 2)].mult(-1);
187  m_SG[sg_index(0, 2)] = m_SG[sg_index(2, 0)].mult(-1);
188  m_SG[sg_index(0, 3)] = m_SG[sg_index(3, 0)].mult(-1);
189  m_SG[sg_index(1, 3)] = m_SG[sg_index(3, 1)].mult(-1);
190  m_SG[sg_index(2, 3)] = m_SG[sg_index(3, 2)].mult(-1);
191 
192  m_SG[sg_index(0, 0)] = gmset->get_GM(gmset->UNITY);
193  m_SG[sg_index(1, 1)] = gmset->get_GM(gmset->UNITY);
194  m_SG[sg_index(2, 2)] = gmset->get_GM(gmset->UNITY);
195  m_SG[sg_index(3, 3)] = gmset->get_GM(gmset->UNITY);
196  // these 4 gamma matrices are actually not used.
197 
198 
199  // m_fopr_w = new Fopr_Wilson_SF(repr);
200  // Dirac reps. only!
201  m_fopr_w = new Fopr_Wilson_SF();
202 
203  if (m_repr == "Dirac") {
205  // }else if(m_repr == "Chiral"){
206  // m_csw = &Fopr_Clover_SF::mult_csw_chiral;
207  }
208 
209  delete gmset;
210 }
211 
212 
213 //====================================================================
215 {
216  delete m_fopr_w;
217 }
218 
219 
220 //====================================================================
222 {
223  assert(f.nex() == 1);
224  Field w2(f.nin(), f.nvol(), 1);
225 
226  D(w2, f);
227  mult_gm5(w, w2);
228  D(w2, w);
229  mult_gm5(w, w2);
230 }
231 
232 
233 //====================================================================
234 void Fopr_Clover_SF::Ddag(Field& w, const Field& f)
235 {
236  assert(f.nex() == 1);
237  Field w2(f.nin(), f.nvol(), 1);
238 
239  mult_gm5(w, f);
240  D(w2, w);
241  mult_gm5(w, w2);
242 }
243 
244 
245 //====================================================================
246 void Fopr_Clover_SF::H(Field& w, const Field& f)
247 {
248  assert(f.nex() == 1);
249  Field w2(f.nin(), f.nvol(), 1);
250 
251  D(w2, f);
252  mult_gm5(w, w2);
253 }
254 
255 
256 //====================================================================
257 void Fopr_Clover_SF::D(Field& w, const Field& f)
258 {
259  assert(f.nex() == 1);
260  int Nvol = f.nvol();
261 
262  Field_F w2(Nvol, 1);
263 
264  // Field_F w3(f);
265  // setzero.set_boundary_zero(w3);
266  // m_fopr_w->D(w,w3);
267  // mult_csw(w2,w3);
268 
269  m_fopr_w->D(w, f);
270  mult_csw(w2, (Field_F)f);
271  axpy(w, -1.0, w2); // w -= (Field)w2;
273 
274 #pragma omp barrier
275 }
276 
277 
278 //====================================================================
280  const int mu, const int nu)
281 {
282  assert(mu != nu);
283 
284  mult_iGM(v, m_SG[sg_index(mu, nu)], w);
285 }
286 
287 
288 //====================================================================
290 {
291  (this->*m_csw)(v, w);
292 }
293 
294 
295 //====================================================================
297 {
298  assert(w.nex() == 1);
299 
300  int Nc = CommonParameters::Nc();
301  int Nvc = 2 * Nc;
302  int Ndf = 2 * Nc * Nc;
303  int Nd = CommonParameters::Nd();
304  int Nvol = w.nvol();
305 
306  int id1 = 0;
307  int id2 = Nvc;
308  int id3 = Nvc * 2;
309  int id4 = Nvc * 3;
310 
311  const double *w2 = w.ptr(0);
312  double *v2 = v.ptr(0);
313 
314  double *Bx = m_Bx.ptr(0);
315  double *By = m_By.ptr(0);
316  double *Bz = m_Bz.ptr(0);
317  double *Ex = m_Ex.ptr(0);
318  double *Ey = m_Ey.ptr(0);
319  double *Ez = m_Ez.ptr(0);
320 
321  v.set(0.0);
322 
323  for (int site = 0; site < Nvol; ++site) {
324  int iv = Nvc * Nd * site;
325  int ig = Ndf * site;
326 
327  for (int ic = 0; ic < Nc; ++ic) {
328  int icr = 2 * ic;
329  int ici = icr + 1;
330  int icg = ic * Nvc + ig;
331 
332  // isigma_23 * Bx
333  v2[icr + id1 + iv] -= mult_uv_i(&Bx[icg], &w2[id2 + iv]);
334  v2[ici + id1 + iv] += mult_uv_r(&Bx[icg], &w2[id2 + iv]);
335  v2[icr + id2 + iv] -= mult_uv_i(&Bx[icg], &w2[id1 + iv]);
336  v2[ici + id2 + iv] += mult_uv_r(&Bx[icg], &w2[id1 + iv]);
337 
338  v2[icr + id3 + iv] -= mult_uv_i(&Bx[icg], &w2[id4 + iv]);
339  v2[ici + id3 + iv] += mult_uv_r(&Bx[icg], &w2[id4 + iv]);
340  v2[icr + id4 + iv] -= mult_uv_i(&Bx[icg], &w2[id3 + iv]);
341  v2[ici + id4 + iv] += mult_uv_r(&Bx[icg], &w2[id3 + iv]);
342 
343  // isigma_31 * By
344  v2[icr + id1 + iv] += mult_uv_r(&By[icg], &w2[id2 + iv]);
345  v2[ici + id1 + iv] += mult_uv_i(&By[icg], &w2[id2 + iv]);
346  v2[icr + id2 + iv] -= mult_uv_r(&By[icg], &w2[id1 + iv]);
347  v2[ici + id2 + iv] -= mult_uv_i(&By[icg], &w2[id1 + iv]);
348 
349  v2[icr + id3 + iv] += mult_uv_r(&By[icg], &w2[id4 + iv]);
350  v2[ici + id3 + iv] += mult_uv_i(&By[icg], &w2[id4 + iv]);
351  v2[icr + id4 + iv] -= mult_uv_r(&By[icg], &w2[id3 + iv]);
352  v2[ici + id4 + iv] -= mult_uv_i(&By[icg], &w2[id3 + iv]);
353 
354  // isigma_12 * Bz
355  v2[icr + id1 + iv] -= mult_uv_i(&Bz[icg], &w2[id1 + iv]);
356  v2[ici + id1 + iv] += mult_uv_r(&Bz[icg], &w2[id1 + iv]);
357  v2[icr + id2 + iv] += mult_uv_i(&Bz[icg], &w2[id2 + iv]);
358  v2[ici + id2 + iv] -= mult_uv_r(&Bz[icg], &w2[id2 + iv]);
359 
360  v2[icr + id3 + iv] -= mult_uv_i(&Bz[icg], &w2[id3 + iv]);
361  v2[ici + id3 + iv] += mult_uv_r(&Bz[icg], &w2[id3 + iv]);
362  v2[icr + id4 + iv] += mult_uv_i(&Bz[icg], &w2[id4 + iv]);
363  v2[ici + id4 + iv] -= mult_uv_r(&Bz[icg], &w2[id4 + iv]);
364 
365  // isigma_41 * Ex
366  v2[icr + id1 + iv] += mult_uv_i(&Ex[icg], &w2[id2 + iv]);
367  v2[ici + id1 + iv] -= mult_uv_r(&Ex[icg], &w2[id2 + iv]);
368  v2[icr + id2 + iv] += mult_uv_i(&Ex[icg], &w2[id1 + iv]);
369  v2[ici + id2 + iv] -= mult_uv_r(&Ex[icg], &w2[id1 + iv]);
370 
371  v2[icr + id3 + iv] -= mult_uv_i(&Ex[icg], &w2[id4 + iv]);
372  v2[ici + id3 + iv] += mult_uv_r(&Ex[icg], &w2[id4 + iv]);
373  v2[icr + id4 + iv] -= mult_uv_i(&Ex[icg], &w2[id3 + iv]);
374  v2[ici + id4 + iv] += mult_uv_r(&Ex[icg], &w2[id3 + iv]);
375 
376  // isigma_42 * Ey
377  v2[icr + id1 + iv] -= mult_uv_r(&Ey[icg], &w2[id2 + iv]);
378  v2[ici + id1 + iv] -= mult_uv_i(&Ey[icg], &w2[id2 + iv]);
379  v2[icr + id2 + iv] += mult_uv_r(&Ey[icg], &w2[id1 + iv]);
380  v2[ici + id2 + iv] += mult_uv_i(&Ey[icg], &w2[id1 + iv]);
381 
382  v2[icr + id3 + iv] += mult_uv_r(&Ey[icg], &w2[id4 + iv]);
383  v2[ici + id3 + iv] += mult_uv_i(&Ey[icg], &w2[id4 + iv]);
384  v2[icr + id4 + iv] -= mult_uv_r(&Ey[icg], &w2[id3 + iv]);
385  v2[ici + id4 + iv] -= mult_uv_i(&Ey[icg], &w2[id3 + iv]);
386 
387  // isigma_43 * Ez
388  v2[icr + id1 + iv] += mult_uv_i(&Ez[icg], &w2[id1 + iv]);
389  v2[ici + id1 + iv] -= mult_uv_r(&Ez[icg], &w2[id1 + iv]);
390  v2[icr + id2 + iv] -= mult_uv_i(&Ez[icg], &w2[id2 + iv]);
391  v2[ici + id2 + iv] += mult_uv_r(&Ez[icg], &w2[id2 + iv]);
392 
393  v2[icr + id3 + iv] -= mult_uv_i(&Ez[icg], &w2[id3 + iv]);
394  v2[ici + id3 + iv] += mult_uv_r(&Ez[icg], &w2[id3 + iv]);
395  v2[icr + id4 + iv] += mult_uv_i(&Ez[icg], &w2[id4 + iv]);
396  v2[ici + id4 + iv] -= mult_uv_r(&Ez[icg], &w2[id4 + iv]);
397  }
398  }
399 
400  scal(v, m_kappa * m_cSW); // v *= m_kappa * m_cSW;
401 }
402 
403 
404 //====================================================================
406 {
407  assert(w.nex() == 1);
408 
409  int Nc = CommonParameters::Nc();
410  int Nvc = 2 * Nc;
411  int Ndf = 2 * Nc * Nc;
412  int Nd = CommonParameters::Nd();
413  int Nvol = w.nvol();
414 
415  int id1 = 0;
416  int id2 = Nvc;
417  int id3 = Nvc * 2;
418  int id4 = Nvc * 3;
419 
420  const double *w2 = w.ptr(0);
421  double *v2 = v.ptr(0);
422 
423  double *Bx = m_Bx.ptr(0);
424  double *By = m_By.ptr(0);
425  double *Bz = m_Bz.ptr(0);
426  double *Ex = m_Ex.ptr(0);
427  double *Ey = m_Ey.ptr(0);
428  double *Ez = m_Ez.ptr(0);
429 
430  v.set(0.0);
431 
432  for (int site = 0; site < Nvol; ++site) {
433  int iv = Nvc * Nd * site;
434  int ig = Ndf * site;
435 
436  for (int ic = 0; ic < Nc; ++ic) {
437  int icr = 2 * ic;
438  int ici = icr + 1;
439  int icg = ic * Nvc + ig;
440 
441  // isigma_23 * Bx
442  v2[icr + id1 + iv] -= mult_uv_i(&Bx[icg], &w2[id2 + iv]);
443  v2[ici + id1 + iv] += mult_uv_r(&Bx[icg], &w2[id2 + iv]);
444  v2[icr + id2 + iv] -= mult_uv_i(&Bx[icg], &w2[id1 + iv]);
445  v2[ici + id2 + iv] += mult_uv_r(&Bx[icg], &w2[id1 + iv]);
446 
447  v2[icr + id3 + iv] -= mult_uv_i(&Bx[icg], &w2[id4 + iv]);
448  v2[ici + id3 + iv] += mult_uv_r(&Bx[icg], &w2[id4 + iv]);
449  v2[icr + id4 + iv] -= mult_uv_i(&Bx[icg], &w2[id3 + iv]);
450  v2[ici + id4 + iv] += mult_uv_r(&Bx[icg], &w2[id3 + iv]);
451 
452  // isigma_31 * By
453  v2[icr + id1 + iv] += mult_uv_r(&By[icg], &w2[id2 + iv]);
454  v2[ici + id1 + iv] += mult_uv_i(&By[icg], &w2[id2 + iv]);
455  v2[icr + id2 + iv] -= mult_uv_r(&By[icg], &w2[id1 + iv]);
456  v2[ici + id2 + iv] -= mult_uv_i(&By[icg], &w2[id1 + iv]);
457 
458  v2[icr + id3 + iv] += mult_uv_r(&By[icg], &w2[id4 + iv]);
459  v2[ici + id3 + iv] += mult_uv_i(&By[icg], &w2[id4 + iv]);
460  v2[icr + id4 + iv] -= mult_uv_r(&By[icg], &w2[id3 + iv]);
461  v2[ici + id4 + iv] -= mult_uv_i(&By[icg], &w2[id3 + iv]);
462 
463  // isigma_12 * Bz
464  v2[icr + id1 + iv] -= mult_uv_i(&Bz[icg], &w2[id1 + iv]);
465  v2[ici + id1 + iv] += mult_uv_r(&Bz[icg], &w2[id1 + iv]);
466  v2[icr + id2 + iv] += mult_uv_i(&Bz[icg], &w2[id2 + iv]);
467  v2[ici + id2 + iv] -= mult_uv_r(&Bz[icg], &w2[id2 + iv]);
468 
469  v2[icr + id3 + iv] -= mult_uv_i(&Bz[icg], &w2[id3 + iv]);
470  v2[ici + id3 + iv] += mult_uv_r(&Bz[icg], &w2[id3 + iv]);
471  v2[icr + id4 + iv] += mult_uv_i(&Bz[icg], &w2[id4 + iv]);
472  v2[ici + id4 + iv] -= mult_uv_r(&Bz[icg], &w2[id4 + iv]);
473 
474  // isigma_41 * Ex
475  v2[icr + id1 + iv] += mult_uv_i(&Ex[icg], &w2[id4 + iv]);
476  v2[ici + id1 + iv] -= mult_uv_r(&Ex[icg], &w2[id4 + iv]);
477  v2[icr + id2 + iv] += mult_uv_i(&Ex[icg], &w2[id3 + iv]);
478  v2[ici + id2 + iv] -= mult_uv_r(&Ex[icg], &w2[id3 + iv]);
479 
480  v2[icr + id3 + iv] += mult_uv_i(&Ex[icg], &w2[id2 + iv]);
481  v2[ici + id3 + iv] -= mult_uv_r(&Ex[icg], &w2[id2 + iv]);
482  v2[icr + id4 + iv] += mult_uv_i(&Ex[icg], &w2[id1 + iv]);
483  v2[ici + id4 + iv] -= mult_uv_r(&Ex[icg], &w2[id1 + iv]);
484 
485  // isigma_42 * Ey
486  v2[icr + id1 + iv] -= mult_uv_r(&Ey[icg], &w2[id4 + iv]);
487  v2[ici + id1 + iv] -= mult_uv_i(&Ey[icg], &w2[id4 + iv]);
488  v2[icr + id2 + iv] += mult_uv_r(&Ey[icg], &w2[id3 + iv]);
489  v2[ici + id2 + iv] += mult_uv_i(&Ey[icg], &w2[id3 + iv]);
490 
491  v2[icr + id3 + iv] -= mult_uv_r(&Ey[icg], &w2[id2 + iv]);
492  v2[ici + id3 + iv] -= mult_uv_i(&Ey[icg], &w2[id2 + iv]);
493  v2[icr + id4 + iv] += mult_uv_r(&Ey[icg], &w2[id1 + iv]);
494  v2[ici + id4 + iv] += mult_uv_i(&Ey[icg], &w2[id1 + iv]);
495 
496  // isigma_43 * Ez
497  v2[icr + id1 + iv] += mult_uv_i(&Ez[icg], &w2[id3 + iv]);
498  v2[ici + id1 + iv] -= mult_uv_r(&Ez[icg], &w2[id3 + iv]);
499  v2[icr + id2 + iv] -= mult_uv_i(&Ez[icg], &w2[id4 + iv]);
500  v2[ici + id2 + iv] += mult_uv_r(&Ez[icg], &w2[id4 + iv]);
501 
502  v2[icr + id3 + iv] += mult_uv_i(&Ez[icg], &w2[id1 + iv]);
503  v2[ici + id3 + iv] -= mult_uv_r(&Ez[icg], &w2[id1 + iv]);
504  v2[icr + id4 + iv] -= mult_uv_i(&Ez[icg], &w2[id2 + iv]);
505  v2[ici + id4 + iv] += mult_uv_r(&Ez[icg], &w2[id2 + iv]);
506  }
507  }
508 
509  scal(v, m_kappa * m_cSW); // v *= m_kappa * m_cSW;
510 }
511 
512 
513 //====================================================================
515 {
516  set_fieldstrength(m_Bx, 1, 2);
517  set_fieldstrength(m_By, 2, 0);
518  set_fieldstrength(m_Bz, 0, 1);
519  set_fieldstrength(m_Ex, 3, 0);
520  set_fieldstrength(m_Ey, 3, 1);
521  set_fieldstrength(m_Ez, 3, 2);
522 }
523 
524 
532 //====================================================================
534  const int mu, const int nu)
535 {
536  int Nvol = CommonParameters::Nvol();
537 
538  Staples_SF staple;
539 
540  staple.set_parameters(m_phi, m_phipr);
541 
542  Field_G_SF Cup(Nvol, 1), Cdn(Nvol, 1);
543  Field_G_SF Umu(Nvol, 1);
544  Field_G v(Nvol, 1), v2(Nvol, 1);
545 
546  staple.upper(Cup, *m_U, mu, nu);
547  staple.lower(Cdn, *m_U, mu, nu);
548  Umu.setpart_ex(0, *m_U, mu);
549 
550  mult_Field_Gnd(Fst, 0, Umu, 0, Cup, 0);
551  multadd_Field_Gnd(Fst, 0, Umu, 0, Cdn, 0, -1.0);
552 
553  mult_Field_Gdn(v, 0, Cup, 0, Umu, 0);
554  multadd_Field_Gdn(v, 0, Cdn, 0, Umu, 0, -1.0);
555 
556  m_shift.forward(v2, v, mu);
557 
558  axpy(Fst, 1.0, v2); // Fst += v2;
559 
560  ah_Field_G(Fst, 0);
561  scal(Fst, 0.25); // Fst *= 0.25;
562 }
563 
564 
565 //====================================================================
567 {
568  //- Counting of floating point operations.
569  // not implemented, yet.
570 
571  double flop = 0.0;
572 
573  return flop;
574 }
575 
576 
577 //====================================================================
578 //============================================================END=====
void Register_int_vector(const string &, const std::vector< int > &)
Definition: parameters.cpp:344
void scal(Field &x, const double a)
scal(x, a): x = a * x
Definition: field.cpp:282
std::vector< GammaMatrix > m_SG
BridgeIO vout
Definition: bridgeIO.cpp:278
void Register_string(const string &, const string &)
Definition: parameters.cpp:351
const double * ptr(const int jin, const int site, const int jex) const
Definition: field.h:133
void mult_csw_dirac(Field_F &, const Field_F &)
void set(const int jin, const int site, const int jex, double v)
Definition: field.h:155
void upper(Field_G_SF &, const Field_G &, const int, const int)
Definition: staples_SF.cpp:860
void set_parameters(const Parameters &params)
Definition: staples_SF.cpp:62
void mult_Field_Gdn(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2)
void(Fopr_Clover_SF::* m_csw)(Field_F &, const Field_F &)
double m_phi[3]
SF boundary condition at t=0.
ShiftField_lex m_shift
void general(const char *format,...)
Definition: bridgeIO.cpp:65
GammaMatrix get_GM(GMspecies spec)
static const std::string class_name
Container of Field-type object.
Definition: field.h:39
void H(Field &, const Field &)
int nvol() const
Definition: field.h:116
std::string m_repr
Class for parameters.
Definition: parameters.h:38
Wilson fermion operator with SF BC.
double m_phipr[3]
SF boundary condition at t=Nt.
void mult_isigma(Field_F &, const Field_F &, const int mu, const int nu)
void D(Field &, const Field &)
Wilson-type fermion field.
Definition: field_F.h:37
int nin() const
Definition: field.h:115
void ah_Field_G(Field_G &w, const int ex)
int sg_index(int mu, int nu)
void DdagD(Field &, const Field &)
SU(N) gauge field.
Definition: field_G.h:38
void multadd_Field_Gdn(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2, const double ff)
void mult_Field_Gnd(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2)
void mult_iGM(Field_F &y, const GammaMatrix &gm, const Field_F &x)
gamma matrix multiplication (i is multiplied)
Bridge::VerboseLevel m_vl
Definition: fopr.h:113
void set_fieldstrength(Field_G &, const int, const int)
int fetch_string(const string &key, string &val) const
Definition: parameters.cpp:194
void mult_csw(Field_F &, const Field_F &)
Set of Gamma Matrices: basis class.
int nex() const
Definition: field.h:117
std::vector< int > m_boundary
void mult_gm5(Field &v, const Field &w)
Fopr_Wilson_SF * m_fopr_w
std::vector< GammaMatrix > m_GM
void multadd_Field_Gnd(Field_G &w, const int ex, const Field_G &u1, const int ex1, const Field_G &u2, const int ex2, const double ff)
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
Definition: field.cpp:168
void crucial(const char *format,...)
Definition: bridgeIO.cpp:48
const Field_G * m_U
void Ddag(Field &, const Field &)
void mult_csw_chiral(Field_F &, const Field_F &)
void D(Field &, const Field &)
static bool Register(const std::string &realm, const creator_callback &cb)
void set_boundary_zero(Field &f)
Definition: field_F_SF.h:56
void Register_double_vector(const string &, const std::vector< double > &)
Definition: parameters.cpp:337
void lower(Field_G_SF &, const Field_G &, const int, const int)
Definition: staples_SF.cpp:903
int fetch_double_vector(const string &key, std::vector< double > &val) const
Definition: parameters.cpp:158
Field_F_SF setzero
In order to set the boundary field to zero.
void Register_double(const string &, const double)
Definition: parameters.cpp:323
Base class of fermion operator family.
Definition: fopr.h:49
void setpart_ex(int ex, const Field &w, int exw)
Definition: field.h:177
int fetch_double(const string &key, double &val) const
Definition: parameters.cpp:124
string get_string(const string &key) const
Definition: parameters.cpp:87
void init(std::string repr)
double flop_count()
this returns the number of floating point number operations.
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:28
void set_parameters(const Parameters &params)
int fetch_int_vector(const string &key, std::vector< int > &val) const
Definition: parameters.cpp:176
void set_parameters(const Parameters &params)
void forward(Field &, const Field &, const int mu)