18 #if defined USE_GROUP_SU3
20 #elif defined USE_GROUP_SU2
22 #elif defined USE_GROUP_SU_N
32 assert(U.
nvol() == Nvol);
33 assert(x.
nvol() == Nvol);
35 assert(ex1 < U.
nex());
36 assert(ex2 < x.
nex());
41 const int Ncd2 = Nc2 * Nd;
42 const int Ndf = Nc2 * Nc;
45 set_threadtask(ith, nth, is, ns, Nvol);
47 double *v = y.
ptr(0, is, ex);
48 const double *g = U.
ptr(0, is, ex1);
49 const double *w = x.
ptr(0, is, ex2);
51 for (
int site = is; site < ns; ++site) {
54 for (
int s = 0; s < Nd; ++s) {
55 for (
int ic = 0; ic < Nc; ++ic) {
56 int ig2 = ic * Nc2 + ig;
57 int iv2 = s * Nc2 + iv;
58 v[2 * ic + iv2] = mult_Gn_r(&g[ig2], &w[iv2], Nc);
59 v[2 * ic + 1 + iv2] = mult_Gn_i(&g[ig2], &w[iv2], Nc);
72 assert(U.
nvol() == Nvol);
73 assert(x.
nvol() == Nvol);
75 assert(ex1 < U.
nex());
76 assert(ex2 < x.
nex());
81 const int Ncd2 = Nc2 * Nd;
82 const int Ndf = Nc2 * Nc;
85 set_threadtask(ith, nth, is, ns, Nvol);
87 double *v = y.
ptr(0, is, ex);
88 const double *g = U.
ptr(0, is, ex1);
89 const double *w = x.
ptr(0, is, ex2);
91 for (
int site = is; site < ns; ++site) {
94 for (
int s = 0; s < Nd; ++s) {
95 for (
int ic = 0; ic < Nc; ++ic) {
96 int ig2 = ic * 2 + ig;
97 int iv2 = s * Nc2 + iv;
98 v[2 * ic + iv2] = mult_Gd_r(&g[ig2], &w[iv2], Nc);
99 v[2 * ic + 1 + iv2] = mult_Gd_i(&g[ig2], &w[iv2], Nc);