Bridge++  Ver.2.1.3
fopr_Clover_SF.cpp
Go to the documentation of this file.
1 
11 #include "lib/Field/field_SF.h"
13 
14 
15 #ifdef USE_FACTORY_AUTOREGISTER
16 namespace {
17  bool init = Fopr_Clover_SF::register_factory();
18 }
19 #endif
20 
21 const std::string Fopr_Clover_SF::class_name = "Fopr_Clover_SF";
22 
23 //====================================================================
24 namespace {
25  inline double mult_uv_r(const double *g, const double *w)
26  {
27  return g[0] * w[0] - g[1] * w[1]
28  + g[2] * w[2] - g[3] * w[3]
29  + g[4] * w[4] - g[5] * w[5];
30  }
31 
32 
33  inline double mult_uv_i(const double *g, const double *w)
34  {
35  return g[0] * w[1] + g[1] * w[0]
36  + g[2] * w[3] + g[3] * w[2]
37  + g[4] * w[5] + g[5] * w[4];
38  }
39 }
40 
41 //====================================================================
42 void Fopr_Clover_SF::init(const Parameters& params)
43 {
45 
46  std::string vlevel;
47  if (!params.fetch_string("verbose_level", vlevel)) {
48  m_vl = vout.set_verbose_level(vlevel);
49  } else {
51  }
52 
53  vout.general(m_vl, "%s: construction\n", class_name.c_str());
55 
56  std::string repr;
57  if (!params.fetch_string("gamma_matrix_type", repr)) {
58  m_repr = repr;
59  } else {
60  m_repr = "Dirac"; // default
61  vout.general(m_vl, "gamma_matrix_type is not given: defalt = %s\n",
62  m_repr.c_str());
63  }
64 
65  if(m_repr != "Dirac"){
66  vout.crucial("%s: only Dirac repr. is available.\n");
67  exit(EXIT_FAILURE);
68  }
69 
74  m_NinF = 2 * m_Nc * m_Nd;
75 
76  m_boundary.resize(m_Ndim);
77 
78  set_parameters_impl(params);
79 
80  setup_sg();
81 
82  m_U = 0;
83 
84  m_fopr_w = new Fopr_Wilson_SF(params);
85 
86  m_staple = new Staple_SF(params);
87 
88  m_shift = new ShiftField_lex();
89 
90  m_w1.reset(m_NinF, m_Nvol, 1);
91  m_w2.reset(m_NinF, m_Nvol, 1);
92 
93  m_v1 = new Field_G(m_Nvol, 1);
94  m_v2 = new Field_G(m_Nvol, 1);
95  m_v3 = new Field_G(m_Nvol, 1);
96 
98  vout.general(m_vl, "%s: construction finished.\n",
99  class_name.c_str());
100 
101 }
102 
103 
104 //====================================================================
105 void Fopr_Clover_SF::init(const std::string repr)
106 {
108 
110 
111  vout.general(m_vl, "%s: construction (obsolete)\n", class_name.c_str());
113 
114  m_repr = repr;
115  if(m_repr != "Dirac"){
116  vout.crucial("%s: only Dirac repr. is accepted/\n");
117  exit(EXIT_FAILURE);
118  }
119 
124  m_NinF = 2 * m_Nc * m_Nd;
125 
126  m_boundary.resize(m_Ndim);
127 
128  setup_sg();
129 
130  m_U = 0;
131 
132  m_fopr_w = new Fopr_Wilson_SF();
133 
134  m_staple = new Staple_SF();
135 
136  m_shift = new ShiftField_lex();
137 
138  m_w1.reset(m_NinF, m_Nvol, 1);
139  m_w2.reset(m_NinF, m_Nvol, 1);
140 
141  m_v1 = new Field_G(m_Nvol, 1);
142  m_v2 = new Field_G(m_Nvol, 1);
143  m_v3 = new Field_G(m_Nvol, 1);
144 
146  vout.general(m_vl, "%s: construction finished.\n",
147  class_name.c_str());
148 
149 }
150 
151 
152 //====================================================================
154 {
155  delete m_fopr_w;
156  delete m_staple;
157  delete m_shift;
158 
159 }
160 
161 
162 //====================================================================
164 {
165  m_GM.resize(m_Ndim + 1);
166  m_SG.resize(m_Ndim * m_Ndim);
167 
168  GammaMatrixSet *gmset = GammaMatrixSet::New(m_repr);
169 
170  m_GM[0] = gmset->get_GM(gmset->GAMMA1);
171  m_GM[1] = gmset->get_GM(gmset->GAMMA2);
172  m_GM[2] = gmset->get_GM(gmset->GAMMA3);
173  m_GM[3] = gmset->get_GM(gmset->GAMMA4);
174  m_GM[4] = gmset->get_GM(gmset->GAMMA5);
175 
176  m_SG[sg_index(0, 1)] = gmset->get_GM(gmset->SIGMA12);
177  m_SG[sg_index(1, 2)] = gmset->get_GM(gmset->SIGMA23);
178  m_SG[sg_index(2, 0)] = gmset->get_GM(gmset->SIGMA31);
179  m_SG[sg_index(3, 0)] = gmset->get_GM(gmset->SIGMA41);
180  m_SG[sg_index(3, 1)] = gmset->get_GM(gmset->SIGMA42);
181  m_SG[sg_index(3, 2)] = gmset->get_GM(gmset->SIGMA43);
182 
183  m_SG[sg_index(1, 0)] = m_SG[sg_index(0, 1)].mult(-1);
184  m_SG[sg_index(2, 1)] = m_SG[sg_index(1, 2)].mult(-1);
185  m_SG[sg_index(0, 2)] = m_SG[sg_index(2, 0)].mult(-1);
186  m_SG[sg_index(0, 3)] = m_SG[sg_index(3, 0)].mult(-1);
187  m_SG[sg_index(1, 3)] = m_SG[sg_index(3, 1)].mult(-1);
188  m_SG[sg_index(2, 3)] = m_SG[sg_index(3, 2)].mult(-1);
189 
190  m_SG[sg_index(0, 0)] = gmset->get_GM(gmset->UNITY);
191  m_SG[sg_index(1, 1)] = gmset->get_GM(gmset->UNITY);
192  m_SG[sg_index(2, 2)] = gmset->get_GM(gmset->UNITY);
193  m_SG[sg_index(3, 3)] = gmset->get_GM(gmset->UNITY);
194  // these 4 gamma matrices are actually not used.
195 
196  delete gmset;
197 
198 }
199 
200 
201 //====================================================================
203 {
204  set_parameters_impl(params);
205 
206  m_fopr_w->set_parameters(params);
207 
208  //m_staple->set_parameters(m_phi, m_phipr);
209  m_staple->set_parameters(params);
210 
211 }
212 
213 
214 //====================================================================
216 {
217  std::string vlevel;
218  if (!params.fetch_string("verbose_level", vlevel)) {
219  m_vl = vout.set_verbose_level(vlevel);
220  }
221 
222  //- fetch and check input parameters
223  double kappa, cSW;
224  std::vector<int> bc;
225  std::vector<double> phi, phipr;
226 
227  int err = 0;
228  int err_optional = 0;
229  err += params.fetch_double("hopping_parameter", kappa);
230  err += params.fetch_double("clover_coefficient", cSW);
231  err += params.fetch_int_vector("boundary_condition", bc);
232  err += params.fetch_double_vector("phi", phi);
233  err += params.fetch_double_vector("phipr", phipr);
234 
235  if (err) {
236  vout.crucial(m_vl, "Error at %s: input parameter not found.\n",
237  class_name.c_str());
238  exit(EXIT_FAILURE);
239  }
240 
241  set_parameters_impl(kappa, cSW, bc, phi, phipr);
242 
243 }
244 
245 
246 //====================================================================
247 void Fopr_Clover_SF::set_parameters(const double kappa,
248  const double cSW,
249  const std::vector<int> bc,
250  const std::vector<double> phi,
251  const std::vector<double> phipr)
252 {
253 
254  set_parameters_impl(kappa, cSW, bc, phi, phipr);
255 
256  //- propagate parameters
257  Parameters params;
258  get_parameters(params);
259 
260  m_fopr_w->set_parameters(params);
261 
262  m_staple->set_parameters(params);
263 
264 }
265 
266 
267 //====================================================================
268 void Fopr_Clover_SF::set_parameters_impl(const double kappa,
269  const double cSW,
270  const std::vector<int> bc,
271  const std::vector<double> phi,
272  const std::vector<double> phipr)
273 {
274 #pragma omp barrier
275 
276  assert(bc.size() == m_Ndim);
277 
278  int ith = ThreadManager::get_thread_id();
279 
280  //- store values
281  if (ith == 0) {
282  m_kappa = kappa;
283  m_cSW = cSW;
284  m_boundary = bc;
285 
286  m_phi.resize(3);
287  m_phipr.resize(3);
288  for (int i = 0; i < 3; ++i) {
289  m_phi[i] = phi[i];
290  m_phipr[i] = phipr[i];
291  }
292  }
293 #pragma omp barrier
294 
295  //- print input parameters
296  vout.general(m_vl, "%s: parameters\n", class_name.c_str());
297  vout.general(m_vl, " gamma matrix type = %s\n", m_repr.c_str());
298  vout.general(m_vl, " kappa = %12.8f\n", m_kappa);
299  vout.general(m_vl, " cSW = %12.8f\n", m_cSW);
300  for (int mu = 0; mu < m_Ndim; ++mu) {
301  vout.general(m_vl, " boundary[%d] = %2d\n", mu, m_boundary[mu]);
302  }
303  vout.general(m_vl, " phi1 = %12.8f\n", m_phi[0]);
304  vout.general(m_vl, " phi2 = %12.8f\n", m_phi[1]);
305  vout.general(m_vl, " phi3 = %12.8f\n", m_phi[2]);
306  vout.general(m_vl, " phipr1 = %12.8f\n", m_phipr[0]);
307  vout.general(m_vl, " phipr2 = %12.8f\n", m_phipr[1]);
308  vout.general(m_vl, " phipr3 = %12.8f\n", m_phipr[2]);
309 
310 #pragma omp barrier
311 }
312 
313 
314 //====================================================================
316 {
317  params.set_double("hopping_parameter", m_kappa);
318  params.set_double("clover_coefficient", m_cSW);
319  params.set_int_vector("boundary_condition", m_boundary);
320  params.set_double_vector("phi", m_phi);
321  params.set_double_vector("phipr", m_phipr);
322  params.set_string("gamma_matrix_type", m_repr);
323 
324  params.set_string("verbose_level", vout.get_verbose_level(m_vl));
325 }
326 
327 
328 //====================================================================
330 {
331 #pragma omp barrier
332 
333  // at this moment, this method is not multi-threaded yet.
334  // ThreadManager::assert_single_thread(class_name);
335 
336  int ith = ThreadManager::get_thread_id();
337  if (ith == 0) m_U = (Field_G *)U;
338 #pragma omp barrier
339 
340  m_fopr_w->set_config(U);
341  set_csw();
342 
343 #pragma omp barrier
344 }
345 
346 
347 //====================================================================
348 void Fopr_Clover_SF::set_mode(const std::string mode)
349 {
350 #pragma omp barrier
351 
352  int ith = ThreadManager::get_thread_id();
353  if (ith == 0) m_mode = mode;
354 
355 #pragma omp barrier
356 }
357 
358 
359 //====================================================================
360 void Fopr_Clover_SF::mult(Field& v, const Field& f)
361 {
362  if (m_mode == "D") {
363  D(v, f);
364  } else if (m_mode == "DdagD") {
365  DdagD(v, f);
366  } else if (m_mode == "Ddag") {
367  Ddag(v, f);
368  } else if (m_mode == "H") {
369  H(v, f);
370  } else {
371  vout.crucial(m_vl, "Error at %s: undefined mode = %s.\n",
372  class_name.c_str(), m_mode.c_str());
373  exit(EXIT_FAILURE);
374  }
375 }
376 
377 
378 //====================================================================
380 {
381  if (m_mode == "D") {
382  Ddag(v, f);
383  } else if (m_mode == "DdagD") {
384  DdagD(v, f);
385  } else if (m_mode == "Ddag") {
386  D(v, f);
387  } else if (m_mode == "H") {
388  H(v, f);
389  } else {
390  vout.crucial(m_vl, "Error at %s: undefined mode = %s.\n",
391  class_name.c_str(), m_mode.c_str());
392  exit(EXIT_FAILURE);
393  }
394 }
395 
396 
397 //====================================================================
398 void Fopr_Clover_SF::mult(Field& v, const Field& f,
399  const std::string mode)
400 {
401  if (mode == "D") {
402  D(v, f);
403  } else if (mode == "DdagD") {
404  DdagD(v, f);
405  } else if (mode == "Ddag") {
406  Ddag(v, f);
407  } else if (mode == "H") {
408  H(v, f);
409  } else {
410  vout.crucial(m_vl, "Error at %s: undefined mode = %s.\n",
411  class_name.c_str(), mode.c_str());
412  exit(EXIT_FAILURE);
413  }
414 }
415 
416 
417 //====================================================================
419  const std::string mode)
420 {
421  if (mode == "D") {
422  Ddag(v, f);
423  } else if (mode == "DdagD") {
424  DdagD(v, f);
425  } else if (mode == "Ddag") {
426  D(v, f);
427  } else if (mode == "H") {
428  H(v, f);
429  } else {
430  vout.crucial(m_vl, "Error at %s: undefined mode = %s.\n",
431  class_name.c_str(), mode.c_str());
432  exit(EXIT_FAILURE);
433  }
434 }
435 
436 
437 //====================================================================
439 {
440  assert(f.nex() == 1);
441 
442  D(m_w2, f);
443  mult_gm5(w, m_w2);
444  D(m_w2, w);
445  mult_gm5(w, m_w2);
446 }
447 
448 
449 //====================================================================
450 void Fopr_Clover_SF::Ddag(Field& w, const Field& f)
451 {
452  assert(f.nex() == 1);
453 
454  mult_gm5(w, f);
455  D(m_w2, w);
456  mult_gm5(w, m_w2);
457 }
458 
459 
460 //====================================================================
461 void Fopr_Clover_SF::H(Field& w, const Field& f)
462 {
463  assert(f.nex() == 1);
464 
465  D(m_w2, f);
466  mult_gm5(w, m_w2);
467 }
468 
469 
470 //====================================================================
471 void Fopr_Clover_SF::D(Field& w, const Field& f)
472 {
473  assert(f.nex() == 1);
474 
475  m_fopr_w->D(w, f);
476 
477  mult_csw(m_w1, f);
478 
479  axpy(w, -1.0, m_w1);
480 #pragma omp barrier
481 
483 
484 #pragma omp barrier
485 }
486 
487 
488 //====================================================================
490  const int mu, const int nu)
491 {
492  assert(mu != nu);
493 
494  mult_iGM(v, m_SG[sg_index(mu, nu)], w);
495 }
496 
497 
498 //====================================================================
500 {
501  mult_csw_dirac(v, w);
502 }
503 
504 
505 //====================================================================
507 {
508 #pragma omp barrier
509 
510  assert(w.nex() == 1);
511 
512  const int Nvc = 2 * m_Nc;
513  const int Ndf = 2 * m_Nc * m_Nc;
514 
515  const int id1 = 0;
516  const int id2 = Nvc;
517  const int id3 = Nvc * 2;
518  const int id4 = Nvc * 3;
519 
520  const double *w2 = w.ptr(0);
521  double *v2 = v.ptr(0);
522 
523  double *Bx = m_Bx.ptr(0);
524  double *By = m_By.ptr(0);
525  double *Bz = m_Bz.ptr(0);
526  double *Ex = m_Ex.ptr(0);
527  double *Ey = m_Ey.ptr(0);
528  double *Ez = m_Ez.ptr(0);
529 
530  v.set(0.0);
531 #pragma omp barrier
532 
533  int ith, nth, is, ns;
534  set_threadtask(ith, nth, is, ns, m_Nvol);
535 
536  for (int site = is; site < ns; ++site) {
537  int iv = Nvc * m_Nd * site;
538  int ig = Ndf * site;
539 
540  for (int ic = 0; ic < m_Nc; ++ic) {
541  int ic_r = 2 * ic;
542  int ic_i = 2 * ic + 1;
543  int ic_g = ic * Nvc + ig;
544 
545  // isigma_23 * Bx
546  v2[ic_r + id1 + iv] -= mult_uv_i(&Bx[ic_g], &w2[id2 + iv]);
547  v2[ic_i + id1 + iv] += mult_uv_r(&Bx[ic_g], &w2[id2 + iv]);
548  v2[ic_r + id2 + iv] -= mult_uv_i(&Bx[ic_g], &w2[id1 + iv]);
549  v2[ic_i + id2 + iv] += mult_uv_r(&Bx[ic_g], &w2[id1 + iv]);
550 
551  v2[ic_r + id3 + iv] -= mult_uv_i(&Bx[ic_g], &w2[id4 + iv]);
552  v2[ic_i + id3 + iv] += mult_uv_r(&Bx[ic_g], &w2[id4 + iv]);
553  v2[ic_r + id4 + iv] -= mult_uv_i(&Bx[ic_g], &w2[id3 + iv]);
554  v2[ic_i + id4 + iv] += mult_uv_r(&Bx[ic_g], &w2[id3 + iv]);
555 
556  // isigma_31 * By
557  v2[ic_r + id1 + iv] += mult_uv_r(&By[ic_g], &w2[id2 + iv]);
558  v2[ic_i + id1 + iv] += mult_uv_i(&By[ic_g], &w2[id2 + iv]);
559  v2[ic_r + id2 + iv] -= mult_uv_r(&By[ic_g], &w2[id1 + iv]);
560  v2[ic_i + id2 + iv] -= mult_uv_i(&By[ic_g], &w2[id1 + iv]);
561 
562  v2[ic_r + id3 + iv] += mult_uv_r(&By[ic_g], &w2[id4 + iv]);
563  v2[ic_i + id3 + iv] += mult_uv_i(&By[ic_g], &w2[id4 + iv]);
564  v2[ic_r + id4 + iv] -= mult_uv_r(&By[ic_g], &w2[id3 + iv]);
565  v2[ic_i + id4 + iv] -= mult_uv_i(&By[ic_g], &w2[id3 + iv]);
566 
567  // isigma_12 * Bz
568  v2[ic_r + id1 + iv] -= mult_uv_i(&Bz[ic_g], &w2[id1 + iv]);
569  v2[ic_i + id1 + iv] += mult_uv_r(&Bz[ic_g], &w2[id1 + iv]);
570  v2[ic_r + id2 + iv] += mult_uv_i(&Bz[ic_g], &w2[id2 + iv]);
571  v2[ic_i + id2 + iv] -= mult_uv_r(&Bz[ic_g], &w2[id2 + iv]);
572 
573  v2[ic_r + id3 + iv] -= mult_uv_i(&Bz[ic_g], &w2[id3 + iv]);
574  v2[ic_i + id3 + iv] += mult_uv_r(&Bz[ic_g], &w2[id3 + iv]);
575  v2[ic_r + id4 + iv] += mult_uv_i(&Bz[ic_g], &w2[id4 + iv]);
576  v2[ic_i + id4 + iv] -= mult_uv_r(&Bz[ic_g], &w2[id4 + iv]);
577 
578  // isigma_41 * Ex
579  v2[ic_r + id1 + iv] += mult_uv_i(&Ex[ic_g], &w2[id4 + iv]);
580  v2[ic_i + id1 + iv] -= mult_uv_r(&Ex[ic_g], &w2[id4 + iv]);
581  v2[ic_r + id2 + iv] += mult_uv_i(&Ex[ic_g], &w2[id3 + iv]);
582  v2[ic_i + id2 + iv] -= mult_uv_r(&Ex[ic_g], &w2[id3 + iv]);
583 
584  v2[ic_r + id3 + iv] += mult_uv_i(&Ex[ic_g], &w2[id2 + iv]);
585  v2[ic_i + id3 + iv] -= mult_uv_r(&Ex[ic_g], &w2[id2 + iv]);
586  v2[ic_r + id4 + iv] += mult_uv_i(&Ex[ic_g], &w2[id1 + iv]);
587  v2[ic_i + id4 + iv] -= mult_uv_r(&Ex[ic_g], &w2[id1 + iv]);
588 
589  // isigma_42 * Ey
590  v2[ic_r + id1 + iv] -= mult_uv_r(&Ey[ic_g], &w2[id4 + iv]);
591  v2[ic_i + id1 + iv] -= mult_uv_i(&Ey[ic_g], &w2[id4 + iv]);
592  v2[ic_r + id2 + iv] += mult_uv_r(&Ey[ic_g], &w2[id3 + iv]);
593  v2[ic_i + id2 + iv] += mult_uv_i(&Ey[ic_g], &w2[id3 + iv]);
594 
595  v2[ic_r + id3 + iv] -= mult_uv_r(&Ey[ic_g], &w2[id2 + iv]);
596  v2[ic_i + id3 + iv] -= mult_uv_i(&Ey[ic_g], &w2[id2 + iv]);
597  v2[ic_r + id4 + iv] += mult_uv_r(&Ey[ic_g], &w2[id1 + iv]);
598  v2[ic_i + id4 + iv] += mult_uv_i(&Ey[ic_g], &w2[id1 + iv]);
599 
600  // isigma_43 * Ez
601  v2[ic_r + id1 + iv] += mult_uv_i(&Ez[ic_g], &w2[id3 + iv]);
602  v2[ic_i + id1 + iv] -= mult_uv_r(&Ez[ic_g], &w2[id3 + iv]);
603  v2[ic_r + id2 + iv] -= mult_uv_i(&Ez[ic_g], &w2[id4 + iv]);
604  v2[ic_i + id2 + iv] += mult_uv_r(&Ez[ic_g], &w2[id4 + iv]);
605 
606  v2[ic_r + id3 + iv] += mult_uv_i(&Ez[ic_g], &w2[id1 + iv]);
607  v2[ic_i + id3 + iv] -= mult_uv_r(&Ez[ic_g], &w2[id1 + iv]);
608  v2[ic_r + id4 + iv] -= mult_uv_i(&Ez[ic_g], &w2[id2 + iv]);
609  v2[ic_i + id4 + iv] += mult_uv_r(&Ez[ic_g], &w2[id2 + iv]);
610  }
611  }
612 #pragma omp barrier
613 
614  scal(v, m_kappa * m_cSW); // v *= m_kappa * m_cSW;
615 
616 #pragma omp barrier
617 }
618 
619 
620 //====================================================================
622 {
623  set_fieldstrength(m_Bx, 1, 2);
624  set_fieldstrength(m_By, 2, 0);
625  set_fieldstrength(m_Bz, 0, 1);
626  set_fieldstrength(m_Ex, 3, 0);
627  set_fieldstrength(m_Ey, 3, 1);
628  set_fieldstrength(m_Ez, 3, 2);
629 }
630 
631 
639 //====================================================================
641  const int mu, const int nu)
642 {
643 #pragma omp barrier
644 
645  m_staple->upper(*m_v2, *m_U, mu, nu);
646 
647  m_staple->lower(*m_v3, *m_U, mu, nu);
648 
649  mult_Field_Gnd(Fst, 0, *m_U, mu, *m_v2, 0);
650  multadd_Field_Gnd(Fst, 0, *m_U, mu, *m_v3, 0, -1.0);
651 
652  mult_Field_Gdn(*m_v1, 0, *m_v2, 0, *m_U, mu);
653  multadd_Field_Gdn(*m_v1, 0, *m_v3, 0, *m_U, mu, -1.0);
654 #pragma omp barrier
655 
656  m_shift->forward(*m_v2, *m_v1, mu);
657 
658  axpy(Fst, 1.0, *m_v2);
659 
660  ah_Field_G(Fst, 0);
661  scal(Fst, 0.25);
662 #pragma omp barrier
663 
664 }
665 
666 
667 //====================================================================
669 {
670  //- Counting of floating point operations in giga unit.
671  // not implemented, yet.
672 
673  vout.general(m_vl, "%s: flop_count() has not been implemented.\n",
674  class_name.c_str());
675 
676  const double gflop = 0.0;
677 
678  return gflop;
679 }
680 
681 
682 //============================================================END=====
GammaMatrixSet
Set of Gamma Matrices: basis class.
Definition: gammaMatrixSet.h:37
Fopr_Clover_SF::set_parameters_impl
void set_parameters_impl(const Parameters &params)
Definition: fopr_Clover_SF.cpp:215
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:202
Fopr_Clover_SF::mult_dag
void mult_dag(Field &v, const Field &f)
hermitian conjugate of mult.
Definition: fopr_Clover_SF.cpp:379
Fopr_Clover_SF::m_Bz
Field_G m_Bz
Definition: fopr_Clover_SF.h:69
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:461
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
Fopr_Clover_SF::m_shift
ShiftField_lex * m_shift
Definition: fopr_Clover_SF.h:61
GammaMatrixSet::GAMMA1
@ GAMMA1
Definition: gammaMatrixSet.h:48
Staple_SF::set_parameters
void set_parameters(const Parameters &params)
Definition: staple_SF.cpp:112
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:78
Fopr_Clover_SF::mult_csw
void mult_csw(Field &, const Field &)
Definition: fopr_Clover_SF.cpp:499
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:120
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:55
Bridge::BridgeIO::decrease_indent
void decrease_indent()
Definition: bridgeIO.cpp:518
Fopr_Clover_SF::m_SG
std::vector< GammaMatrix > m_SG
Definition: fopr_Clover_SF.h:73
Fopr_Clover_SF::init
void init(const Parameters &params)
Definition: fopr_Clover_SF.cpp:42
Fopr_Clover_SF::m_Ndim
int m_Ndim
Definition: fopr_Clover_SF.h:51
Bridge::BridgeIO::increase_indent
void increase_indent()
Definition: bridgeIO.cpp:508
Fopr_Wilson_SF::set_config
void set_config(Field *U)
sets the gauge configuration.
Definition: fopr_Wilson_SF.cpp:211
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:315
Fopr_Clover_SF::m_Nd
int m_Nd
Definition: fopr_Clover_SF.h:51
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:489
Fopr_Clover_SF::m_Bx
Field_G m_Bx
Definition: fopr_Clover_SF.h:69
axpy
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
Definition: field.cpp:381
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:329
Staple_SF
Staple construction.
Definition: staple_SF.h:32
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:54
GammaMatrixSet::GAMMA3
@ GAMMA3
Definition: gammaMatrixSet.h:48
Fopr_Clover_SF::m_Ez
Field_G m_Ez
Definition: fopr_Clover_SF.h:69
Staple_SF::upper
void upper(Field_G &, const Field_G &, const int, const int)
Definition: staple_SF.cpp:1039
Fopr_Clover_SF::class_name
static const std::string class_name
Definition: fopr_Clover_SF.h:46
Fopr_Clover_SF::DdagD
void DdagD(Field &, const Field &)
Definition: fopr_Clover_SF.cpp:438
Fopr_Clover_SF::set_csw
void set_csw()
Definition: fopr_Clover_SF.cpp:621
GammaMatrixSet::GAMMA4
@ GAMMA4
Definition: gammaMatrixSet.h:48
Fopr_Clover_SF::m_w2
Field m_w2
Definition: fopr_Clover_SF.h:78
Fopr_Clover_SF::m_cSW
double m_cSW
Definition: fopr_Clover_SF.h:52
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:57
Fopr_Clover_SF::tidyup
void tidyup()
Definition: fopr_Clover_SF.cpp:153
CommonParameters::Nc
static int Nc()
Definition: commonParameters.h:115
Fopr_Clover_SF::m_Nvol
int m_Nvol
Definition: fopr_Clover_SF.h:51
Fopr_Clover_SF::sg_index
int sg_index(const int mu, const int nu)
Definition: fopr_Clover_SF.h:163
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:120
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
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:348
Fopr_Clover_SF::m_NinF
int m_NinF
Definition: fopr_Clover_SF.h:51
Fopr_Clover_SF::setup_sg
void setup_sg()
Definition: fopr_Clover_SF.cpp:163
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:360
Fopr_Clover_SF::m_boundary
std::vector< int > m_boundary
Definition: fopr_Clover_SF.h:53
Fopr_Clover_SF::D
void D(Field &, const Field &)
Definition: fopr_Clover_SF.cpp:471
Fopr_Clover_SF::m_v1
Field_G * m_v1
Definition: fopr_Clover_SF.h:65
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
Fopr_Clover_SF::m_U
Field_G * m_U
Definition: fopr_Clover_SF.h:63
GammaMatrixSet::SIGMA42
@ SIGMA42
Definition: gammaMatrixSet.h:52
ShiftField_lex
Methods to shift a field in the lexical site index.
Definition: shiftField_lex.h:39
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:640
Fopr_Clover_SF::m_v2
Field_G * m_v2
Definition: fopr_Clover_SF.h:66
Fopr_Wilson_SF::D
void D(Field &, const Field &)
Definition: fopr_Wilson_SF.cpp:349
Fopr_Clover_SF::m_kappa
double m_kappa
Definition: fopr_Clover_SF.h:52
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
CommonParameters::Vlevel
static Bridge::VerboseLevel Vlevel()
Definition: commonParameters.h:122
Staple_SF::lower
void lower(Field_G &, const Field_G &, const int, const int)
Definition: staple_SF.cpp:1081
Fopr_Clover_SF::Ddag
void Ddag(Field &, const Field &)
Definition: fopr_Clover_SF.cpp:450
Bridge::BridgeIO::set_verbose_level
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:195
Fopr_Clover_SF::m_GM
std::vector< GammaMatrix > m_GM
Definition: fopr_Clover_SF.h:73
Fopr_Clover_SF::m_Ex
Field_G m_Ex
Definition: fopr_Clover_SF.h:69
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:668
fopr_Clover_SF.h
scal
void scal(Field &x, const double a)
scal(x, a): x = a * x
Definition: field.cpp:262
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:49
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:76
GammaMatrixSet::GAMMA2
@ GAMMA2
Definition: gammaMatrixSet.h:48
Bridge::BridgeIO::crucial
void crucial(const char *format,...)
Definition: bridgeIO.cpp:242
Fopr_Clover_SF::m_Nc
int m_Nc
Definition: fopr_Clover_SF.h:51
Fopr_Clover_SF::mult_csw_dirac
void mult_csw_dirac(Field &, const Field &)
Definition: fopr_Clover_SF.cpp:506
Fopr_Clover_SF::m_v3
Field_G * m_v3
Definition: fopr_Clover_SF.h:67
Fopr_Clover_SF::m_phi
std::vector< double > m_phi
SF boundary condition at t = 0.
Definition: fopr_Clover_SF.h:75
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_staple
Staple_SF * m_staple
Definition: fopr_Clover_SF.h:59
Fopr_Clover_SF::m_By
Field_G m_By
Definition: fopr_Clover_SF.h:69
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:262
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:572
Bridge::BridgeIO::get_verbose_level
static std::string get_verbose_level(const VerboseLevel vl)
Definition: bridgeIO.cpp:216
Fopr_Clover_SF::m_Ey
Field_G m_Ey
Definition: fopr_Clover_SF.h:69