Bridge++  Ver. 2.0.2
fopr_Clover_SF.cpp
Go to the documentation of this file.
1 
14 #include "fopr_Clover_SF.h"
15 
17 #include "lib/Field/field_SF.h"
18 
19 
20 #ifdef USE_FACTORY_AUTOREGISTER
21 namespace {
22  bool init = Fopr_Clover_SF::register_factory();
23 }
24 #endif
25 
26 const std::string Fopr_Clover_SF::class_name = "Fopr_Clover_SF";
27 
28 //====================================================================
29 namespace {
30  inline double mult_uv_r(const double *g, const double *w)
31  {
32  return g[0] * w[0] - g[1] * w[1]
33  + g[2] * w[2] - g[3] * w[3]
34  + g[4] * w[4] - g[5] * w[5];
35  }
36 
37 
38  inline double mult_uv_i(const double *g, const double *w)
39  {
40  return g[0] * w[1] + g[1] * w[0]
41  + g[2] * w[3] + g[3] * w[2]
42  + g[4] * w[5] + g[5] * w[4];
43  }
44 }
45 
46 //====================================================================
47 void Fopr_Clover_SF::init(const std::string repr)
48 {
50 
51  vout.general(m_vl, "%s: construction\n", class_name.c_str());
52 
57  m_NinF = 2 * m_Nc * m_Nd;
58 
59  m_U = 0;
60 
61  m_repr = repr;
62 
63  m_boundary.resize(m_Ndim);
64  m_GM.resize(m_Ndim + 1);
65  m_SG.resize(m_Ndim * m_Ndim);
66 
67  GammaMatrixSet *gmset = GammaMatrixSet::New(m_repr);
68 
69  m_GM[0] = gmset->get_GM(gmset->GAMMA1);
70  m_GM[1] = gmset->get_GM(gmset->GAMMA2);
71  m_GM[2] = gmset->get_GM(gmset->GAMMA3);
72  m_GM[3] = gmset->get_GM(gmset->GAMMA4);
73  m_GM[4] = gmset->get_GM(gmset->GAMMA5);
74 
75  m_SG[sg_index(0, 1)] = gmset->get_GM(gmset->SIGMA12);
76  m_SG[sg_index(1, 2)] = gmset->get_GM(gmset->SIGMA23);
77  m_SG[sg_index(2, 0)] = gmset->get_GM(gmset->SIGMA31);
78  m_SG[sg_index(3, 0)] = gmset->get_GM(gmset->SIGMA41);
79  m_SG[sg_index(3, 1)] = gmset->get_GM(gmset->SIGMA42);
80  m_SG[sg_index(3, 2)] = gmset->get_GM(gmset->SIGMA43);
81 
82  m_SG[sg_index(1, 0)] = m_SG[sg_index(0, 1)].mult(-1);
83  m_SG[sg_index(2, 1)] = m_SG[sg_index(1, 2)].mult(-1);
84  m_SG[sg_index(0, 2)] = m_SG[sg_index(2, 0)].mult(-1);
85  m_SG[sg_index(0, 3)] = m_SG[sg_index(3, 0)].mult(-1);
86  m_SG[sg_index(1, 3)] = m_SG[sg_index(3, 1)].mult(-1);
87  m_SG[sg_index(2, 3)] = m_SG[sg_index(3, 2)].mult(-1);
88 
89  m_SG[sg_index(0, 0)] = gmset->get_GM(gmset->UNITY);
90  m_SG[sg_index(1, 1)] = gmset->get_GM(gmset->UNITY);
91  m_SG[sg_index(2, 2)] = gmset->get_GM(gmset->UNITY);
92  m_SG[sg_index(3, 3)] = gmset->get_GM(gmset->UNITY);
93  // these 4 gamma matrices are actually not used.
94 
95  delete gmset;
96 
97  // m_fopr_w = new Fopr_Wilson_SF(repr);
98  // Dirac reps. only!
99  m_fopr_w = new Fopr_Wilson_SF();
100 
101  m_w1.reset(m_NinF, m_Nvol, 1);
102  m_w2.reset(m_NinF, m_Nvol, 1);
103 
104  vout.general(m_vl, "%s: construction finished.\n",
105  class_name.c_str());
106 }
107 
108 
109 //====================================================================
111 {
112  delete m_fopr_w;
113 }
114 
115 
116 //====================================================================
118 {
119  std::string vlevel;
120  if (!params.fetch_string("verbose_level", vlevel)) {
121  m_vl = vout.set_verbose_level(vlevel);
122  }
123 
124  //- fetch and check input parameters
125  std::string str_gmset_type;
126  double kappa, cSW;
127  std::vector<int> bc;
128  std::vector<double> phi, phipr;
129 
130  int err = 0;
131  int err_optional = 0;
132  err_optional += params.fetch_string("gamma_matrix_type", str_gmset_type);
133  err += params.fetch_double("hopping_parameter", kappa);
134  err += params.fetch_double("clover_coefficient", cSW);
135  err += params.fetch_int_vector("boundary_condition", bc);
136  err += params.fetch_double_vector("phi", phi);
137  err += params.fetch_double_vector("phipr", phipr);
138 
139  if (err) {
140  vout.crucial(m_vl, "Error at %s: input parameter not found.\n",
141  class_name.c_str());
142  exit(EXIT_FAILURE);
143  }
144 
145 
146  m_repr = str_gmset_type;
147 
148  set_parameters(kappa, cSW, bc, phi, phipr);
149 }
150 
151 
152 //====================================================================
153 void Fopr_Clover_SF::set_parameters(const double kappa,
154  const double cSW,
155  const std::vector<int> bc,
156  const std::vector<double> phi,
157  const std::vector<double> phipr)
158 {
159 #pragma omp barrier
160 
161  assert(bc.size() == m_Ndim);
162 
163  int ith = ThreadManager::get_thread_id();
164 
165  //- store values
166  if (ith == 0) {
167  m_kappa = kappa;
168  m_cSW = cSW;
169 
170  // m_boundary.resize(m_Ndim); // NB. already resized in init.
171  m_boundary = bc;
172 
173  m_phi.resize(3);
174  m_phipr.resize(3);
175  for (int i = 0; i < 3; ++i) {
176  m_phi[i] = phi[i];
177  m_phipr[i] = phipr[i];
178  }
179  }
180 #pragma omp barrier
181 
182  //- print input parameters
183  vout.general(m_vl, "%s: set parameters\n", class_name.c_str());
184  vout.general(m_vl, " kappa = %12.8f\n", m_kappa);
185  vout.general(m_vl, " cSW = %12.8f\n", m_cSW);
186  for (int mu = 0; mu < m_Ndim; ++mu) {
187  vout.general(m_vl, " boundary[%d] = %2d\n", mu, m_boundary[mu]);
188  }
189  vout.general(m_vl, " phi1 = %12.8f\n", m_phi[0]);
190  vout.general(m_vl, " phi2 = %12.8f\n", m_phi[1]);
191  vout.general(m_vl, " phi3 = %12.8f\n", m_phi[2]);
192  vout.general(m_vl, " phipr1= %12.8f\n", m_phipr[0]);
193  vout.general(m_vl, " phipr2= %12.8f\n", m_phipr[1]);
194  vout.general(m_vl, " phipr3= %12.8f\n", m_phipr[2]);
195 
196  //- propagate parameters
197  Parameters params;
198  get_parameters(params);
199  //m_fopr_w->set_parameters(m_kappa, m_boundary);
200  m_fopr_w->set_parameters(params);
201 
202 #pragma omp barrier
203 }
204 
205 
206 //====================================================================
208 {
209  params.set_string("gamma_matrix_type", m_repr);
210  params.set_double("hopping_parameter", m_kappa);
211  params.set_double("clover_coefficient", m_cSW);
212  params.set_int_vector("boundary_condition", m_boundary);
213  params.set_double_vector("phi", m_phi);
214  params.set_double_vector("phipr", m_phipr);
215 
216  params.set_string("verbose_level", vout.get_verbose_level(m_vl));
217 }
218 
219 
220 //====================================================================
222 {
223  // at this moment, this method is not multi-threaded yet.
225 
226  m_U = (Field_G *)U;
227  m_fopr_w->set_config(U);
228  set_csw();
229 }
230 
231 
232 //====================================================================
233 void Fopr_Clover_SF::set_mode(const std::string mode)
234 {
235 #pragma omp barrier
236 
237  int ith = ThreadManager::get_thread_id();
238  if (ith == 0) m_mode = mode;
239 
240 #pragma omp barrier
241 }
242 
243 
244 //====================================================================
245 void Fopr_Clover_SF::mult(Field& v, const Field& f)
246 {
247  if (m_mode == "D") {
248  D(v, f);
249  } else if (m_mode == "DdagD") {
250  DdagD(v, f);
251  } else if (m_mode == "Ddag") {
252  Ddag(v, f);
253  } else if (m_mode == "H") {
254  H(v, f);
255  } else {
256  vout.crucial(m_vl, "Error at %s: undefined mode = %s.\n",
257  class_name.c_str(), m_mode.c_str());
258  exit(EXIT_FAILURE);
259  }
260 }
261 
262 
263 //====================================================================
265 {
266  if (m_mode == "D") {
267  Ddag(v, f);
268  } else if (m_mode == "DdagD") {
269  DdagD(v, f);
270  } else if (m_mode == "Ddag") {
271  D(v, f);
272  } else if (m_mode == "H") {
273  H(v, f);
274  } else {
275  vout.crucial(m_vl, "Error at %s: undefined mode = %s.\n",
276  class_name.c_str(), m_mode.c_str());
277  exit(EXIT_FAILURE);
278  }
279 }
280 
281 
282 //====================================================================
283 void Fopr_Clover_SF::mult(Field& v, const Field& f,
284  const std::string mode)
285 {
286  if (mode == "D") {
287  D(v, f);
288  } else if (mode == "DdagD") {
289  DdagD(v, f);
290  } else if (mode == "Ddag") {
291  Ddag(v, f);
292  } else if (mode == "H") {
293  H(v, f);
294  } else {
295  vout.crucial(m_vl, "Error at %s: undefined mode = %s.\n",
296  class_name.c_str(), mode.c_str());
297  exit(EXIT_FAILURE);
298  }
299 }
300 
301 
302 //====================================================================
304  const std::string mode)
305 {
306  if (mode == "D") {
307  Ddag(v, f);
308  } else if (mode == "DdagD") {
309  DdagD(v, f);
310  } else if (mode == "Ddag") {
311  D(v, f);
312  } else if (mode == "H") {
313  H(v, f);
314  } else {
315  vout.crucial(m_vl, "Error at %s: undefined mode = %s.\n",
316  class_name.c_str(), mode.c_str());
317  exit(EXIT_FAILURE);
318  }
319 }
320 
321 
322 //====================================================================
324 {
325  assert(f.nex() == 1);
326 
327  D(m_w2, f);
328  mult_gm5(w, m_w2);
329  D(m_w2, w);
330  mult_gm5(w, m_w2);
331 }
332 
333 
334 //====================================================================
335 void Fopr_Clover_SF::Ddag(Field& w, const Field& f)
336 {
337  assert(f.nex() == 1);
338 
339  mult_gm5(w, f);
340  D(m_w2, w);
341  mult_gm5(w, m_w2);
342 }
343 
344 
345 //====================================================================
346 void Fopr_Clover_SF::H(Field& w, const Field& f)
347 {
348  assert(f.nex() == 1);
349 
350  D(m_w2, f);
351  mult_gm5(w, m_w2);
352 }
353 
354 
355 //====================================================================
356 void Fopr_Clover_SF::D(Field& w, const Field& f)
357 {
358  assert(f.nex() == 1);
359 
360  m_fopr_w->D(w, f);
361 
362  mult_csw(m_w1, f);
363 
364  axpy(w, -1.0, m_w1); // w -= m_w1;
365 #pragma omp barrier
366 
368 
369 #pragma omp barrier
370 }
371 
372 
373 //====================================================================
375  const int mu, const int nu)
376 {
377  assert(mu != nu);
378 
379  mult_iGM(v, m_SG[sg_index(mu, nu)], w);
380 }
381 
382 
383 //====================================================================
385 {
386  mult_csw_dirac(v, w);
387 }
388 
389 
390 //====================================================================
392 {
393 #pragma omp barrier
394 
395  assert(w.nex() == 1);
396 
397  const int Nvc = 2 * m_Nc;
398  const int Ndf = 2 * m_Nc * m_Nc;
399 
400  const int id1 = 0;
401  const int id2 = Nvc;
402  const int id3 = Nvc * 2;
403  const int id4 = Nvc * 3;
404 
405  const double *w2 = w.ptr(0);
406  double *v2 = v.ptr(0);
407 
408  double *Bx = m_Bx.ptr(0);
409  double *By = m_By.ptr(0);
410  double *Bz = m_Bz.ptr(0);
411  double *Ex = m_Ex.ptr(0);
412  double *Ey = m_Ey.ptr(0);
413  double *Ez = m_Ez.ptr(0);
414 
415  v.set(0.0);
416 #pragma omp barrier
417 
418  int ith, nth, is, ns;
419  set_threadtask(ith, nth, is, ns, m_Nvol);
420 
421  for (int site = is; site < ns; ++site) {
422  int iv = Nvc * m_Nd * site;
423  int ig = Ndf * site;
424 
425  for (int ic = 0; ic < m_Nc; ++ic) {
426  int ic_r = 2 * ic;
427  int ic_i = 2 * ic + 1;
428  int ic_g = ic * Nvc + ig;
429 
430  // isigma_23 * Bx
431  v2[ic_r + id1 + iv] -= mult_uv_i(&Bx[ic_g], &w2[id2 + iv]);
432  v2[ic_i + id1 + iv] += mult_uv_r(&Bx[ic_g], &w2[id2 + iv]);
433  v2[ic_r + id2 + iv] -= mult_uv_i(&Bx[ic_g], &w2[id1 + iv]);
434  v2[ic_i + id2 + iv] += mult_uv_r(&Bx[ic_g], &w2[id1 + iv]);
435 
436  v2[ic_r + id3 + iv] -= mult_uv_i(&Bx[ic_g], &w2[id4 + iv]);
437  v2[ic_i + id3 + iv] += mult_uv_r(&Bx[ic_g], &w2[id4 + iv]);
438  v2[ic_r + id4 + iv] -= mult_uv_i(&Bx[ic_g], &w2[id3 + iv]);
439  v2[ic_i + id4 + iv] += mult_uv_r(&Bx[ic_g], &w2[id3 + iv]);
440 
441  // isigma_31 * By
442  v2[ic_r + id1 + iv] += mult_uv_r(&By[ic_g], &w2[id2 + iv]);
443  v2[ic_i + id1 + iv] += mult_uv_i(&By[ic_g], &w2[id2 + iv]);
444  v2[ic_r + id2 + iv] -= mult_uv_r(&By[ic_g], &w2[id1 + iv]);
445  v2[ic_i + id2 + iv] -= mult_uv_i(&By[ic_g], &w2[id1 + iv]);
446 
447  v2[ic_r + id3 + iv] += mult_uv_r(&By[ic_g], &w2[id4 + iv]);
448  v2[ic_i + id3 + iv] += mult_uv_i(&By[ic_g], &w2[id4 + iv]);
449  v2[ic_r + id4 + iv] -= mult_uv_r(&By[ic_g], &w2[id3 + iv]);
450  v2[ic_i + id4 + iv] -= mult_uv_i(&By[ic_g], &w2[id3 + iv]);
451 
452  // isigma_12 * Bz
453  v2[ic_r + id1 + iv] -= mult_uv_i(&Bz[ic_g], &w2[id1 + iv]);
454  v2[ic_i + id1 + iv] += mult_uv_r(&Bz[ic_g], &w2[id1 + iv]);
455  v2[ic_r + id2 + iv] += mult_uv_i(&Bz[ic_g], &w2[id2 + iv]);
456  v2[ic_i + id2 + iv] -= mult_uv_r(&Bz[ic_g], &w2[id2 + iv]);
457 
458  v2[ic_r + id3 + iv] -= mult_uv_i(&Bz[ic_g], &w2[id3 + iv]);
459  v2[ic_i + id3 + iv] += mult_uv_r(&Bz[ic_g], &w2[id3 + iv]);
460  v2[ic_r + id4 + iv] += mult_uv_i(&Bz[ic_g], &w2[id4 + iv]);
461  v2[ic_i + id4 + iv] -= mult_uv_r(&Bz[ic_g], &w2[id4 + iv]);
462 
463  // isigma_41 * Ex
464  v2[ic_r + id1 + iv] += mult_uv_i(&Ex[ic_g], &w2[id4 + iv]);
465  v2[ic_i + id1 + iv] -= mult_uv_r(&Ex[ic_g], &w2[id4 + iv]);
466  v2[ic_r + id2 + iv] += mult_uv_i(&Ex[ic_g], &w2[id3 + iv]);
467  v2[ic_i + id2 + iv] -= mult_uv_r(&Ex[ic_g], &w2[id3 + iv]);
468 
469  v2[ic_r + id3 + iv] += mult_uv_i(&Ex[ic_g], &w2[id2 + iv]);
470  v2[ic_i + id3 + iv] -= mult_uv_r(&Ex[ic_g], &w2[id2 + iv]);
471  v2[ic_r + id4 + iv] += mult_uv_i(&Ex[ic_g], &w2[id1 + iv]);
472  v2[ic_i + id4 + iv] -= mult_uv_r(&Ex[ic_g], &w2[id1 + iv]);
473 
474  // isigma_42 * Ey
475  v2[ic_r + id1 + iv] -= mult_uv_r(&Ey[ic_g], &w2[id4 + iv]);
476  v2[ic_i + id1 + iv] -= mult_uv_i(&Ey[ic_g], &w2[id4 + iv]);
477  v2[ic_r + id2 + iv] += mult_uv_r(&Ey[ic_g], &w2[id3 + iv]);
478  v2[ic_i + id2 + iv] += mult_uv_i(&Ey[ic_g], &w2[id3 + iv]);
479 
480  v2[ic_r + id3 + iv] -= mult_uv_r(&Ey[ic_g], &w2[id2 + iv]);
481  v2[ic_i + id3 + iv] -= mult_uv_i(&Ey[ic_g], &w2[id2 + iv]);
482  v2[ic_r + id4 + iv] += mult_uv_r(&Ey[ic_g], &w2[id1 + iv]);
483  v2[ic_i + id4 + iv] += mult_uv_i(&Ey[ic_g], &w2[id1 + iv]);
484 
485  // isigma_43 * Ez
486  v2[ic_r + id1 + iv] += mult_uv_i(&Ez[ic_g], &w2[id3 + iv]);
487  v2[ic_i + id1 + iv] -= mult_uv_r(&Ez[ic_g], &w2[id3 + iv]);
488  v2[ic_r + id2 + iv] -= mult_uv_i(&Ez[ic_g], &w2[id4 + iv]);
489  v2[ic_i + id2 + iv] += mult_uv_r(&Ez[ic_g], &w2[id4 + iv]);
490 
491  v2[ic_r + id3 + iv] += mult_uv_i(&Ez[ic_g], &w2[id1 + iv]);
492  v2[ic_i + id3 + iv] -= mult_uv_r(&Ez[ic_g], &w2[id1 + iv]);
493  v2[ic_r + id4 + iv] -= mult_uv_i(&Ez[ic_g], &w2[id2 + iv]);
494  v2[ic_i + id4 + iv] += mult_uv_r(&Ez[ic_g], &w2[id2 + iv]);
495  }
496  }
497 #pragma omp barrier
498 
499  scal(v, m_kappa * m_cSW); // v *= m_kappa * m_cSW;
500 
501 #pragma omp barrier
502 }
503 
504 
505 //====================================================================
507 {
508  set_fieldstrength(m_Bx, 1, 2);
509  set_fieldstrength(m_By, 2, 0);
510  set_fieldstrength(m_Bz, 0, 1);
511  set_fieldstrength(m_Ex, 3, 0);
512  set_fieldstrength(m_Ey, 3, 1);
513  set_fieldstrength(m_Ez, 3, 2);
514 }
515 
516 
524 //====================================================================
526  const int mu, const int nu)
527 {
529 
530  Staple_SF staple;
531 
532  staple.set_parameters(m_phi, m_phipr);
533 
534  Field_G Cup;
535  staple.upper(Cup, *m_U, mu, nu);
536 
537  Field_G Cdn;
538  staple.lower(Cdn, *m_U, mu, nu);
539 
540  Field_G Umu;
541  copy(Umu, 0, *m_U, mu);
542 
543  mult_Field_Gnd(Fst, 0, Umu, 0, Cup, 0);
544  multadd_Field_Gnd(Fst, 0, Umu, 0, Cdn, 0, -1.0);
545 
546  Field_G v;
547  mult_Field_Gdn(v, 0, Cup, 0, Umu, 0);
548  multadd_Field_Gdn(v, 0, Cdn, 0, Umu, 0, -1.0);
549 
550  Field_G v2;
551  m_shift.forward(v2, v, mu);
552 
553  axpy(Fst, 1.0, v2); // Fst += v2;
554 
555  ah_Field_G(Fst, 0);
556  scal(Fst, 0.25); // Fst *= 0.25;
557 }
558 
559 
560 //====================================================================
562 {
563  //- Counting of floating point operations in giga unit.
564  // not implemented, yet.
565 
566  vout.general(m_vl, "Warning at %s: flop_count() has not been implemented.\n",
567  class_name.c_str());
568 
569  const double gflop = 0.0;
570 
571  return gflop;
572 }
573 
574 
575 //============================================================END=====
GammaMatrixSet
Set of Gamma Matrices: basis class.
Definition: gammaMatrixSet.h:37
Fopr_Clover_SF::set_parameters
void set_parameters(const Parameters &params)
sets parameters by a Parameter object: to be implemented in a subclass.
Definition: fopr_Clover_SF.cpp:117
Fopr_Clover_SF::mult_dag
void mult_dag(Field &v, const Field &f)
hermitian conjugate of mult.
Definition: fopr_Clover_SF.cpp:264
Fopr_Clover_SF::m_Bz
Field_G m_Bz
Definition: fopr_Clover_SF.h:62
GammaMatrixSet::GAMMA5
@ GAMMA5
Definition: gammaMatrixSet.h:48
fopr_thread-inc.h
Fopr_Clover_SF::H
void H(Field &, const Field &)
Definition: fopr_Clover_SF.cpp:346
mult_Field_Gdn
void mult_Field_Gdn(Field_G &W, const int ex, const Field_G &U1, const int ex1, const Field_G &U2, const int ex2)
Definition: field_G_imp.cpp:134
Parameters::set_string
void set_string(const string &key, const string &value)
Definition: parameters.cpp:39
GammaMatrixSet::GAMMA1
@ GAMMA1
Definition: gammaMatrixSet.h:48
Staple_SF::set_parameters
void set_parameters(const Parameters &params)
Definition: staple_SF.cpp:35
ShiftField_lex::forward
void forward(Field &, const Field &, const int mu)
Definition: shiftField_lex.cpp:79
CommonParameters::Ndim
static int Ndim()
Definition: commonParameters.h:117
Fopr_Clover_SF::m_w1
Field m_w1
Definition: fopr_Clover_SF.h:71
Fopr_Clover_SF::mult_csw
void mult_csw(Field &, const Field &)
Definition: fopr_Clover_SF.cpp:384
Fopr_Wilson_SF::set_parameters
void set_parameters(const Parameters &params)
sets parameters by a Parameter object: to be implemented in a subclass.
Definition: fopr_Wilson_SF.cpp:65
Field::set
void set(const int jin, const int site, const int jex, double v)
Definition: field.h:175
Parameters
Class for parameters.
Definition: parameters.h:46
GammaMatrixSet::UNITY
@ UNITY
Definition: gammaMatrixSet.h:48
Parameters::set_double
void set_double(const string &key, const double value)
Definition: parameters.cpp:33
Fopr_Clover_SF::m_mode
std::string m_mode
Definition: fopr_Clover_SF.h:56
Fopr_Clover_SF::m_SG
std::vector< GammaMatrix > m_SG
Definition: fopr_Clover_SF.h:66
Fopr_Clover_SF::m_Ndim
int m_Ndim
Definition: fopr_Clover_SF.h:52
Fopr_Clover_SF::init
void init(const std::string repr)
Definition: fopr_Clover_SF.cpp:47
Fopr_Wilson_SF::set_config
void set_config(Field *U)
sets the gauge configuration.
Definition: fopr_Wilson_SF.cpp:140
Field::nex
int nex() const
Definition: field.h:128
Fopr_Clover_SF::get_parameters
void get_parameters(Parameters &params) const
gets parameters by a Parameter object: to be implemented in a subclass.
Definition: fopr_Clover_SF.cpp:207
Fopr_Clover_SF::m_Nd
int m_Nd
Definition: fopr_Clover_SF.h:52
CommonParameters::Nvol
static int Nvol()
Definition: commonParameters.h:109
Fopr_Clover_SF::mult_isigma
void mult_isigma(Field_F &, const Field_F &, const int mu, const int nu)
Definition: fopr_Clover_SF.cpp:374
Fopr_Clover_SF::m_Bx
Field_G m_Bx
Definition: fopr_Clover_SF.h:62
axpy
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
Definition: field.cpp:380
Fopr_Clover_SF::set_config
void set_config(Field *U)
setup configuration (Note that this method is not multi-threaded).
Definition: fopr_Clover_SF.cpp:221
Fopr_Clover_SF::m_shift
ShiftField_lex m_shift
Definition: fopr_Clover_SF.h:60
Staple_SF
Staple construction.
Definition: staple_SF.h:36
Parameters::set_double_vector
void set_double_vector(const string &key, const vector< double > &value)
Definition: parameters.cpp:42
Fopr_Clover_SF::m_repr
std::string m_repr
Definition: fopr_Clover_SF.h:55
GammaMatrixSet::GAMMA3
@ GAMMA3
Definition: gammaMatrixSet.h:48
Fopr_Clover_SF::m_Ez
Field_G m_Ez
Definition: fopr_Clover_SF.h:62
Staple_SF::upper
void upper(Field_G &, const Field_G &, const int, const int)
Definition: staple_SF.cpp:877
Fopr_Clover_SF::class_name
static const std::string class_name
Definition: fopr_Clover_SF.h:47
Fopr_Clover_SF::DdagD
void DdagD(Field &, const Field &)
Definition: fopr_Clover_SF.cpp:323
copy
void copy(Field &y, const Field &x)
copy(y, x): y = x
Definition: field.cpp:212
Fopr_Clover_SF::set_csw
void set_csw()
Definition: fopr_Clover_SF.cpp:506
GammaMatrixSet::GAMMA4
@ GAMMA4
Definition: gammaMatrixSet.h:48
Fopr_Clover_SF::m_w2
Field m_w2
Definition: fopr_Clover_SF.h:71
Fopr_Clover_SF::m_cSW
double m_cSW
Definition: fopr_Clover_SF.h:53
Field_SF::set_boundary_zero
void set_boundary_zero(Field_G &u)
Definition: field_SF.cpp:96
GammaMatrixSet::SIGMA41
@ SIGMA41
Definition: gammaMatrixSet.h:52
Fopr_Clover_SF::m_fopr_w
Fopr_Wilson_SF * m_fopr_w
Definition: fopr_Clover_SF.h:58
Fopr_Clover_SF::tidyup
void tidyup()
Definition: fopr_Clover_SF.cpp:110
CommonParameters::Nc
static int Nc()
Definition: commonParameters.h:115
Fopr_Clover_SF::m_Nvol
int m_Nvol
Definition: fopr_Clover_SF.h:52
Fopr_Clover_SF::sg_index
int sg_index(const int mu, const int nu)
Definition: fopr_Clover_SF.h:151
ah_Field_G
void ah_Field_G(Field_G &W, const int ex)
Definition: field_G_imp.cpp:462
Fopr_Clover_SF::mult_gm5
void mult_gm5(Field &v, const Field &w)
multiplies gamma_5 matrix.
Definition: fopr_Clover_SF.h:124
mult_iGM
void mult_iGM(Field_F &y, const GammaMatrix &gm, const Field_F &x)
gamma matrix multiplication (i is multiplied)
Definition: field_F_imp.cpp:250
Fopr_Clover_SF::m_U
const Field_G * m_U
Definition: fopr_Clover_SF.h:59
Parameters::fetch_int_vector
int fetch_int_vector(const string &key, vector< int > &value) const
Definition: parameters.cpp:429
Fopr_Clover_SF::set_mode
void set_mode(const std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
Definition: fopr_Clover_SF.cpp:233
Fopr_Clover_SF::m_NinF
int m_NinF
Definition: fopr_Clover_SF.h:52
field_SF.h
Fopr_Clover_SF::mult
void mult(Field &v, const Field &f)
multiplies fermion operator to a given field.
Definition: fopr_Clover_SF.cpp:245
Fopr_Clover_SF::m_boundary
std::vector< int > m_boundary
Definition: fopr_Clover_SF.h:54
Fopr_Clover_SF::D
void D(Field &, const Field &)
Definition: fopr_Clover_SF.cpp:356
Field::reset
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=Element_type::COMPLEX)
Definition: field.h:95
Parameters::set_int_vector
void set_int_vector(const string &key, const vector< int > &value)
Definition: parameters.cpp:45
GammaMatrixSet::SIGMA42
@ SIGMA42
Definition: gammaMatrixSet.h:52
multadd_Field_Gnd
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)
Definition: field_G_imp.cpp:335
Fopr_Clover_SF::set_fieldstrength
void set_fieldstrength(Field_G &, const int, const int)
Definition: fopr_Clover_SF.cpp:525
Fopr_Wilson_SF::D
void D(Field &, const Field &)
Definition: fopr_Wilson_SF.cpp:277
Fopr_Clover_SF::m_kappa
double m_kappa
Definition: fopr_Clover_SF.h:53
Field::ptr
const double * ptr(const int jin, const int site, const int jex) const
Definition: field.h:153
CommonParameters::Nd
static int Nd()
Definition: commonParameters.h:116
Staple_SF::lower
void lower(Field_G &, const Field_G &, const int, const int)
Definition: staple_SF.cpp:912
Fopr_Clover_SF::Ddag
void Ddag(Field &, const Field &)
Definition: fopr_Clover_SF.cpp:335
Bridge::BridgeIO::set_verbose_level
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:133
Fopr_Clover_SF::m_GM
std::vector< GammaMatrix > m_GM
Definition: fopr_Clover_SF.h:66
Fopr_Clover_SF::m_Ex
Field_G m_Ex
Definition: fopr_Clover_SF.h:62
GammaMatrixSet::SIGMA23
@ SIGMA23
Definition: gammaMatrixSet.h:51
Fopr_Clover_SF::flop_count
double flop_count()
this returns the number of floating point number operations.
Definition: fopr_Clover_SF.cpp:561
fopr_Clover_SF.h
scal
void scal(Field &x, const double a)
scal(x, a): x = a * x
Definition: field.cpp:261
Parameters::fetch_string
int fetch_string(const string &key, string &value) const
Definition: parameters.cpp:378
Fopr_Clover_SF::m_vl
Bridge::VerboseLevel m_vl
Definition: fopr_Clover_SF.h:50
Field_F
Wilson-type fermion field.
Definition: field_F.h:37
Parameters::fetch_double
int fetch_double(const string &key, double &value) const
Definition: parameters.cpp:327
GammaMatrixSet::SIGMA12
@ SIGMA12
Definition: gammaMatrixSet.h:51
GammaMatrixSet::get_GM
GammaMatrix get_GM(GMspecies spec)
Definition: gammaMatrixSet.h:76
Fopr_Clover_SF::m_phipr
std::vector< double > m_phipr
SF boundary condition at t=Nt.
Definition: fopr_Clover_SF.h:69
GammaMatrixSet::GAMMA2
@ GAMMA2
Definition: gammaMatrixSet.h:48
Bridge::BridgeIO::crucial
void crucial(const char *format,...)
Definition: bridgeIO.cpp:180
Fopr_Clover_SF::m_Nc
int m_Nc
Definition: fopr_Clover_SF.h:52
Fopr_Clover_SF::mult_csw_dirac
void mult_csw_dirac(Field &, const Field &)
Definition: fopr_Clover_SF.cpp:391
Fopr_Clover_SF::m_phi
std::vector< double > m_phi
SF boundary condition at t=0.
Definition: fopr_Clover_SF.h:68
Field
Container of Field-type object.
Definition: field.h:46
GammaMatrixSet::SIGMA31
@ SIGMA31
Definition: gammaMatrixSet.h:51
ThreadManager::get_thread_id
static int get_thread_id()
returns thread id.
Definition: threadManager.cpp:253
GammaMatrixSet::SIGMA43
@ SIGMA43
Definition: gammaMatrixSet.h:52
Field_G
SU(N) gauge field.
Definition: field_G.h:38
Fopr_Clover_SF::m_By
Field_G m_By
Definition: fopr_Clover_SF.h:62
Parameters::fetch_double_vector
int fetch_double_vector(const string &key, vector< double > &value) const
Definition: parameters.cpp:410
Bridge::BridgeIO::general
void general(const char *format,...)
Definition: bridgeIO.cpp:200
multadd_Field_Gdn
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)
Definition: field_G_imp.cpp:293
mult_Field_Gnd
void mult_Field_Gnd(Field_G &W, const int ex, const Field_G &U1, const int ex1, const Field_G &U2, const int ex2)
Definition: field_G_imp.cpp:173
Fopr_Wilson_SF
Wilson fermion operator with SF BC.
Definition: fopr_Wilson_SF.h:51
ThreadManager::assert_single_thread
static void assert_single_thread(const std::string &class_name)
assert currently running on single thread.
Definition: threadManager.cpp:372
Bridge::vout
BridgeIO vout
Definition: bridgeIO.cpp:512
Bridge::BridgeIO::get_verbose_level
static std::string get_verbose_level(const VerboseLevel vl)
Definition: bridgeIO.cpp:154
Fopr_Clover_SF::m_Ey
Field_G m_Ey
Definition: fopr_Clover_SF.h:62