19 #if defined USE_GROUP_SU3
39 assert(Nvol == v1.
nvol());
40 assert(Nvol == v2.
nvol());
44 std::vector<int> gm_index(Nd);
45 std::vector<double> corr_r(Nd), corr_i(Nd);
47 for (
int i = 0; i < Nd; ++i) {
48 gm_index[i] = gm_sink.
index(i);
53 for (
int z = 0; z < Nz; ++z) {
54 for (
int y = 0; y < Ny; ++y) {
55 for (
int x = 0; x < Nx; ++x) {
56 int site = index.
site(x, y, z, time);
58 for (
int s0 = 0; s0 < Nd; ++s0) {
59 int s1 = gm_index[s0];
61 for (
int c1 = 0; c1 < Nc; ++c1) {
62 corr_r[s0] += v1.
cmp_r(c1, s1, site) * v2.
cmp_r(c1, s0, site)
63 + v1.
cmp_i(c1, s1, site) * v2.
cmp_i(c1, s0, site);
65 corr_i[s0] += -v1.
cmp_r(c1, s1, site) * v2.
cmp_i(c1, s0, site)
66 + v1.
cmp_i(c1, s1, site) * v2.
cmp_r(c1, s0, site);
73 corr = cmplx(0.0, 0.0);
74 for (
int s0 = 0; s0 < Nd; ++s0) {
75 corr += gm_sink.
value(s0) * cmplx(corr_r[s0], corr_i[s0]);
82 const std::vector<int>& momentum_sink,
84 const std::vector<int>& source_position,
100 assert(Nvol == v1.
nvol());
101 assert(Nvol == v2.
nvol());
103 assert(momentum_sink.size() == Ndim - 1);
106 std::vector<int> gm_index(Nd);
107 std::vector<double> corr_r(Nd), corr_i(Nd);
109 for (
int i = 0; i < Nd; ++i) {
110 gm_index[i] = gm_sink.
index(i);
115 static const double PI = 4.0 * atan(1.0);
116 std::vector<double> p_unit(Ndim - 1);
117 p_unit[0] = (2.0 * PI / Lx) * momentum_sink[0];
118 p_unit[1] = (2.0 * PI / Ly) * momentum_sink[1];
119 p_unit[2] = (2.0 * PI / Lz) * momentum_sink[2];
121 std::vector<int> ipe(Ndim - 1);
126 for (
int z = 0; z < Nz; ++z) {
127 for (
int y = 0; y < Ny; ++y) {
128 for (
int x = 0; x < Nx; ++x) {
129 int site = index.site(x, y, z, time);
131 int x_global = x + ipe[0] * Nx;
132 int y_global = y + ipe[1] * Ny;
133 int z_global = z + ipe[2] * Nz;
135 double p_x = p_unit[0] * (x_global - source_position[0]);
136 double p_y = p_unit[1] * (y_global - source_position[1]);
137 double p_z = p_unit[2] * (z_global - source_position[2]);
139 double cos_p_xyz = cos(p_x + p_y + p_z);
140 double sin_p_xyz = sin(p_x + p_y + p_z);
142 for (
int s0 = 0; s0 < Nd; ++s0) {
143 int s1 = gm_index[s0];
145 double v1_v2_r = 0.0;
146 double v1_v2_i = 0.0;
148 for (
int c1 = 0; c1 < Nc; ++c1) {
149 v1_v2_r += v1.
cmp_r(c1, s1, site) * v2.
cmp_r(c1, s0, site)
150 + v1.
cmp_i(c1, s1, site) * v2.
cmp_i(c1, s0, site);
152 v1_v2_i += -v1.
cmp_r(c1, s1, site) * v2.
cmp_i(c1, s0, site)
153 + v1.
cmp_i(c1, s1, site) * v2.
cmp_r(c1, s0, site);
157 corr_r[s0] += v1_v2_r * cos_p_xyz - v1_v2_i * sin_p_xyz;
158 corr_i[s0] += v1_v2_r * sin_p_xyz + v1_v2_i * cos_p_xyz;
164 corr = cmplx(0.0, 0.0);
165 for (
int s0 = 0; s0 < Nd; ++s0) {
166 corr += gm_sink.
value(s0) * cmplx(corr_r[s0], corr_i[s0]);
178 #if defined USE_GROUP_SU3
188 assert(Nvol == v1.
nvol());
189 assert(Nvol == v2.
nvol());
190 assert(Nvol == v3.
nvol());
194 std::vector<int> gm_index(Nd);
195 std::vector<double> c_r(Nd), c_i(Nd);
197 for (
int i = 0; i < Nd; ++i) {
198 gm_index[i] = gm_sink.
index(i);
203 for (
int z = 0; z < Nz; ++z) {
204 for (
int y = 0; y < Ny; ++y) {
205 for (
int x = 0; x < Nx; ++x) {
206 int site = index.
site(x, y, z, time);
208 for (
int d1 = 0; d1 < Nd; ++d1) {
209 int d2 = gm_index[d1];
212 c_r[d1] += (v1.
cmp_r(C1, d1, site) * v2.
cmp_r(C2, d2, site)
213 - v1.
cmp_i(C1, d1, site) * v2.
cmp_i(C2, d2, site)) * v3.
cmp_r(C3, d3, site)
214 - (v1.
cmp_r(C1, d1, site) * v2.
cmp_i(C2, d2, site)
215 + v1.
cmp_i(C1, d1, site) * v2.
cmp_r(C2, d2, site)) * v3.
cmp_i(C3, d3, site);
216 c_i[d1] += (v1.
cmp_r(C1, d1, site) * v2.
cmp_r(C2, d2, site)
217 - v1.
cmp_i(C1, d1, site) * v2.
cmp_i(C2, d2, site)) * v3.
cmp_i(C3, d3, site)
218 + (v1.
cmp_r(C1, d1, site) * v2.
cmp_i(C2, d2, site)
219 + v1.
cmp_i(C1, d1, site) * v2.
cmp_r(C2, d2, site)) * v3.
cmp_r(C3, d3, site);
221 c_r[d1] += (v1.
cmp_r(C2, d1, site) * v2.
cmp_r(C3, d2, site)
222 - v1.
cmp_i(C2, d1, site) * v2.
cmp_i(C3, d2, site)) * v3.
cmp_r(C1, d3, site)
223 - (v1.
cmp_r(C2, d1, site) * v2.
cmp_i(C3, d2, site)
224 + v1.
cmp_i(C2, d1, site) * v2.
cmp_r(C3, d2, site)) * v3.
cmp_i(C1, d3, site);
225 c_i[d1] += (v1.
cmp_r(C2, d1, site) * v2.
cmp_r(C3, d2, site)
226 - v1.
cmp_i(C2, d1, site) * v2.
cmp_i(C3, d2, site)) * v3.
cmp_i(C1, d3, site)
227 + (v1.
cmp_r(C2, d1, site) * v2.
cmp_i(C3, d2, site)
228 + v1.
cmp_i(C2, d1, site) * v2.
cmp_r(C3, d2, site)) * v3.
cmp_r(C1, d3, site);
230 c_r[d1] += (v1.
cmp_r(C3, d1, site) * v2.
cmp_r(C1, d2, site)
231 - v1.
cmp_i(C3, d1, site) * v2.
cmp_i(C1, d2, site)) * v3.
cmp_r(C2, d3, site)
232 - (v1.
cmp_r(C3, d1, site) * v2.
cmp_i(C1, d2, site)
233 + v1.
cmp_i(C3, d1, site) * v2.
cmp_r(C1, d2, site)) * v3.
cmp_i(C2, d3, site);
234 c_i[d1] += (v1.
cmp_r(C3, d1, site) * v2.
cmp_r(C1, d2, site)
235 - v1.
cmp_i(C3, d1, site) * v2.
cmp_i(C1, d2, site)) * v3.
cmp_i(C2, d3, site)
236 + (v1.
cmp_r(C3, d1, site) * v2.
cmp_i(C1, d2, site)
237 + v1.
cmp_i(C3, d1, site) * v2.
cmp_r(C1, d2, site)) * v3.
cmp_r(C2, d3, site);
239 c_r[d1] -= (v1.
cmp_r(C3, d1, site) * v2.
cmp_r(C2, d2, site)
240 - v1.
cmp_i(C3, d1, site) * v2.
cmp_i(C2, d2, site)) * v3.
cmp_r(C1, d3, site)
241 - (v1.
cmp_r(C3, d1, site) * v2.
cmp_i(C2, d2, site)
242 + v1.
cmp_i(C3, d1, site) * v2.
cmp_r(C2, d2, site)) * v3.
cmp_i(C1, d3, site);
243 c_i[d1] -= (v1.
cmp_r(C3, d1, site) * v2.
cmp_r(C2, d2, site)
244 - v1.
cmp_i(C3, d1, site) * v2.
cmp_i(C2, d2, site)) * v3.
cmp_i(C1, d3, site)
245 + (v1.
cmp_r(C3, d1, site) * v2.
cmp_i(C2, d2, site)
246 + v1.
cmp_i(C3, d1, site) * v2.
cmp_r(C2, d2, site)) * v3.
cmp_r(C1, d3, site);
248 c_r[d1] -= (v1.
cmp_r(C2, d1, site) * v2.
cmp_r(C1, d2, site)
249 - v1.
cmp_i(C2, d1, site) * v2.
cmp_i(C1, d2, site)) * v3.
cmp_r(C3, d3, site)
250 - (v1.
cmp_r(C2, d1, site) * v2.
cmp_i(C1, d2, site)
251 + v1.
cmp_i(C2, d1, site) * v2.
cmp_r(C1, d2, site)) * v3.
cmp_i(C3, d3, site);
252 c_i[d1] -= (v1.
cmp_r(C2, d1, site) * v2.
cmp_r(C1, d2, site)
253 - v1.
cmp_i(C2, d1, site) * v2.
cmp_i(C1, d2, site)) * v3.
cmp_i(C3, d3, site)
254 + (v1.
cmp_r(C2, d1, site) * v2.
cmp_i(C1, d2, site)
255 + v1.
cmp_i(C2, d1, site) * v2.
cmp_r(C1, d2, site)) * v3.
cmp_r(C3, d3, site);
257 c_r[d1] -= (v1.
cmp_r(C1, d1, site) * v2.
cmp_r(C3, d2, site)
258 - v1.
cmp_i(C1, d1, site) * v2.
cmp_i(C3, d2, site)) * v3.
cmp_r(C2, d3, site)
259 - (v1.
cmp_r(C1, d1, site) * v2.
cmp_i(C3, d2, site)
260 + v1.
cmp_i(C1, d1, site) * v2.
cmp_r(C3, d2, site)) * v3.
cmp_i(C2, d3, site);
261 c_i[d1] -= (v1.
cmp_r(C1, d1, site) * v2.
cmp_r(C3, d2, site)
262 - v1.
cmp_i(C1, d1, site) * v2.
cmp_i(C3, d2, site)) * v3.
cmp_i(C2, d3, site)
263 + (v1.
cmp_r(C1, d1, site) * v2.
cmp_i(C3, d2, site)
264 + v1.
cmp_i(C1, d1, site) * v2.
cmp_r(C3, d2, site)) * v3.
cmp_r(C2, d3, site);
270 corr = cmplx(0.0, 0.0);
271 for (
int s0 = 0; s0 < Nd; ++s0) {
272 corr += gm_sink.
value(s0) * cmplx(c_r[s0], c_i[s0]);
274 #endif // (USE_GROUP_SU3)
double cmp_i(const int cc, const int s, const int site, const int e=0) const
int site(const int &x, const int &y, const int &z, const int &t) const
void contract_at_t(dcomplex &corr, const GammaMatrix &gm_sink, const Field_F &v1, const Field_F &v2, const int time)
Contraction of hadron for 4-spinor fermion.
static int ipe(const int dir)
logical coordinate of current proc.
Wilson-type fermion field.
dcomplex value(int row) const
double cmp_r(const int cc, const int s, const int site, const int e=0) const