Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
corr2pt_Wilson_SF.cpp
Go to the documentation of this file.
1 
15 #include "corr2pt_Wilson_SF.h"
16 #include "communicator.h"
17 
18 using std::valarray;
19 using Bridge::vout;
20 
21 //====================================================================
22 
69 const std::string Corr2pt_Wilson_SF::class_name = "Corr2pt_Wilson_SF";
70 
71 //====================================================================
72 double Corr2pt_Wilson_SF::fAfP(const valarray<Field_F>& sq1,
73  const valarray<Field_F>& sq2)
74 {
75  int Lt = CommonParameters::Lt();
76 
77  valarray<dcomplex> mcorr(Lt);
78  GammaMatrix qn_src, qn_sink;
79 
80  int Lvol = CommonParameters::Lvol();
81  int m_Nc = CommonParameters::Nc();
82  double norm = 0.5 / Lvol * Lt;
83  // double norm=0.5/Lvol*Lt*(2*0.130*2*0.130);
84  // vout.general(m_vl,"norm=%lf\n",norm);
85 
86  vout.general(m_vl, "AO correlator:\n");
87 
88  qn_src = m_gmset->get_GM(m_gmset->GAMMA5);
89  qn_sink = m_gmset->get_GM(m_gmset->GAMMA54);
90 
91  meson_corr(mcorr, qn_sink, qn_src, sq1, sq1);
92 
93  for (int t = 0; t < mcorr.size(); ++t) {
94  vout.general(m_vl, "fA %4d %20.12e %20.12e\n",
95  t, -norm * real(mcorr[t]), -norm * imag(mcorr[t]));
96  }
97 
98 
99  vout.general(m_vl, "PO correlator:\n");
100 
101  qn_src = m_gmset->get_GM(m_gmset->GAMMA5);
102  qn_sink = m_gmset->get_GM(m_gmset->GAMMA5);
103  // qn_src = m_gmset->get_GM(m_gmset->UNITY);
104  // qn_sink = m_gmset->get_GM(m_gmset->UNITY);
105 
106  meson_corr(mcorr, qn_sink, qn_src, sq1, sq1);
107 
108  for (int t = 0; t < mcorr.size(); ++t) {
109  vout.general(m_vl, "fP %4d %20.12e %20.12e\n",
110  t, norm * real(mcorr[t]), norm * imag(mcorr[t]));
111  }
112 
113 
114  vout.general(m_vl, "AO' correlator:\n");
115 
116  qn_src = m_gmset->get_GM(m_gmset->GAMMA5);
117  qn_sink = m_gmset->get_GM(m_gmset->GAMMA54);
118 
119  meson_corr(mcorr, qn_sink, qn_src, sq2, sq2);
120 
121  for (int t = 0; t < mcorr.size(); ++t) {
122  vout.general(m_vl, "fA' %4d %20.12e %20.12e\n",
123  t, norm * real(mcorr[Lt - 1 - t]), norm * imag(mcorr[Lt - 1 - t]));
124  }
125 
126 
127  vout.general(m_vl, "PO' correlator:\n");
128 
129  qn_src = m_gmset->get_GM(m_gmset->GAMMA5);
130  qn_sink = m_gmset->get_GM(m_gmset->GAMMA5);
131  // qn_src = m_gmset->get_GM(m_gmset->UNITY);
132  // qn_sink = m_gmset->get_GM(m_gmset->UNITY);
133 
134  meson_corr(mcorr, qn_sink, qn_src, sq2, sq2);
135 
136  for (int t = 0; t < mcorr.size(); ++t) {
137  vout.general(m_vl, "fP' %4d %20.12e %20.12e\n",
138  t, norm * real(mcorr[Lt - 1 - t]), norm * imag(mcorr[Lt - 1 - t]));
139  }
140 
141 
142  //- NB. use meson correlator at t=1 for a non-trivial check.
143  // double result = real(mcorr[0]);
144  double result = real(mcorr[1]);
145 
146  return result;
147 }
148 
149 
150 //====================================================================
151 double Corr2pt_Wilson_SF::meson_corr(valarray<dcomplex>& meson,
152  const GammaMatrix& qn_sink,
153  const GammaMatrix& qn_src,
154  const valarray<Field_F>& sq1,
155  const valarray<Field_F>& sq2)
156 {
157  int Nc = CommonParameters::Nc();
158  int Nd = CommonParameters::Nd();
159  int Nvol = CommonParameters::Nvol();
160  int Lt = CommonParameters::Lt();
161  int Nx = CommonParameters::Nx();
162  int Ny = CommonParameters::Ny();
163  int Nz = CommonParameters::Nz();
164  int Nt = CommonParameters::Nt();
165 
166  assert(meson.size() == Lt);
167 
168  GammaMatrix gm_src, gm_sink, gm5;
169  gm5 = m_gmset->get_GM(m_gmset->GAMMA5);
170  gm_src = qn_src.mult(gm5);
171  gm_sink = gm5.mult(qn_sink);
172 
173  Index_lex index;
174  valarray<dcomplex> corr_local(Nt);
175  valarray<double> corr_r(Nd), corr_i(Nd);
176  valarray<int> s2(Nd);
177 
178  Field corrF(2, Nvol, 2);
179 
180  corr_local = dcomplex(0.0);
181 
182  for (int c0 = 0; c0 < Nc; ++c0) {
183  for (int d0 = 0; d0 < Nd; ++d0) {
184  int d1 = gm_src.index(d0);
185  // int d1 = qn_src.index(d0);
186 
187  for (int t = 0; t < Nt; ++t) {
188  corr_r = 0.0;
189  corr_i = 0.0;
190  for (int z = 0; z < Nz; ++z) {
191  for (int y = 0; y < Ny; ++y) {
192  for (int x = 0; x < Nx; ++x) {
193  int site = index.site(x, y, z, t);
194 
195  for (int s0 = 0; s0 < Nd; ++s0) {
196  int s1 = gm_sink.index(s0);
197  //int s1 = qn_sink.index(s0);
198 
199  for (int c1 = 0; c1 < Nc; ++c1) {
200  corr_r[s0] += sq1[c0 + Nc * d0].cmp_r(c1, s1, site)
201  * sq2[c0 + Nc * d1].cmp_r(c1, s0, site)
202  + sq1[c0 + Nc * d0].cmp_i(c1, s1, site)
203  * sq2[c0 + Nc * d1].cmp_i(c1, s0, site);
204 
205  corr_i[s0] += sq1[c0 + Nc * d0].cmp_r(c1, s1, site)
206  * sq2[c0 + Nc * d1].cmp_i(c1, s0, site)
207  - sq1[c0 + Nc * d0].cmp_i(c1, s1, site)
208  * sq2[c0 + Nc * d1].cmp_r(c1, s0, site);
209  }
210  }
211  }
212  }
213  }
214  for (int s0 = 0; s0 < Nd; ++s0) {
215  dcomplex gmf = gm_src.value(d0) * gm_sink.value(s0);
216  //dcomplex gmf = qn_src.value(d0)*qn_sink.value(s0);
217  dcomplex corr = cmplx(corr_r[s0], corr_i[s0]);
218  corr_local[t] += gmf * corr;
219  //corr_local[t] += corr;
220  }
221  //vout.general(m_vl,"%d %lf %lf\n",t,real(corr_local[t]),imag(corr_local[t]));
222  }
223  }
224  }
225 
226  valarray<dcomplex> corr_tmp(Lt);
227 
228  int ipet = Communicator::ipe(3);
229  for (int t = 0; t < Lt; ++t) {
230  corr_tmp[t] = cmplx(0.0, 0.0);
231  }
232  for (int t = 0; t < Nt; ++t) {
233  int t2 = t + ipet * Nt;
234  // vout.general(m_vl,"%d %d\n",t,t2);
235  corr_tmp[t2] = corr_local[t];
236  }
237  for (int t = 0; t < Lt; ++t) {
238  double crr = real(corr_tmp[t]);
239  double cri = imag(corr_tmp[t]);
240  crr = Communicator::reduce_sum(crr);
241  cri = Communicator::reduce_sum(cri);
242  meson[t] = cmplx(crr, cri);
243  // vout.general(m_vl,"%d %lf %lf\n",t,crr,cri);
244  }
245 
246 
247  //- NB. use meson correlator at t=1 for a non-trivial check.
248  // double result = real(mcorr[0]);
249  double result = real(meson[1]);
250 
251 
252  return result;
253 }
254 
255 
256 //====================================================================
257 //============================================================END=====
Bridge::VerboseLevel m_vl
BridgeIO vout
Definition: bridgeIO.cpp:207
int site(const int &x, const int &y, const int &z, const int &t) const
Definition: index_lex.h:53
void general(const char *format,...)
Definition: bridgeIO.cpp:38
GammaMatrix get_GM(GMspecies spec)
double fAfP(const std::valarray< Field_F > &sq1, const std::valarray< Field_F > &sq2)
Container of Field-type object.
Definition: field.h:37
static int ipe(const int dir)
logical coordinate of current proc.
double meson_corr(std::valarray< dcomplex > &meson, const GammaMatrix &gm_sink, const GammaMatrix &gm_src, const std::valarray< Field_F > &sq1, const std::valarray< Field_F > &sq2)
static int Lvol()
Gamma Matrix class.
Definition: gammaMatrix.h:45
Lexical site index.
Definition: index_lex.h:34
GammaMatrix mult(GammaMatrix) const
Definition: gammaMatrix.cpp:39
GammaMatrixSet * m_gmset
static int reduce_sum(int count, double *recv_buf, double *send_buf, int pattern=0)
make a global sum of an array of double over the communicator. pattern specifies the dimensions to be...
static const std::string class_name