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