20 #if defined USE_GROUP_SU3
22 #elif defined USE_GROUP_SU2
24 #elif defined USE_GROUP_SU_N
61 vout.
crucial(
"Error in %s: irrelevant mult mode = %s\n",
141 vout.
crucial(
"Error at %s: input parameter not found.\n",
153 const std::vector<int> bc)
155 assert(bc.size() ==
m_Ndim);
170 for (
int mu = 0; mu <
m_Ndim; ++mu) {
266 if (ith == 0)
m_mode = mode;
297 }
else if (
m_repr ==
"Chiral") {
309 const double *v1 = f.
ptr(0);
310 double *v2 = w.
ptr(0);
314 const int id3 = Nvc * 2;
315 const int id4 = Nvc * 3;
321 const int is =
m_Nvol * i_thread / Nthread;
322 const int ns =
m_Nvol * (i_thread + 1) / Nthread - is;
324 for (
int site = is; site < is + ns; ++site) {
326 for (
int icc = 0; icc < Nvc; icc++) {
327 int in = Nvc * Nd * site;
329 v2[icc + id1 + in] = v1[icc + id3 + in];
330 v2[icc + id2 + in] = v1[icc + id4 + in];
331 v2[icc + id3 + in] = v1[icc + id1 + in];
332 v2[icc + id4 + in] = v1[icc + id2 + in];
344 const double *v1 = f.
ptr(0);
345 double *v2 = w.
ptr(0);
349 const int id3 = Nvc * 2;
350 const int id4 = Nvc * 3;
356 const int is =
m_Nvol * i_thread / Nthread;
357 const int ns =
m_Nvol * (i_thread + 1) / Nthread - is;
359 for (
int site = is; site < is + ns; ++site) {
361 for (
int icc = 0; icc < Nvc; icc++) {
362 int in = Nvc * Nd * site;
364 v2[icc + id1 + in] = v1[icc + id1 + in];
365 v2[icc + id2 + in] = v1[icc + id2 + in];
366 v2[icc + id3 + in] = -v1[icc + id3 + in];
367 v2[icc + id4 + in] = -v1[icc + id4 + in];
375 const int mu,
const int nu)
400 }
else if (
m_repr ==
"Chiral") {
411 assert(w.
nex() == 1);
414 const int Nvc = 2 * Nc;
415 const int Ndf = 2 * Nc * Nc;
417 const int Nvol = w.
nvol();
421 const int id3 = Nvc * 2;
422 const int id4 = Nvc * 3;
426 const double *RESTRICT w2 = w.
ptr(0);
427 double *RESTRICT v2 = v.
ptr(0);
440 const int is =
m_Nvol * i_thread / Nthread;
441 const int ns =
m_Nvol * (i_thread + 1) / Nthread - is;
443 for (
int site = is; site < is + ns; ++site) {
444 int iv = Nvc * Nd * site;
447 for (
int ic = 0; ic < Nc; ++ic) {
450 int ic_g = ic * Nvc + ig;
452 v2[ic_r + id1 + iv] = 0.0;
453 v2[ic_i + id1 + iv] = 0.0;
454 v2[ic_r + id2 + iv] = 0.0;
455 v2[ic_i + id2 + iv] = 0.0;
457 v2[ic_r + id3 + iv] = 0.0;
458 v2[ic_i + id3 + iv] = 0.0;
459 v2[ic_r + id4 + iv] = 0.0;
460 v2[ic_i + id4 + iv] = 0.0;
463 v2[ic_r + id1 + iv] -= mult_uv_i(&Bx[ic_g], &w2[id2 + iv], Nc);
464 v2[ic_i + id1 + iv] += mult_uv_r(&Bx[ic_g], &w2[id2 + iv], Nc);
465 v2[ic_r + id2 + iv] -= mult_uv_i(&Bx[ic_g], &w2[id1 + iv], Nc);
466 v2[ic_i + id2 + iv] += mult_uv_r(&Bx[ic_g], &w2[id1 + iv], Nc);
468 v2[ic_r + id3 + iv] -= mult_uv_i(&Bx[ic_g], &w2[id4 + iv], Nc);
469 v2[ic_i + id3 + iv] += mult_uv_r(&Bx[ic_g], &w2[id4 + iv], Nc);
470 v2[ic_r + id4 + iv] -= mult_uv_i(&Bx[ic_g], &w2[id3 + iv], Nc);
471 v2[ic_i + id4 + iv] += mult_uv_r(&Bx[ic_g], &w2[id3 + iv], Nc);
474 v2[ic_r + id1 + iv] += mult_uv_r(&By[ic_g], &w2[id2 + iv], Nc);
475 v2[ic_i + id1 + iv] += mult_uv_i(&By[ic_g], &w2[id2 + iv], Nc);
476 v2[ic_r + id2 + iv] -= mult_uv_r(&By[ic_g], &w2[id1 + iv], Nc);
477 v2[ic_i + id2 + iv] -= mult_uv_i(&By[ic_g], &w2[id1 + iv], Nc);
479 v2[ic_r + id3 + iv] += mult_uv_r(&By[ic_g], &w2[id4 + iv], Nc);
480 v2[ic_i + id3 + iv] += mult_uv_i(&By[ic_g], &w2[id4 + iv], Nc);
481 v2[ic_r + id4 + iv] -= mult_uv_r(&By[ic_g], &w2[id3 + iv], Nc);
482 v2[ic_i + id4 + iv] -= mult_uv_i(&By[ic_g], &w2[id3 + iv], Nc);
485 v2[ic_r + id1 + iv] -= mult_uv_i(&Bz[ic_g], &w2[id1 + iv], Nc);
486 v2[ic_i + id1 + iv] += mult_uv_r(&Bz[ic_g], &w2[id1 + iv], Nc);
487 v2[ic_r + id2 + iv] += mult_uv_i(&Bz[ic_g], &w2[id2 + iv], Nc);
488 v2[ic_i + id2 + iv] -= mult_uv_r(&Bz[ic_g], &w2[id2 + iv], Nc);
490 v2[ic_r + id3 + iv] -= mult_uv_i(&Bz[ic_g], &w2[id3 + iv], Nc);
491 v2[ic_i + id3 + iv] += mult_uv_r(&Bz[ic_g], &w2[id3 + iv], Nc);
492 v2[ic_r + id4 + iv] += mult_uv_i(&Bz[ic_g], &w2[id4 + iv], Nc);
493 v2[ic_i + id4 + iv] -= mult_uv_r(&Bz[ic_g], &w2[id4 + iv], Nc);
496 v2[ic_r + id1 + iv] += mult_uv_i(&Ex[ic_g], &w2[id4 + iv], Nc);
497 v2[ic_i + id1 + iv] -= mult_uv_r(&Ex[ic_g], &w2[id4 + iv], Nc);
498 v2[ic_r + id2 + iv] += mult_uv_i(&Ex[ic_g], &w2[id3 + iv], Nc);
499 v2[ic_i + id2 + iv] -= mult_uv_r(&Ex[ic_g], &w2[id3 + iv], Nc);
501 v2[ic_r + id3 + iv] += mult_uv_i(&Ex[ic_g], &w2[id2 + iv], Nc);
502 v2[ic_i + id3 + iv] -= mult_uv_r(&Ex[ic_g], &w2[id2 + iv], Nc);
503 v2[ic_r + id4 + iv] += mult_uv_i(&Ex[ic_g], &w2[id1 + iv], Nc);
504 v2[ic_i + id4 + iv] -= mult_uv_r(&Ex[ic_g], &w2[id1 + iv], Nc);
507 v2[ic_r + id1 + iv] -= mult_uv_r(&Ey[ic_g], &w2[id4 + iv], Nc);
508 v2[ic_i + id1 + iv] -= mult_uv_i(&Ey[ic_g], &w2[id4 + iv], Nc);
509 v2[ic_r + id2 + iv] += mult_uv_r(&Ey[ic_g], &w2[id3 + iv], Nc);
510 v2[ic_i + id2 + iv] += mult_uv_i(&Ey[ic_g], &w2[id3 + iv], Nc);
512 v2[ic_r + id3 + iv] -= mult_uv_r(&Ey[ic_g], &w2[id2 + iv], Nc);
513 v2[ic_i + id3 + iv] -= mult_uv_i(&Ey[ic_g], &w2[id2 + iv], Nc);
514 v2[ic_r + id4 + iv] += mult_uv_r(&Ey[ic_g], &w2[id1 + iv], Nc);
515 v2[ic_i + id4 + iv] += mult_uv_i(&Ey[ic_g], &w2[id1 + iv], Nc);
518 v2[ic_r + id1 + iv] += mult_uv_i(&Ez[ic_g], &w2[id3 + iv], Nc);
519 v2[ic_i + id1 + iv] -= mult_uv_r(&Ez[ic_g], &w2[id3 + iv], Nc);
520 v2[ic_r + id2 + iv] -= mult_uv_i(&Ez[ic_g], &w2[id4 + iv], Nc);
521 v2[ic_i + id2 + iv] += mult_uv_r(&Ez[ic_g], &w2[id4 + iv], Nc);
523 v2[ic_r + id3 + iv] += mult_uv_i(&Ez[ic_g], &w2[id1 + iv], Nc);
524 v2[ic_i + id3 + iv] -= mult_uv_r(&Ez[ic_g], &w2[id1 + iv], Nc);
525 v2[ic_r + id4 + iv] -= mult_uv_i(&Ez[ic_g], &w2[id2 + iv], Nc);
526 v2[ic_i + id4 + iv] += mult_uv_r(&Ez[ic_g], &w2[id2 + iv], Nc);
529 v2[ic_r + id1 + iv] *= kappa_cSW;
530 v2[ic_i + id1 + iv] *= kappa_cSW;
531 v2[ic_r + id2 + iv] *= kappa_cSW;
532 v2[ic_i + id2 + iv] *= kappa_cSW;
534 v2[ic_r + id3 + iv] *= kappa_cSW;
535 v2[ic_i + id3 + iv] *= kappa_cSW;
536 v2[ic_r + id4 + iv] *= kappa_cSW;
537 v2[ic_i + id4 + iv] *= kappa_cSW;
549 assert(w.
nex() == 1);
552 const int Nvc = 2 * Nc;
553 const int Ndf = 2 * Nc * Nc;
555 const int Nvol = w.
nvol();
559 const int id3 = Nvc * 2;
560 const int id4 = Nvc * 3;
564 const double *RESTRICT w2 = w.
ptr(0);
565 double *RESTRICT v2 = v.
ptr(0);
574 int ith, nth, is, ns;
575 set_threadtask(ith, nth, is, ns,
m_Nvol);
579 for (
int site = is; site < ns; ++site) {
580 int iv = Nvc * Nd * site;
583 for (
int ic = 0; ic < Nc; ++ic) {
586 int ic_g = ic * Nvc + ig;
588 v2[ic_r + id1 + iv] = 0.0;
589 v2[ic_i + id1 + iv] = 0.0;
590 v2[ic_r + id2 + iv] = 0.0;
591 v2[ic_i + id2 + iv] = 0.0;
593 v2[ic_r + id3 + iv] = 0.0;
594 v2[ic_i + id3 + iv] = 0.0;
595 v2[ic_r + id4 + iv] = 0.0;
596 v2[ic_i + id4 + iv] = 0.0;
599 v2[ic_r + id1 + iv] -= mult_uv_i(&Bx[ic_g], &w2[id2 + iv], Nc);
600 v2[ic_i + id1 + iv] += mult_uv_r(&Bx[ic_g], &w2[id2 + iv], Nc);
601 v2[ic_r + id2 + iv] -= mult_uv_i(&Bx[ic_g], &w2[id1 + iv], Nc);
602 v2[ic_i + id2 + iv] += mult_uv_r(&Bx[ic_g], &w2[id1 + iv], Nc);
604 v2[ic_r + id3 + iv] -= mult_uv_i(&Bx[ic_g], &w2[id4 + iv], Nc);
605 v2[ic_i + id3 + iv] += mult_uv_r(&Bx[ic_g], &w2[id4 + iv], Nc);
606 v2[ic_r + id4 + iv] -= mult_uv_i(&Bx[ic_g], &w2[id3 + iv], Nc);
607 v2[ic_i + id4 + iv] += mult_uv_r(&Bx[ic_g], &w2[id3 + iv], Nc);
610 v2[ic_r + id1 + iv] += mult_uv_r(&By[ic_g], &w2[id2 + iv], Nc);
611 v2[ic_i + id1 + iv] += mult_uv_i(&By[ic_g], &w2[id2 + iv], Nc);
612 v2[ic_r + id2 + iv] -= mult_uv_r(&By[ic_g], &w2[id1 + iv], Nc);
613 v2[ic_i + id2 + iv] -= mult_uv_i(&By[ic_g], &w2[id1 + iv], Nc);
615 v2[ic_r + id3 + iv] += mult_uv_r(&By[ic_g], &w2[id4 + iv], Nc);
616 v2[ic_i + id3 + iv] += mult_uv_i(&By[ic_g], &w2[id4 + iv], Nc);
617 v2[ic_r + id4 + iv] -= mult_uv_r(&By[ic_g], &w2[id3 + iv], Nc);
618 v2[ic_i + id4 + iv] -= mult_uv_i(&By[ic_g], &w2[id3 + iv], Nc);
621 v2[ic_r + id1 + iv] -= mult_uv_i(&Bz[ic_g], &w2[id1 + iv], Nc);
622 v2[ic_i + id1 + iv] += mult_uv_r(&Bz[ic_g], &w2[id1 + iv], Nc);
623 v2[ic_r + id2 + iv] += mult_uv_i(&Bz[ic_g], &w2[id2 + iv], Nc);
624 v2[ic_i + id2 + iv] -= mult_uv_r(&Bz[ic_g], &w2[id2 + iv], Nc);
626 v2[ic_r + id3 + iv] -= mult_uv_i(&Bz[ic_g], &w2[id3 + iv], Nc);
627 v2[ic_i + id3 + iv] += mult_uv_r(&Bz[ic_g], &w2[id3 + iv], Nc);
628 v2[ic_r + id4 + iv] += mult_uv_i(&Bz[ic_g], &w2[id4 + iv], Nc);
629 v2[ic_i + id4 + iv] -= mult_uv_r(&Bz[ic_g], &w2[id4 + iv], Nc);
632 v2[ic_r + id1 + iv] += mult_uv_i(&Ex[ic_g], &w2[id2 + iv], Nc);
633 v2[ic_i + id1 + iv] -= mult_uv_r(&Ex[ic_g], &w2[id2 + iv], Nc);
634 v2[ic_r + id2 + iv] += mult_uv_i(&Ex[ic_g], &w2[id1 + iv], Nc);
635 v2[ic_i + id2 + iv] -= mult_uv_r(&Ex[ic_g], &w2[id1 + iv], Nc);
637 v2[ic_r + id3 + iv] -= mult_uv_i(&Ex[ic_g], &w2[id4 + iv], Nc);
638 v2[ic_i + id3 + iv] += mult_uv_r(&Ex[ic_g], &w2[id4 + iv], Nc);
639 v2[ic_r + id4 + iv] -= mult_uv_i(&Ex[ic_g], &w2[id3 + iv], Nc);
640 v2[ic_i + id4 + iv] += mult_uv_r(&Ex[ic_g], &w2[id3 + iv], Nc);
643 v2[ic_r + id1 + iv] -= mult_uv_r(&Ey[ic_g], &w2[id2 + iv], Nc);
644 v2[ic_i + id1 + iv] -= mult_uv_i(&Ey[ic_g], &w2[id2 + iv], Nc);
645 v2[ic_r + id2 + iv] += mult_uv_r(&Ey[ic_g], &w2[id1 + iv], Nc);
646 v2[ic_i + id2 + iv] += mult_uv_i(&Ey[ic_g], &w2[id1 + iv], Nc);
648 v2[ic_r + id3 + iv] += mult_uv_r(&Ey[ic_g], &w2[id4 + iv], Nc);
649 v2[ic_i + id3 + iv] += mult_uv_i(&Ey[ic_g], &w2[id4 + iv], Nc);
650 v2[ic_r + id4 + iv] -= mult_uv_r(&Ey[ic_g], &w2[id3 + iv], Nc);
651 v2[ic_i + id4 + iv] -= mult_uv_i(&Ey[ic_g], &w2[id3 + iv], Nc);
654 v2[ic_r + id1 + iv] += mult_uv_i(&Ez[ic_g], &w2[id1 + iv], Nc);
655 v2[ic_i + id1 + iv] -= mult_uv_r(&Ez[ic_g], &w2[id1 + iv], Nc);
656 v2[ic_r + id2 + iv] -= mult_uv_i(&Ez[ic_g], &w2[id2 + iv], Nc);
657 v2[ic_i + id2 + iv] += mult_uv_r(&Ez[ic_g], &w2[id2 + iv], Nc);
659 v2[ic_r + id3 + iv] -= mult_uv_i(&Ez[ic_g], &w2[id3 + iv], Nc);
660 v2[ic_i + id3 + iv] += mult_uv_r(&Ez[ic_g], &w2[id3 + iv], Nc);
661 v2[ic_r + id4 + iv] += mult_uv_i(&Ez[ic_g], &w2[id4 + iv], Nc);
662 v2[ic_i + id4 + iv] -= mult_uv_r(&Ez[ic_g], &w2[id4 + iv], Nc);
665 v2[ic_r + id1 + iv] *= kappa_cSW;
666 v2[ic_i + id1 + iv] *= kappa_cSW;
667 v2[ic_r + id2 + iv] *= kappa_cSW;
668 v2[ic_i + id2 + iv] *= kappa_cSW;
670 v2[ic_r + id3 + iv] *= kappa_cSW;
671 v2[ic_i + id3 + iv] *= kappa_cSW;
672 v2[ic_r + id4 + iv] *= kappa_cSW;
673 v2[ic_i + id4 + iv] *= kappa_cSW;
695 const int mu,
const int nu)
734 const double gflop = flop_site * (Nvol * (NPE / 1.0e+9));