16 #ifdef USE_PARAMETERS_FACTORY
36 #ifdef USE_PARAMETERS_FACTORY
49 inline double mult_uv_r(
double *u,
double *v)
51 return u[0] * v[0] - u[1] * v[1]
52 + u[2] * v[2] - u[3] * v[3]
53 + u[4] * v[4] - u[5] * v[5];
57 inline double mult_uv_i(
double *u,
double *v)
59 return u[0] * v[1] + u[1] * v[0]
60 + u[2] * v[3] + u[3] * v[2]
61 + u[4] * v[5] + u[5] * v[4];
68 const string str_vlevel = params.
get_string(
"verbose_level");
82 vout.
crucial(
m_vl,
"Fopr_CloverTerm: fetch error, input parameter not found.\n");
99 for (
int mu = 0; mu <
m_Ndim; ++mu) {
105 assert(bc.size() ==
m_Ndim);
112 for (
int mu = 0; mu <
m_Ndim; ++mu) {
140 m_SG.resize(m_Ndim * m_Ndim);
171 }
else if (
m_repr ==
"Chiral") {
190 (this->*
m_gm5)(v, f);
203 v1 =
const_cast<Field *
>(&f)->ptr(0);
211 for (
int site = 0; site <
m_Nvol; ++site) {
212 for (
int icc = 0; icc < Nvc; icc++) {
213 int in = Nvc * Nd * site;
214 v2[icc + id1 + in] = v1[icc + id3 + in];
215 v2[icc + id2 + in] = v1[icc + id4 + in];
216 v2[icc + id3 + in] = v1[icc + id1 + in];
217 v2[icc + id4 + in] = v1[icc + id2 + in];
232 v1 =
const_cast<Field *
>(&f)->ptr(0);
240 for (
int site = 0; site <
m_Nvol; ++site) {
241 for (
int icc = 0; icc < Nvc; icc++) {
242 int in = Nvc * Nd * site;
243 v2[icc + id1 + in] = v1[icc + id1 + in];
244 v2[icc + id2 + in] = v1[icc + id2 + in];
245 v2[icc + id3 + in] = -v1[icc + id3 + in];
246 v2[icc + id4 + in] = -v1[icc + id4 + in];
254 const int mu,
const int nu)
271 (this->*
m_csw)(v, w);
278 assert(w.
nex() == 1);
282 int Ndf = 2 * Nc * Nc;
291 double *w2 =
const_cast<Field *
>(&w)->ptr(0);
292 double *v2 = v.
ptr(0);
303 for (
int site = 0; site < Nvol; ++site) {
304 int iv = Nvc * Nd * site;
307 for (
int ic = 0; ic < Nc; ++ic) {
310 int icg = ic * Nvc + ig;
313 v2[icr + id1 + iv] -= mult_uv_i(&Bx[icg], &w2[id2 + iv]);
314 v2[ici + id1 + iv] += mult_uv_r(&Bx[icg], &w2[id2 + iv]);
315 v2[icr + id2 + iv] -= mult_uv_i(&Bx[icg], &w2[id1 + iv]);
316 v2[ici + id2 + iv] += mult_uv_r(&Bx[icg], &w2[id1 + iv]);
318 v2[icr + id3 + iv] -= mult_uv_i(&Bx[icg], &w2[id4 + iv]);
319 v2[ici + id3 + iv] += mult_uv_r(&Bx[icg], &w2[id4 + iv]);
320 v2[icr + id4 + iv] -= mult_uv_i(&Bx[icg], &w2[id3 + iv]);
321 v2[ici + id4 + iv] += mult_uv_r(&Bx[icg], &w2[id3 + iv]);
324 v2[icr + id1 + iv] += mult_uv_r(&By[icg], &w2[id2 + iv]);
325 v2[ici + id1 + iv] += mult_uv_i(&By[icg], &w2[id2 + iv]);
326 v2[icr + id2 + iv] -= mult_uv_r(&By[icg], &w2[id1 + iv]);
327 v2[ici + id2 + iv] -= mult_uv_i(&By[icg], &w2[id1 + iv]);
329 v2[icr + id3 + iv] += mult_uv_r(&By[icg], &w2[id4 + iv]);
330 v2[ici + id3 + iv] += mult_uv_i(&By[icg], &w2[id4 + iv]);
331 v2[icr + id4 + iv] -= mult_uv_r(&By[icg], &w2[id3 + iv]);
332 v2[ici + id4 + iv] -= mult_uv_i(&By[icg], &w2[id3 + iv]);
335 v2[icr + id1 + iv] -= mult_uv_i(&Bz[icg], &w2[id1 + iv]);
336 v2[ici + id1 + iv] += mult_uv_r(&Bz[icg], &w2[id1 + iv]);
337 v2[icr + id2 + iv] += mult_uv_i(&Bz[icg], &w2[id2 + iv]);
338 v2[ici + id2 + iv] -= mult_uv_r(&Bz[icg], &w2[id2 + iv]);
340 v2[icr + id3 + iv] -= mult_uv_i(&Bz[icg], &w2[id3 + iv]);
341 v2[ici + id3 + iv] += mult_uv_r(&Bz[icg], &w2[id3 + iv]);
342 v2[icr + id4 + iv] += mult_uv_i(&Bz[icg], &w2[id4 + iv]);
343 v2[ici + id4 + iv] -= mult_uv_r(&Bz[icg], &w2[id4 + iv]);
346 v2[icr + id1 + iv] += mult_uv_i(&Ex[icg], &w2[id2 + iv]);
347 v2[ici + id1 + iv] -= mult_uv_r(&Ex[icg], &w2[id2 + iv]);
348 v2[icr + id2 + iv] += mult_uv_i(&Ex[icg], &w2[id1 + iv]);
349 v2[ici + id2 + iv] -= mult_uv_r(&Ex[icg], &w2[id1 + iv]);
351 v2[icr + id3 + iv] -= mult_uv_i(&Ex[icg], &w2[id4 + iv]);
352 v2[ici + id3 + iv] += mult_uv_r(&Ex[icg], &w2[id4 + iv]);
353 v2[icr + id4 + iv] -= mult_uv_i(&Ex[icg], &w2[id3 + iv]);
354 v2[ici + id4 + iv] += mult_uv_r(&Ex[icg], &w2[id3 + iv]);
357 v2[icr + id1 + iv] -= mult_uv_r(&Ey[icg], &w2[id2 + iv]);
358 v2[ici + id1 + iv] -= mult_uv_i(&Ey[icg], &w2[id2 + iv]);
359 v2[icr + id2 + iv] += mult_uv_r(&Ey[icg], &w2[id1 + iv]);
360 v2[ici + id2 + iv] += mult_uv_i(&Ey[icg], &w2[id1 + iv]);
362 v2[icr + id3 + iv] += mult_uv_r(&Ey[icg], &w2[id4 + iv]);
363 v2[ici + id3 + iv] += mult_uv_i(&Ey[icg], &w2[id4 + iv]);
364 v2[icr + id4 + iv] -= mult_uv_r(&Ey[icg], &w2[id3 + iv]);
365 v2[ici + id4 + iv] -= mult_uv_i(&Ey[icg], &w2[id3 + iv]);
368 v2[icr + id1 + iv] += mult_uv_i(&Ez[icg], &w2[id1 + iv]);
369 v2[ici + id1 + iv] -= mult_uv_r(&Ez[icg], &w2[id1 + iv]);
370 v2[icr + id2 + iv] -= mult_uv_i(&Ez[icg], &w2[id2 + iv]);
371 v2[ici + id2 + iv] += mult_uv_r(&Ez[icg], &w2[id2 + iv]);
373 v2[icr + id3 + iv] -= mult_uv_i(&Ez[icg], &w2[id3 + iv]);
374 v2[ici + id3 + iv] += mult_uv_r(&Ez[icg], &w2[id3 + iv]);
375 v2[icr + id4 + iv] += mult_uv_i(&Ez[icg], &w2[id4 + iv]);
376 v2[ici + id4 + iv] -= mult_uv_r(&Ez[icg], &w2[id4 + iv]);
380 v *= m_kappa *
m_cSW;
387 assert(w.
nex() == 1);
391 int Ndf = 2 * Nc * Nc;
400 double *w2 =
const_cast<Field *
>(&w)->ptr(0);
401 double *v2 = v.
ptr(0);
412 for (
int site = 0; site < Nvol; ++site) {
413 int iv = Nvc * Nd * site;
416 for (
int ic = 0; ic < Nc; ++ic) {
419 int icg = ic * Nvc + ig;
422 v2[icr + id1 + iv] -= mult_uv_i(&Bx[icg], &w2[id2 + iv]);
423 v2[ici + id1 + iv] += mult_uv_r(&Bx[icg], &w2[id2 + iv]);
424 v2[icr + id2 + iv] -= mult_uv_i(&Bx[icg], &w2[id1 + iv]);
425 v2[ici + id2 + iv] += mult_uv_r(&Bx[icg], &w2[id1 + iv]);
427 v2[icr + id3 + iv] -= mult_uv_i(&Bx[icg], &w2[id4 + iv]);
428 v2[ici + id3 + iv] += mult_uv_r(&Bx[icg], &w2[id4 + iv]);
429 v2[icr + id4 + iv] -= mult_uv_i(&Bx[icg], &w2[id3 + iv]);
430 v2[ici + id4 + iv] += mult_uv_r(&Bx[icg], &w2[id3 + iv]);
433 v2[icr + id1 + iv] += mult_uv_r(&By[icg], &w2[id2 + iv]);
434 v2[ici + id1 + iv] += mult_uv_i(&By[icg], &w2[id2 + iv]);
435 v2[icr + id2 + iv] -= mult_uv_r(&By[icg], &w2[id1 + iv]);
436 v2[ici + id2 + iv] -= mult_uv_i(&By[icg], &w2[id1 + iv]);
438 v2[icr + id3 + iv] += mult_uv_r(&By[icg], &w2[id4 + iv]);
439 v2[ici + id3 + iv] += mult_uv_i(&By[icg], &w2[id4 + iv]);
440 v2[icr + id4 + iv] -= mult_uv_r(&By[icg], &w2[id3 + iv]);
441 v2[ici + id4 + iv] -= mult_uv_i(&By[icg], &w2[id3 + iv]);
444 v2[icr + id1 + iv] -= mult_uv_i(&Bz[icg], &w2[id1 + iv]);
445 v2[ici + id1 + iv] += mult_uv_r(&Bz[icg], &w2[id1 + iv]);
446 v2[icr + id2 + iv] += mult_uv_i(&Bz[icg], &w2[id2 + iv]);
447 v2[ici + id2 + iv] -= mult_uv_r(&Bz[icg], &w2[id2 + iv]);
449 v2[icr + id3 + iv] -= mult_uv_i(&Bz[icg], &w2[id3 + iv]);
450 v2[ici + id3 + iv] += mult_uv_r(&Bz[icg], &w2[id3 + iv]);
451 v2[icr + id4 + iv] += mult_uv_i(&Bz[icg], &w2[id4 + iv]);
452 v2[ici + id4 + iv] -= mult_uv_r(&Bz[icg], &w2[id4 + iv]);
455 v2[icr + id1 + iv] += mult_uv_i(&Ex[icg], &w2[id4 + iv]);
456 v2[ici + id1 + iv] -= mult_uv_r(&Ex[icg], &w2[id4 + iv]);
457 v2[icr + id2 + iv] += mult_uv_i(&Ex[icg], &w2[id3 + iv]);
458 v2[ici + id2 + iv] -= mult_uv_r(&Ex[icg], &w2[id3 + iv]);
460 v2[icr + id3 + iv] += mult_uv_i(&Ex[icg], &w2[id2 + iv]);
461 v2[ici + id3 + iv] -= mult_uv_r(&Ex[icg], &w2[id2 + iv]);
462 v2[icr + id4 + iv] += mult_uv_i(&Ex[icg], &w2[id1 + iv]);
463 v2[ici + id4 + iv] -= mult_uv_r(&Ex[icg], &w2[id1 + iv]);
466 v2[icr + id1 + iv] -= mult_uv_r(&Ey[icg], &w2[id4 + iv]);
467 v2[ici + id1 + iv] -= mult_uv_i(&Ey[icg], &w2[id4 + iv]);
468 v2[icr + id2 + iv] += mult_uv_r(&Ey[icg], &w2[id3 + iv]);
469 v2[ici + id2 + iv] += mult_uv_i(&Ey[icg], &w2[id3 + iv]);
471 v2[icr + id3 + iv] -= mult_uv_r(&Ey[icg], &w2[id2 + iv]);
472 v2[ici + id3 + iv] -= mult_uv_i(&Ey[icg], &w2[id2 + iv]);
473 v2[icr + id4 + iv] += mult_uv_r(&Ey[icg], &w2[id1 + iv]);
474 v2[ici + id4 + iv] += mult_uv_i(&Ey[icg], &w2[id1 + iv]);
477 v2[icr + id1 + iv] += mult_uv_i(&Ez[icg], &w2[id3 + iv]);
478 v2[ici + id1 + iv] -= mult_uv_r(&Ez[icg], &w2[id3 + iv]);
479 v2[icr + id2 + iv] -= mult_uv_i(&Ez[icg], &w2[id4 + iv]);
480 v2[ici + id2 + iv] += mult_uv_r(&Ez[icg], &w2[id4 + iv]);
482 v2[icr + id3 + iv] += mult_uv_i(&Ez[icg], &w2[id1 + iv]);
483 v2[ici + id3 + iv] -= mult_uv_r(&Ez[icg], &w2[id1 + iv]);
484 v2[icr + id4 + iv] -= mult_uv_i(&Ez[icg], &w2[id2 + iv]);
485 v2[ici + id4 + iv] += mult_uv_r(&Ez[icg], &w2[id2 + iv]);
489 v *= m_kappa *
m_cSW;
507 const int mu,
const int nu)
513 Field_G Cup(Nvol, 1), Cdn(Nvol, 1);
515 Field_G v(Nvol, 1), v2(Nvol, 1);
524 v.mult_Field_Gdn(0, Cup, 0, Umu, 0);
525 v.multadd_Field_Gdn(0, Cdn, 0, Umu, 0, -1.0);