26 const string str_vlevel = params.
get_string(
"verbose_level");
77 const std::vector<Field_F>& sq2)
81 std::vector<dcomplex> corr(Lt);
85 std::ofstream log_file;
97 double result = real(corr[0]);
173 const std::vector<Field_F>& sq1,
174 const std::vector<Field_F>& sq2)
181 assert(corr_global.size() == Lt);
185 gm_gm5_src = gm_src.
mult(gm5);
186 gm5_gm_sink = gm5.
mult(gm_sink);
188 std::vector<dcomplex> corr_local(Nt);
190 for (
int c0 = 0; c0 < Nc; ++c0) {
191 for (
int d0 = 0; d0 < Nd; ++d0) {
192 int d1 = gm_gm5_src.index(d0);
194 for (
int t = 0; t < Nt; ++t) {
198 sq1[c0 + Nc * d0], sq2[c0 + Nc * d1], t);
200 corr_local[t] += gm_gm5_src.value(d0) * corr_t;
207 for (
int t = 0; t < corr_global.size(); ++t) {
209 t, real(corr_global[t]), imag(corr_global[t]));
216 const std::vector<Field_F>& sq2,
217 const std::vector<int>& source_position)
222 std::vector<dcomplex> corr(Lt);
225 const int N_momentum = 10;
227 typedef std::vector<int> MomentumSet;
228 std::vector<MomentumSet> momentum_sink(N_momentum);
229 for (
int i_momentum = 0; i_momentum < N_momentum; i_momentum++) {
230 momentum_sink[i_momentum].resize(Ndim - 1);
235 momentum_sink[i_momentum][0] = 1;
236 momentum_sink[i_momentum][1] = 0;
237 momentum_sink[i_momentum][2] = 0;
241 momentum_sink[i_momentum][0] = 0;
242 momentum_sink[i_momentum][1] = 1;
243 momentum_sink[i_momentum][2] = 0;
247 momentum_sink[i_momentum][0] = 0;
248 momentum_sink[i_momentum][1] = 0;
249 momentum_sink[i_momentum][2] = 1;
253 momentum_sink[i_momentum][0] = 1;
254 momentum_sink[i_momentum][1] = 1;
255 momentum_sink[i_momentum][2] = 0;
259 momentum_sink[i_momentum][0] = 0;
260 momentum_sink[i_momentum][1] = 1;
261 momentum_sink[i_momentum][2] = 1;
265 momentum_sink[i_momentum][0] = 1;
266 momentum_sink[i_momentum][1] = 0;
267 momentum_sink[i_momentum][2] = 1;
271 momentum_sink[i_momentum][0] = 1;
272 momentum_sink[i_momentum][1] = 1;
273 momentum_sink[i_momentum][2] = 1;
277 momentum_sink[i_momentum][0] = 2;
278 momentum_sink[i_momentum][1] = 0;
279 momentum_sink[i_momentum][2] = 0;
283 momentum_sink[i_momentum][0] = 0;
284 momentum_sink[i_momentum][1] = 2;
285 momentum_sink[i_momentum][2] = 0;
289 momentum_sink[i_momentum][0] = 0;
290 momentum_sink[i_momentum][1] = 0;
291 momentum_sink[i_momentum][2] = 2;
295 std::ofstream log_file;
305 for (
int i_momentum = 0; i_momentum < N_momentum; i_momentum++) {
307 momentum_sink[i_momentum][0],
308 momentum_sink[i_momentum][1],
309 momentum_sink[i_momentum][2]);
311 sq1, sq2, source_position);
316 for (
int i_momentum = 0; i_momentum < N_momentum; i_momentum++) {
318 momentum_sink[i_momentum][0],
319 momentum_sink[i_momentum][1],
320 momentum_sink[i_momentum][2]);
322 sq1, sq2, source_position);
327 for (
int i_momentum = 0; i_momentum < N_momentum; i_momentum++) {
329 momentum_sink[i_momentum][0],
330 momentum_sink[i_momentum][1],
331 momentum_sink[i_momentum][2]);
333 sq1, sq2, source_position);
338 for (
int i_momentum = 0; i_momentum < N_momentum; i_momentum++) {
340 momentum_sink[i_momentum][0],
341 momentum_sink[i_momentum][1],
342 momentum_sink[i_momentum][2]);
344 sq1, sq2, source_position);
359 const std::vector<int>& momentum_sink,
362 const std::vector<Field_F>& sq1,
363 const std::vector<Field_F>& sq2,
364 const std::vector<int>& source_position)
371 assert(corr_global.size() == Lt);
375 gm_gm5_src = gm_src.
mult(gm5);
376 gm5_gm_sink = gm5.
mult(gm_sink);
378 std::vector<dcomplex> corr_local(Nt);
380 for (
int c0 = 0; c0 < Nc; ++c0) {
381 for (
int d0 = 0; d0 < Nd; ++d0) {
382 int d1 = gm_gm5_src.index(d0);
384 for (
int t = 0; t < Nt; ++t) {
387 contract_at_t(corr_t, momentum_sink, gm5_gm_sink, source_position,
388 sq1[c0 + Nc * d0], sq2[c0 + Nc * d1], t);
390 corr_local[t] += gm_gm5_src.value(d0) * corr_t;
397 for (
int t = 0; t < corr_global.size(); ++t) {
399 t, real(corr_global[t]), imag(corr_global[t]));
406 const std::vector<Field_F>& sq_d)
410 std::vector<dcomplex> p_corr_unity(Lt), p_corr_gamma0(Lt), p_corr_upper(Lt);
414 std::ofstream log_file;
429 for (
int it = 0; it < p_corr_unity.size(); it++) {
431 it, real(p_corr_unity[it]), imag(p_corr_unity[it]));
437 for (
int it = 0; it < p_corr_upper.size(); it++) {
438 p_corr_upper[it] = (p_corr_unity[it] + p_corr_gamma0[it]) * 0.5;
440 it, real(p_corr_upper[it]), imag(p_corr_upper[it]));
445 for (
int it = 0; it < p_corr_gamma0.size(); it++) {
447 it, real(p_corr_gamma0[it]), imag(p_corr_gamma0[it]));
456 double result = real(p_corr_gamma0[0]);
465 const std::vector<Field_F>& sq_u,
466 const std::vector<Field_F>& sq_d)
474 assert(corr_global.size() == Lt);
483 for (
int i = 0; i < Nd; i++) {
484 vout.
general(
m_vl,
"%d:\t %d %e %e \t %d %e %e \t %d %e %e \t %d %e %e \n",
486 gm5.index(i), real(gm5.value(i)), imag(gm5.value(i)),
487 c.index(i), real(c.value(i)), imag(c.value(i)),
488 cg5.index(i), real(cg5.value(i)), imag(cg5.value(i)),
497 std::vector<dcomplex> corr_local(Nt);
499 for (
int it = 0; it < Nt; it++) {
502 dcomplex sum = cmplx(0.0, 0.0);
505 for (
int i_alpha = 0; i_alpha < Nd; i_alpha++) {
506 int i_alphaP = gm.
index(i_alpha);
507 int i_alpha3 = i_alpha;
508 int i_alpha3P = i_alphaP;
510 for (
int i_alpha1P = 0; i_alpha1P < Nd; i_alpha1P++) {
511 int i_alpha2P = cg5.index(i_alpha1P);
513 for (
int ic123P = 0; ic123P < FactNc; ic123P++) {
517 dcomplex factor = gm.
value(i_alpha)
521 sq_u[ic1P + Nc * i_alpha1P],
522 sq_d[ic2P + Nc * i_alpha2P],
523 sq_u[ic3P + Nc * i_alpha3P], it);
525 sq_u[ic3P + Nc * i_alpha3P],
526 sq_d[ic2P + Nc * i_alpha2P],
527 sq_u[ic1P + Nc * i_alpha1P], it);
528 sum += factor * (sum1 - sum2);
533 corr_local[it] = sum;
542 std::vector<dcomplex>& corr_local)
547 assert(corr_global.size() == Lt);
548 assert(corr_local.size() == Nt);
550 std::vector<dcomplex> corr_tmp(Lt);
554 for (
int t = 0; t < Lt; ++t) {
555 corr_tmp[t] = cmplx(0.0, 0.0);
558 for (
int t = 0; t < Nt; ++t) {
559 int t_global = t + ipe_t * Nt;
560 corr_tmp[t_global] = corr_local[t];
563 for (
int t_global = 0; t_global < Lt; ++t_global) {
566 corr_global[t_global] = cmplx(cr_r, cr_i);
double meson_all(const std::vector< Field_F > &sq1, const std::vector< Field_F > &sq2)
void general(const char *format,...)
GammaMatrix get_GM(GMspecies spec)
Bridge::VerboseLevel m_vl
void contract_at_t(dcomplex &corr, const GammaMatrix &gm_sink, const Field_F &f1, const Field_F &f2, const int time)
Contraction of hadron for 4-spinor fermion.
void proton_correlator(std::vector< dcomplex > &corr_global, const GammaMatrix &gm, const std::vector< Field_F > &sq_u, const std::vector< Field_F > &sq_d)
void init(const std::string &filename)
static int ipe(const int dir)
logical coordinate of current proc.
void global_corr_t(std::vector< dcomplex > &corr_global, std::vector< dcomplex > &corr_local)
transform node-local correlator in t to global.
double proton_test(const std::vector< Field_F > &sq_u, const std::vector< Field_F > &sq_d)
static const std::string class_name
void meson_correlator(std::vector< dcomplex > &corr_global, const GammaMatrix &gm_sink, const GammaMatrix &gm_src, const std::vector< Field_F > &sq1, const std::vector< Field_F > &sq2)
void paranoiac(const char *format,...)
GammaMatrix mult(GammaMatrix) const
double epsilon_value(int n)
totally antisymmetric tensor: value.
double meson_momentum_all(const std::vector< Field_F > &sq1, const std::vector< Field_F > &sq2, const std::vector< int > &source_position)
int epsilon_index(int i, int n)
totally antisymmetric tensor: index.
std::ostream & getStream()
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...
std::string m_filename_output
dcomplex value(int row) const
virtual void set_parameters(const Parameters ¶ms)
string get_string(const string &key) const
void meson_momentum_correlator(std::vector< dcomplex > &corr_global, const std::vector< int > &momentum_sink, const GammaMatrix &gm_sink, const GammaMatrix &gm_src, const std::vector< Field_F > &sq1, const std::vector< Field_F > &sq2, const std::vector< int > &source_position)
std::vector< int > m_epsilon_index
index of totally antisymmetric tensor
static VerboseLevel set_verbose_level(const std::string &str)