43 const std::vector<Field_F>& sq2,
44 const std::vector<Field_F>& sq3,
45 const std::vector<Field_F>& sq4)
49 std::vector<dcomplex> corr_global(Lt);
50 GammaMatrix gm_sink_12, gm_sink_34, gm_src_12, gm_src_34;
63 meson_correlator(corr_global, gm_sink_12, gm_sink_34, gm_src_12, gm_src_34, sq1, sq2, sq3, sq4);
64 double result = real(corr_global[0]);
72 meson_correlator(corr_global, gm_sink_12, gm_sink_34, gm_src_12, gm_src_34, sq1, sq2, sq3, sq4);
79 meson_correlator(corr_global, gm_sink_12, gm_sink_34, gm_src_12, gm_src_34, sq1, sq2, sq3, sq4);
86 meson_correlator(corr_global, gm_sink_12, gm_sink_34, gm_src_12, gm_src_34, sq1, sq2, sq3, sq4);
93 meson_correlator(corr_global, gm_sink_12, gm_sink_34, gm_src_12, gm_src_34, sq1, sq2, sq3, sq4);
100 meson_correlator(corr_global, gm_sink_12, gm_sink_34, gm_src_12, gm_src_34, sq1, sq2, sq3, sq4);
107 meson_correlator(corr_global, gm_sink_12, gm_sink_34, gm_src_12, gm_src_34, sq1, sq2, sq3, sq4);
114 meson_correlator(corr_global, gm_sink_12, gm_sink_34, gm_src_12, gm_src_34, sq1, sq2, sq3, sq4);
121 meson_correlator(corr_global, gm_sink_12, gm_sink_34, gm_src_12, gm_src_34, sq1, sq2, sq3, sq4);
128 meson_correlator(corr_global, gm_sink_12, gm_sink_34, gm_src_12, gm_src_34, sq1, sq2, sq3, sq4);
135 meson_correlator(corr_global, gm_sink_12, gm_sink_34, gm_src_12, gm_src_34, sq1, sq2, sq3, sq4);
142 meson_correlator(corr_global, gm_sink_12, gm_sink_34, gm_src_12, gm_src_34, sq1, sq2, sq3, sq4);
149 meson_correlator(corr_global, gm_sink_12, gm_sink_34, gm_src_12, gm_src_34, sq1, sq2, sq3, sq4);
152 if (use_outputfile) {
166 const std::vector<Field_F>& sq1,
167 const std::vector<Field_F>& sq2,
168 const std::vector<Field_F>& sq3,
169 const std::vector<Field_F>& sq4)
181 assert(corr_global.size() == Lt);
219 std::vector<dcomplex> corr_direct_1122_global(Lt);
220 std::vector<dcomplex> corr_direct_3344_global(Lt);
221 std::vector<dcomplex> corr_direct_1324_global(Lt);
222 std::vector<dcomplex> corr_direct_3142_global(Lt);
225 gm5_gm_sink_12, gm_gm5_src_12,
228 gm5_gm_sink_34, gm_gm5_src_34,
231 gm5_gm_sink_12, gm_gm5_src_34,
234 gm5_gm_sink_34, gm_gm5_src_12,
237 std::vector<dcomplex> corr_direct_global(Lt);
238 for (
int t_global = 0; t_global < Lt; ++t_global) {
239 corr_direct_global[t_global]
240 = corr_direct_1122_global[t_global] * corr_direct_3344_global[t_global]
241 + corr_direct_1324_global[t_global] * corr_direct_3142_global[t_global];
249 typedef std::vector<dcomplex> CorrSet;
250 std::vector<CorrSet> corr_cross_1124_global(Lt);
251 std::vector<CorrSet> corr_cross_3342_global(Lt);
252 std::vector<CorrSet> corr_cross_1322_global(Lt);
253 std::vector<CorrSet> corr_cross_3144_global(Lt);
254 for (
int t_global = 0; t_global < Lt; ++t_global) {
255 corr_cross_1124_global[t_global].resize(Nc * Nd * Nc * Nd);
256 corr_cross_3342_global[t_global].resize(Nc * Nd * Nc * Nd);
257 corr_cross_1322_global[t_global].resize(Nc * Nd * Nc * Nd);
258 corr_cross_3144_global[t_global].resize(Nc * Nd * Nc * Nd);
262 gm5_gm_sink_12, gm_gm5_src_12,
265 gm5_gm_sink_34, gm_gm5_src_34,
268 gm5_gm_sink_34, gm_gm5_src_12,
271 gm5_gm_sink_12, gm_gm5_src_34,
275 std::vector<dcomplex> corr_cross_global(Lt, cmplx(0.0, 0.0));
276 for (
int t_global = 0; t_global < Lt; ++t_global) {
277 for (
int c0 = 0; c0 < Nc; ++c0) {
278 for (
int d0 = 0; d0 < Nd; ++d0) {
279 for (
int c1 = 0; c1 < Nc; ++c1) {
280 for (
int d1 = 0; d1 < Nd; ++d1) {
281 int i_cd2_01 = c0 + Nc * d0 + Nc * Nd * c1 + Nc * Nd * Nc * d1;
282 int i_cd2_10 = c1 + Nc * d1 + Nc * Nd * c0 + Nc * Nd * Nc * d0;
284 dcomplex corr_1124 = corr_cross_1124_global[t_global][i_cd2_01];
285 dcomplex corr_3342 = corr_cross_3342_global[t_global][i_cd2_10];
287 corr_cross_global[t_global] += corr_1124 * corr_3342;
289 dcomplex corr_3144 = corr_cross_3144_global[t_global][i_cd2_01];
290 dcomplex corr_1322 = corr_cross_1322_global[t_global][i_cd2_10];
292 corr_cross_global[t_global] += corr_3144 * corr_1322;
301 for (
int t_global = 0; t_global < Lt; ++t_global) {
302 corr_global[t_global] = corr_direct_global[t_global] - corr_cross_global[t_global];
305 t_global, real(corr_global[t_global]), imag(corr_global[t_global]));
311 for (
int t_global = 0; t_global < Lt; ++t_global) {
313 t_global, real(corr_direct_global[t_global]), imag(corr_direct_global[t_global]));
318 for (
int t_global = 0; t_global < Lt; ++t_global) {
320 t_global, real(corr_cross_global[t_global]), imag(corr_cross_global[t_global]));
328 const std::vector<Field_F>& sq2,
329 const std::vector<Field_F>& sq3,
330 const std::vector<Field_F>& sq4,
331 const std::vector<int>& source_position)
336 std::vector<dcomplex> corr_global(Lt);
337 GammaMatrix gm_sink_12, gm_sink_34, gm_src_12, gm_src_34;
339 const int N_momentum = 10;
341 typedef std::vector<int> MomentumSet;
342 std::vector<MomentumSet> momentum_sink(N_momentum);
343 for (
int i_momentum = 0; i_momentum < N_momentum; i_momentum++) {
344 momentum_sink[i_momentum].resize(Ndim - 1);
349 momentum_sink[i_momentum][0] = 1;
350 momentum_sink[i_momentum][1] = 0;
351 momentum_sink[i_momentum][2] = 0;
355 momentum_sink[i_momentum][0] = 0;
356 momentum_sink[i_momentum][1] = 1;
357 momentum_sink[i_momentum][2] = 0;
361 momentum_sink[i_momentum][0] = 0;
362 momentum_sink[i_momentum][1] = 0;
363 momentum_sink[i_momentum][2] = 1;
367 momentum_sink[i_momentum][0] = 1;
368 momentum_sink[i_momentum][1] = 1;
369 momentum_sink[i_momentum][2] = 0;
373 momentum_sink[i_momentum][0] = 0;
374 momentum_sink[i_momentum][1] = 1;
375 momentum_sink[i_momentum][2] = 1;
379 momentum_sink[i_momentum][0] = 1;
380 momentum_sink[i_momentum][1] = 0;
381 momentum_sink[i_momentum][2] = 1;
385 momentum_sink[i_momentum][0] = 1;
386 momentum_sink[i_momentum][1] = 1;
387 momentum_sink[i_momentum][2] = 1;
391 momentum_sink[i_momentum][0] = 2;
392 momentum_sink[i_momentum][1] = 0;
393 momentum_sink[i_momentum][2] = 0;
397 momentum_sink[i_momentum][0] = 0;
398 momentum_sink[i_momentum][1] = 2;
399 momentum_sink[i_momentum][2] = 0;
403 momentum_sink[i_momentum][0] = 0;
404 momentum_sink[i_momentum][1] = 0;
405 momentum_sink[i_momentum][2] = 2;
408 if (use_outputfile) {
417 for (
int i_momentum = 0; i_momentum < N_momentum; i_momentum++) {
419 momentum_sink[i_momentum][0],
420 momentum_sink[i_momentum][1],
421 momentum_sink[i_momentum][2]);
423 gm_sink_12, gm_sink_34, gm_src_12, gm_src_34,
424 sq1, sq2, sq3, sq4, source_position);
431 for (
int i_momentum = 0; i_momentum < N_momentum; i_momentum++) {
433 momentum_sink[i_momentum][0],
434 momentum_sink[i_momentum][1],
435 momentum_sink[i_momentum][2]);
437 gm_sink_12, gm_sink_34, gm_src_12, gm_src_34,
438 sq1, sq2, sq3, sq4, source_position);
445 for (
int i_momentum = 0; i_momentum < N_momentum; i_momentum++) {
447 momentum_sink[i_momentum][0],
448 momentum_sink[i_momentum][1],
449 momentum_sink[i_momentum][2]);
451 gm_sink_12, gm_sink_34, gm_src_12, gm_src_34,
452 sq1, sq2, sq3, sq4, source_position);
459 for (
int i_momentum = 0; i_momentum < N_momentum; i_momentum++) {
461 momentum_sink[i_momentum][0],
462 momentum_sink[i_momentum][1],
463 momentum_sink[i_momentum][2]);
465 gm_sink_12, gm_sink_34, gm_src_12, gm_src_34,
466 sq1, sq2, sq3, sq4, source_position);
469 if (use_outputfile) {
479 const std::vector<int>& momentum_sink,
484 const std::vector<Field_F>& sq1,
485 const std::vector<Field_F>& sq2,
486 const std::vector<Field_F>& sq3,
487 const std::vector<Field_F>& sq4,
488 const std::vector<int>& source_position)
495 assert(corr_global.size() == Lt);
500 gm_gm5_src = gm_src.
mult(gm5);
501 gm5_gm_sink = gm5.
mult(gm_sink);
503 std::vector<dcomplex> corr_local(Nt);
505 for (
int c0 = 0; c0 < Nc; ++c0) {
506 for (
int d0 = 0; d0 < Nd; ++d0) {
507 int d1 = gm_gm5_src.
index(d0);
509 for (
int t = 0; t < Nt; ++t) {
512 contract_at_t(corr_t, momentum_sink, gm5_gm_sink, source_position,
513 sq1[c0 + Nc * d0], sq2[c0 + Nc * d1], t);
515 corr_local[t] += gm_gm5_src.
value(d0) * corr_t;
522 for (
int t = 0; t < corr_global.size(); ++t) {
524 t, real(corr_global[t]), imag(corr_global[t]));
534 const std::vector<Field_F>& sq1,
535 const std::vector<Field_F>& sq2)
541 std::vector<dcomplex> corr_local(Nt, cmplx(0.0, 0.0));
543 for (
int c0 = 0; c0 < Nc; ++c0) {
544 for (
int d0 = 0; d0 < Nd; ++d0) {
545 int d1 = gm_gm5_src.
index(d0);
547 for (
int t = 0; t < Nt; ++t) {
551 sq1[c0 + Nc * d0], sq2[c0 + Nc * d1], t);
553 corr_local[t] += gm_gm5_src.
value(d0) * corr_t;
565 const std::vector<Field_F>& sq1,
566 const std::vector<Field_F>& sq2)
573 typedef std::vector<dcomplex> CorrSet;
574 std::vector<CorrSet> corr_local_idx(Nt);
575 for (
int t = 0; t < Nt; ++t) {
576 corr_local_idx[t].resize(Nc * Nd * Nc * Nd);
578 for (
int t = 0; t < Nt; ++t) {
579 for (
int i_cd2 = 0; i_cd2 < Nc * Nd * Nc * Nd; ++i_cd2) {
580 corr_local_idx[t][i_cd2] = cmplx(0.0, 0.0);
584 for (
int c0 = 0; c0 < Nc; ++c0) {
585 for (
int d0 = 0; d0 < Nd; ++d0) {
586 for (
int c1 = 0; c1 < Nc; ++c1) {
587 for (
int d1 = 0; d1 < Nd; ++d1) {
588 int d51 = gm_gm5_src.
index(d1);
590 for (
int t = 0; t < Nt; ++t) {
594 sq1[c0 + Nc * d0], sq2[c1 + Nc * d51], t);
596 int i_cd2 = c0 + Nc * d0 + Nc * Nd * c1 + Nc * Nd * Nc * d51;
598 corr_local_idx[t][i_cd2] = gm_gm5_src.
value(d1) * corr_t;
606 for (
int i_cd2 = 0; i_cd2 < Nc * Nd * Nc * Nd; ++i_cd2) {
607 std::vector<dcomplex> corr_local(Nt);
608 std::vector<dcomplex> corr_global(Lt);
610 for (
int t = 0; t < Nt; ++t) {
611 corr_local[t] = corr_local_idx[t][i_cd2];
616 for (
int t_global = 0; t_global < Lt; ++t_global) {
617 corr_cross_global[t_global][i_cd2] = corr_global[t_global];
625 const std::vector<dcomplex>& corr_local)
630 assert(corr_global.size() == Lt);
631 assert(corr_local.size() == Nt);
635 std::vector<dcomplex> corr_tmp(Lt, cmplx(0.0, 0.0));
637 for (
int t = 0; t < Nt; ++t) {
638 int t_global = t + ipe_t * Nt;
639 corr_tmp[t_global] = corr_local[t];
642 for (
int t_global = 0; t_global < Lt; ++t_global) {
646 corr_global[t_global] = cmplx(cr_r, cr_i);