18 #ifdef USE_PARAMETERS_FACTORY
25 #if defined USE_GROUP_SU3
26 #include "fopr_Wilson_impl_SU3.inc"
27 #elif defined USE_GROUP_SU2
28 #include "fopr_Wilson_impl_SU2.inc"
29 #elif defined USE_GROUP_SU_N
30 #include "fopr_Wilson_impl_SU_N.inc"
46 #ifdef USE_PARAMETERS_FACTORY
61 const string str_vlevel = params.
get_string(
"verbose_level");
75 vout.
crucial(
m_vl,
"Fopr_CloverTerm: fetch error, input parameter not found.\n");
92 for (
int mu = 0; mu <
m_Ndim; ++mu) {
98 assert(bc.size() ==
m_Ndim);
105 for (
int mu = 0; mu <
m_Ndim; ++mu) {
133 m_SG.resize(m_Ndim * m_Ndim);
163 }
else if (
m_repr ==
"Chiral") {
184 (this->*
m_gm5)(v, f);
197 v1 =
const_cast<Field *
>(&f)->ptr(0);
209 int is =
m_Nvol * ith / nth;
210 int ns =
m_Nvol * (ith + 1) / nth - is;
212 for (
int site = is; site < is + ns; ++site) {
214 for (
int icc = 0; icc < Nvc; icc++) {
215 int in = Nvc * Nd * site;
216 v2[icc + id1 + in] = v1[icc + id3 + in];
217 v2[icc + id2 + in] = v1[icc + id4 + in];
218 v2[icc + id3 + in] = v1[icc + id1 + in];
219 v2[icc + id4 + in] = v1[icc + id2 + in];
234 v1 =
const_cast<Field *
>(&f)->ptr(0);
246 int is =
m_Nvol * ith / nth;
247 int ns =
m_Nvol * (ith + 1) / nth - is;
249 for (
int site = is; site < is + ns; ++site) {
251 for (
int icc = 0; icc < Nvc; icc++) {
252 int in = Nvc * Nd * site;
253 v2[icc + id1 + in] = v1[icc + id1 + in];
254 v2[icc + id2 + in] = v1[icc + id2 + in];
255 v2[icc + id3 + in] = -v1[icc + id3 + in];
256 v2[icc + id4 + in] = -v1[icc + id4 + in];
264 const int mu,
const int nu)
281 (this->*
m_csw)(v, w);
288 assert(w.
nex() == 1);
292 int Ndf = 2 * Nc * Nc;
301 double kappa_cSW = m_kappa *
m_cSW;
303 double *w2 =
const_cast<Field *
>(&w)->ptr(0);
304 double *v2 = v.
ptr(0);
317 int is =
m_Nvol * ith / nth;
318 int ns =
m_Nvol * (ith + 1) / nth - is;
320 for (
int site = is; site < is + ns; ++site) {
321 int iv = Nvc * Nd * site;
324 for (
int ic = 0; ic < Nc; ++ic) {
327 int icg = ic * Nvc + ig;
329 v2[icr + id1 + iv] = 0.0;
330 v2[ici + id1 + iv] = 0.0;
331 v2[icr + id2 + iv] = 0.0;
332 v2[ici + id2 + iv] = 0.0;
334 v2[icr + id3 + iv] = 0.0;
335 v2[ici + id3 + iv] = 0.0;
336 v2[icr + id4 + iv] = 0.0;
337 v2[ici + id4 + iv] = 0.0;
340 v2[icr + id1 + iv] -= mult_uv_i(&Bx[icg], &w2[id2 + iv], Nc);
341 v2[ici + id1 + iv] += mult_uv_r(&Bx[icg], &w2[id2 + iv], Nc);
342 v2[icr + id2 + iv] -= mult_uv_i(&Bx[icg], &w2[id1 + iv], Nc);
343 v2[ici + id2 + iv] += mult_uv_r(&Bx[icg], &w2[id1 + iv], Nc);
345 v2[icr + id3 + iv] -= mult_uv_i(&Bx[icg], &w2[id4 + iv], Nc);
346 v2[ici + id3 + iv] += mult_uv_r(&Bx[icg], &w2[id4 + iv], Nc);
347 v2[icr + id4 + iv] -= mult_uv_i(&Bx[icg], &w2[id3 + iv], Nc);
348 v2[ici + id4 + iv] += mult_uv_r(&Bx[icg], &w2[id3 + iv], Nc);
351 v2[icr + id1 + iv] += mult_uv_r(&By[icg], &w2[id2 + iv], Nc);
352 v2[ici + id1 + iv] += mult_uv_i(&By[icg], &w2[id2 + iv], Nc);
353 v2[icr + id2 + iv] -= mult_uv_r(&By[icg], &w2[id1 + iv], Nc);
354 v2[ici + id2 + iv] -= mult_uv_i(&By[icg], &w2[id1 + iv], Nc);
356 v2[icr + id3 + iv] += mult_uv_r(&By[icg], &w2[id4 + iv], Nc);
357 v2[ici + id3 + iv] += mult_uv_i(&By[icg], &w2[id4 + iv], Nc);
358 v2[icr + id4 + iv] -= mult_uv_r(&By[icg], &w2[id3 + iv], Nc);
359 v2[ici + id4 + iv] -= mult_uv_i(&By[icg], &w2[id3 + iv], Nc);
362 v2[icr + id1 + iv] -= mult_uv_i(&Bz[icg], &w2[id1 + iv], Nc);
363 v2[ici + id1 + iv] += mult_uv_r(&Bz[icg], &w2[id1 + iv], Nc);
364 v2[icr + id2 + iv] += mult_uv_i(&Bz[icg], &w2[id2 + iv], Nc);
365 v2[ici + id2 + iv] -= mult_uv_r(&Bz[icg], &w2[id2 + iv], Nc);
367 v2[icr + id3 + iv] -= mult_uv_i(&Bz[icg], &w2[id3 + iv], Nc);
368 v2[ici + id3 + iv] += mult_uv_r(&Bz[icg], &w2[id3 + iv], Nc);
369 v2[icr + id4 + iv] += mult_uv_i(&Bz[icg], &w2[id4 + iv], Nc);
370 v2[ici + id4 + iv] -= mult_uv_r(&Bz[icg], &w2[id4 + iv], Nc);
373 v2[icr + id1 + iv] += mult_uv_i(&Ex[icg], &w2[id2 + iv], Nc);
374 v2[ici + id1 + iv] -= mult_uv_r(&Ex[icg], &w2[id2 + iv], Nc);
375 v2[icr + id2 + iv] += mult_uv_i(&Ex[icg], &w2[id1 + iv], Nc);
376 v2[ici + id2 + iv] -= mult_uv_r(&Ex[icg], &w2[id1 + iv], Nc);
378 v2[icr + id3 + iv] -= mult_uv_i(&Ex[icg], &w2[id4 + iv], Nc);
379 v2[ici + id3 + iv] += mult_uv_r(&Ex[icg], &w2[id4 + iv], Nc);
380 v2[icr + id4 + iv] -= mult_uv_i(&Ex[icg], &w2[id3 + iv], Nc);
381 v2[ici + id4 + iv] += mult_uv_r(&Ex[icg], &w2[id3 + iv], Nc);
384 v2[icr + id1 + iv] -= mult_uv_r(&Ey[icg], &w2[id2 + iv], Nc);
385 v2[ici + id1 + iv] -= mult_uv_i(&Ey[icg], &w2[id2 + iv], Nc);
386 v2[icr + id2 + iv] += mult_uv_r(&Ey[icg], &w2[id1 + iv], Nc);
387 v2[ici + id2 + iv] += mult_uv_i(&Ey[icg], &w2[id1 + iv], Nc);
389 v2[icr + id3 + iv] += mult_uv_r(&Ey[icg], &w2[id4 + iv], Nc);
390 v2[ici + id3 + iv] += mult_uv_i(&Ey[icg], &w2[id4 + iv], Nc);
391 v2[icr + id4 + iv] -= mult_uv_r(&Ey[icg], &w2[id3 + iv], Nc);
392 v2[ici + id4 + iv] -= mult_uv_i(&Ey[icg], &w2[id3 + iv], Nc);
395 v2[icr + id1 + iv] += mult_uv_i(&Ez[icg], &w2[id1 + iv], Nc);
396 v2[ici + id1 + iv] -= mult_uv_r(&Ez[icg], &w2[id1 + iv], Nc);
397 v2[icr + id2 + iv] -= mult_uv_i(&Ez[icg], &w2[id2 + iv], Nc);
398 v2[ici + id2 + iv] += mult_uv_r(&Ez[icg], &w2[id2 + iv], Nc);
400 v2[icr + id3 + iv] -= mult_uv_i(&Ez[icg], &w2[id3 + iv], Nc);
401 v2[ici + id3 + iv] += mult_uv_r(&Ez[icg], &w2[id3 + iv], Nc);
402 v2[icr + id4 + iv] += mult_uv_i(&Ez[icg], &w2[id4 + iv], Nc);
403 v2[ici + id4 + iv] -= mult_uv_r(&Ez[icg], &w2[id4 + iv], Nc);
406 v2[icr + id1 + iv] *= kappa_cSW;
407 v2[ici + id1 + iv] *= kappa_cSW;
408 v2[icr + id2 + iv] *= kappa_cSW;
409 v2[ici + id2 + iv] *= kappa_cSW;
411 v2[icr + id3 + iv] *= kappa_cSW;
412 v2[ici + id3 + iv] *= kappa_cSW;
413 v2[icr + id4 + iv] *= kappa_cSW;
414 v2[ici + id4 + iv] *= kappa_cSW;
424 assert(w.
nex() == 1);
428 int Ndf = 2 * Nc * Nc;
437 double kappa_cSW = m_kappa *
m_cSW;
439 double *w2 =
const_cast<Field *
>(&w)->ptr(0);
440 double *v2 = v.
ptr(0);
453 int is =
m_Nvol * ith / nth;
454 int ns =
m_Nvol * (ith + 1) / nth - is;
456 for (
int site = is; site < is + ns; ++site) {
457 int iv = Nvc * Nd * site;
460 for (
int ic = 0; ic < Nc; ++ic) {
463 int icg = ic * Nvc + ig;
465 v2[icr + id1 + iv] = 0.0;
466 v2[ici + id1 + iv] = 0.0;
467 v2[icr + id2 + iv] = 0.0;
468 v2[ici + id2 + iv] = 0.0;
470 v2[icr + id3 + iv] = 0.0;
471 v2[ici + id3 + iv] = 0.0;
472 v2[icr + id4 + iv] = 0.0;
473 v2[ici + id4 + iv] = 0.0;
476 v2[icr + id1 + iv] -= mult_uv_i(&Bx[icg], &w2[id2 + iv], Nc);
477 v2[ici + id1 + iv] += mult_uv_r(&Bx[icg], &w2[id2 + iv], Nc);
478 v2[icr + id2 + iv] -= mult_uv_i(&Bx[icg], &w2[id1 + iv], Nc);
479 v2[ici + id2 + iv] += mult_uv_r(&Bx[icg], &w2[id1 + iv], Nc);
481 v2[icr + id3 + iv] -= mult_uv_i(&Bx[icg], &w2[id4 + iv], Nc);
482 v2[ici + id3 + iv] += mult_uv_r(&Bx[icg], &w2[id4 + iv], Nc);
483 v2[icr + id4 + iv] -= mult_uv_i(&Bx[icg], &w2[id3 + iv], Nc);
484 v2[ici + id4 + iv] += mult_uv_r(&Bx[icg], &w2[id3 + iv], Nc);
487 v2[icr + id1 + iv] += mult_uv_r(&By[icg], &w2[id2 + iv], Nc);
488 v2[ici + id1 + iv] += mult_uv_i(&By[icg], &w2[id2 + iv], Nc);
489 v2[icr + id2 + iv] -= mult_uv_r(&By[icg], &w2[id1 + iv], Nc);
490 v2[ici + id2 + iv] -= mult_uv_i(&By[icg], &w2[id1 + iv], Nc);
492 v2[icr + id3 + iv] += mult_uv_r(&By[icg], &w2[id4 + iv], Nc);
493 v2[ici + id3 + iv] += mult_uv_i(&By[icg], &w2[id4 + iv], Nc);
494 v2[icr + id4 + iv] -= mult_uv_r(&By[icg], &w2[id3 + iv], Nc);
495 v2[ici + id4 + iv] -= mult_uv_i(&By[icg], &w2[id3 + iv], Nc);
498 v2[icr + id1 + iv] -= mult_uv_i(&Bz[icg], &w2[id1 + iv], Nc);
499 v2[ici + id1 + iv] += mult_uv_r(&Bz[icg], &w2[id1 + iv], Nc);
500 v2[icr + id2 + iv] += mult_uv_i(&Bz[icg], &w2[id2 + iv], Nc);
501 v2[ici + id2 + iv] -= mult_uv_r(&Bz[icg], &w2[id2 + iv], Nc);
503 v2[icr + id3 + iv] -= mult_uv_i(&Bz[icg], &w2[id3 + iv], Nc);
504 v2[ici + id3 + iv] += mult_uv_r(&Bz[icg], &w2[id3 + iv], Nc);
505 v2[icr + id4 + iv] += mult_uv_i(&Bz[icg], &w2[id4 + iv], Nc);
506 v2[ici + id4 + iv] -= mult_uv_r(&Bz[icg], &w2[id4 + iv], Nc);
509 v2[icr + id1 + iv] += mult_uv_i(&Ex[icg], &w2[id4 + iv], Nc);
510 v2[ici + id1 + iv] -= mult_uv_r(&Ex[icg], &w2[id4 + iv], Nc);
511 v2[icr + id2 + iv] += mult_uv_i(&Ex[icg], &w2[id3 + iv], Nc);
512 v2[ici + id2 + iv] -= mult_uv_r(&Ex[icg], &w2[id3 + iv], Nc);
514 v2[icr + id3 + iv] += mult_uv_i(&Ex[icg], &w2[id2 + iv], Nc);
515 v2[ici + id3 + iv] -= mult_uv_r(&Ex[icg], &w2[id2 + iv], Nc);
516 v2[icr + id4 + iv] += mult_uv_i(&Ex[icg], &w2[id1 + iv], Nc);
517 v2[ici + id4 + iv] -= mult_uv_r(&Ex[icg], &w2[id1 + iv], Nc);
520 v2[icr + id1 + iv] -= mult_uv_r(&Ey[icg], &w2[id4 + iv], Nc);
521 v2[ici + id1 + iv] -= mult_uv_i(&Ey[icg], &w2[id4 + iv], Nc);
522 v2[icr + id2 + iv] += mult_uv_r(&Ey[icg], &w2[id3 + iv], Nc);
523 v2[ici + id2 + iv] += mult_uv_i(&Ey[icg], &w2[id3 + iv], Nc);
525 v2[icr + id3 + iv] -= mult_uv_r(&Ey[icg], &w2[id2 + iv], Nc);
526 v2[ici + id3 + iv] -= mult_uv_i(&Ey[icg], &w2[id2 + iv], Nc);
527 v2[icr + id4 + iv] += mult_uv_r(&Ey[icg], &w2[id1 + iv], Nc);
528 v2[ici + id4 + iv] += mult_uv_i(&Ey[icg], &w2[id1 + iv], Nc);
531 v2[icr + id1 + iv] += mult_uv_i(&Ez[icg], &w2[id3 + iv], Nc);
532 v2[ici + id1 + iv] -= mult_uv_r(&Ez[icg], &w2[id3 + iv], Nc);
533 v2[icr + id2 + iv] -= mult_uv_i(&Ez[icg], &w2[id4 + iv], Nc);
534 v2[ici + id2 + iv] += mult_uv_r(&Ez[icg], &w2[id4 + iv], Nc);
536 v2[icr + id3 + iv] += mult_uv_i(&Ez[icg], &w2[id1 + iv], Nc);
537 v2[ici + id3 + iv] -= mult_uv_r(&Ez[icg], &w2[id1 + iv], Nc);
538 v2[icr + id4 + iv] -= mult_uv_i(&Ez[icg], &w2[id2 + iv], Nc);
539 v2[ici + id4 + iv] += mult_uv_r(&Ez[icg], &w2[id2 + iv], Nc);
542 v2[icr + id1 + iv] *= kappa_cSW;
543 v2[ici + id1 + iv] *= kappa_cSW;
544 v2[icr + id2 + iv] *= kappa_cSW;
545 v2[ici + id2 + iv] *= kappa_cSW;
547 v2[icr + id3 + iv] *= kappa_cSW;
548 v2[ici + id3 + iv] *= kappa_cSW;
549 v2[icr + id4 + iv] *= kappa_cSW;
550 v2[ici + id4 + iv] *= kappa_cSW;
571 const int mu,
const int nu)
611 =
static_cast<double>(
m_Nc * m_Nd * (2 + 48 *
m_Nc));
612 double flop = flop_site *
static_cast<double>(Lvol);
void scal(Field &x, const double a)
scal(x, a): x = a * x
void set_config(Field *U)
setting pointer to the gauge configuration.
void(Fopr_CloverTerm::* m_gm5)(Field &, const Field &)
static int get_num_threads()
returns available number of threads.
void Register_string(const string &, const string &)
void mult_sigmaF(Field &, const Field &)
Field_G m_Ez
field strength.
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 mult_csw_chiral(Field &, const Field &)
void gm5_chiral(Field &, const Field &)
const Field mult_gm5(const Field &f)
Field_G upper(const Field_G &, const int mu, const int nu)
constructs upper staple in mu-nu plane (wrapping void version).
void general(const char *format,...)
GammaMatrix get_GM(GMspecies spec)
double * ptr(const int jin, const int site, const int jex)
Container of Field-type object.
void set_parameters(const Parameters ¶ms)
void set_fieldstrength(Field_G &, const int, const int)
Parameters_Fopr_CloverTerm()
int fetch_int_vector(const string &key, std::valarray< int > &val) const
static int get_thread_id()
returns thread id.
Wilson-type fermion field.
void ah_Field_G(Field_G &w, const int ex)
Field_G m_v2
for calculation of field strength.
void gm5_dirac(Field &, const Field &)
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
void mult_isigma(Field_F &, const Field_F &, const int mu, const int nu)
Set of Gamma Matrices: basis class.
void init(std::string repr)
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
void crucial(const char *format,...)
double flop_count()
this returns the number of floating point operations.
void mult_csw(Field &, const Field &)
static bool Register(const std::string &realm, const creator_callback &cb)
const Field_G * m_U
pointer to gauge configuration.
static const std::string class_name
Field_G lower(const Field_G &, const int mu, const int nu)
constructs lower staple in mu-nu plane (wrapping void version).
int sg_index(int mu, int nu)
void Register_double(const string &, const double)
void Register_int_vector(const string &, const std::valarray< int > &)
std::valarray< GammaMatrix > m_SG
void mult_csw_dirac(Field &, const Field &)
int fetch_double(const string &key, double &val) const
string get_string(const string &key) const
std::valarray< int > m_boundary
void(Fopr_CloverTerm::* m_csw)(Field &, const Field &)
static VerboseLevel set_verbose_level(const std::string &str)
void forward(Field &, const Field &, const int mu)