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