Bridge++  Ver. 1.3.x
wilsonLoop.cpp
Go to the documentation of this file.
1 
14 #include "wilsonLoop.h"
15 
16 #ifdef USE_PARAMETERS_FACTORY
17 #include "parameters_factory.h"
18 #endif
19 
20 
21 //- parameter entries
22 namespace {
23  void append_entry(Parameters& param)
24  {
25  param.Register_int("max_spatial_loop_size", 0);
26  param.Register_int("max_temporal_loop_size", 0);
27  param.Register_int("number_of_loop_type", 0);
28 
29  param.Register_string("verbose_level", "NULL");
30  }
31 
32 
33 #ifdef USE_PARAMETERS_FACTORY
34  bool init_param = ParametersFactory::Register("WilsonLoop", append_entry);
35 #endif
36 }
37 //- end
38 
39 //- parameters class
41 //- end
42 
43 const std::string WilsonLoop::class_name = "WilsonLoop";
44 
45 //====================================================================
47 {
48  const string str_vlevel = params.get_string("verbose_level");
49 
50  m_vl = vout.set_verbose_level(str_vlevel);
51 
52  //- fetch and check input parameters
53  int Nspc_size, Ntmp_size, Ntype;
54 
55  int err = 0;
56  err += params.fetch_int("max_spatial_loop_size", Nspc_size);
57  err += params.fetch_int("max_temporal_loop_size", Ntmp_size);
58  err += params.fetch_int("number_of_loop_type", Ntype);
59 
60  if (err) {
61  vout.crucial(m_vl, "%s: fetch error, input parameter not found.\n", class_name.c_str());
62  exit(EXIT_FAILURE);
63  }
64 
65 
66  set_parameters(Nspc_size, Ntmp_size, Ntype);
67 }
68 
69 
70 //====================================================================
71 void WilsonLoop::set_parameters(int Nspc_size, int Ntmp_size, int Ntype)
72 {
73  //- print input parameters
74  vout.general(m_vl, "Wilson loop measurement:\n");
75  vout.general(m_vl, " Nspc_size = %d\n", Nspc_size);
76  vout.general(m_vl, " Ntmp_size = %d\n", Ntmp_size);
77  vout.general(m_vl, " Ntype = %d\n", Ntype);
78 
79  //- range check
80  int err = 0;
81  err += ParameterCheck::non_negative(Nspc_size);
82  err += ParameterCheck::non_negative(Ntmp_size);
83  err += ParameterCheck::non_negative(Ntype);
84 
87  if (Ntype > 6) ++err;
88 
89  if (err) {
90  vout.crucial(m_vl, "%s: parameter range check failed.\n", class_name.c_str());
91  exit(EXIT_FAILURE);
92  }
93 
94  //- store values
95  m_Nspc_size = Nspc_size;
96  m_Ntmp_size = Ntmp_size;
97  m_Ntype = Ntype;
98 
99 
100  //- post-process
101 
102  //- set up internal data members
108 
111  m_Nmax[0] = Nspc_size;
112  m_Nmax[1] = Nspc_size;
113  m_Nmax[2] = Nspc_size / 2;
114  m_Nmax[3] = Nspc_size;
115  m_Nmax[4] = Nspc_size / 2;
116  m_Nmax[5] = Nspc_size / 2;
117 }
118 
119 
120 //====================================================================
122 {
123  int Ndim = CommonParameters::Ndim();
124 
125  assert(Ndim == 4);
126 
127  m_Ntype_max = 6;
128  int Ndim_spc = Ndim - 1;
129 
130  m_Nunit.resize(m_Ntype_max);
131  m_Nmax.resize(m_Ntype_max);
132 
133  for (int i = 0; i < m_Ntype_max; ++i) {
134  m_Nunit[i].resize(Ndim_spc);
135  }
136 
137  // The following setting explicitly depends on the definition
138  // of unit vectors.
139  assert(m_Ntype_max >= 6);
140 
141  m_Nunit[0][0] = 1;
142  m_Nunit[0][1] = 0;
143  m_Nunit[0][2] = 0;
144 
145  m_Nunit[1][0] = 1;
146  m_Nunit[1][1] = 1;
147  m_Nunit[1][2] = 0;
148 
149  m_Nunit[2][0] = 2;
150  m_Nunit[2][1] = 1;
151  m_Nunit[2][2] = 0;
152 
153  m_Nunit[3][0] = 1;
154  m_Nunit[3][1] = 1;
155  m_Nunit[3][2] = 1;
156 
157  m_Nunit[4][0] = 2;
158  m_Nunit[4][1] = 1;
159  m_Nunit[4][2] = 1;
160 
161  m_Nunit[5][0] = 2;
162  m_Nunit[5][1] = 2;
163  m_Nunit[5][2] = 1;
164 }
165 
166 
167 //====================================================================
169 {
170  int Ndim = CommonParameters::Ndim();
171  int Ndim_spc = Ndim - 1;
172 
173  int Nx = CommonParameters::Nx();
174  int Ny = CommonParameters::Ny();
175  int Nz = CommonParameters::Nz();
176  int Nt = CommonParameters::Nt();
177  // int Nvol = Nx * Ny * Nz * Nt;
178  int Nc = CommonParameters::Nc();
179 
180  Index_lex index;
182  Field_G Uext(m_Nvol_ext, Ndim);
183 
184  Field_G Uspc(m_Nvol_ext, 1);
185 
186  Mat_SU_N Uunit(Nc);
187 
188  Uunit.unit();
189 
191  set_extfield(Uext, U);
192 
194  gfix_temporal(Uext);
195 
196  std::vector<int> unit_v(Ndim_spc);
197 
198  vout.paranoiac(m_vl, "%s: measurement start.\n", class_name.c_str());
199 
200  std::vector<double> wloop(m_Nspc_size * m_Ntmp_size * m_Ntype);
201  for (size_t i = 0, n = wloop.size(); i < n; ++i) {
202  wloop[i] = 0.0;
203  }
204 
206  for (int i_type = 0; i_type < m_Ntype; ++i_type) {
208  for (int nu = 0; nu < Ndim_spc; ++nu) {
209  unit_v[0] = m_Nunit[i_type][nu % Ndim_spc];
210  unit_v[1] = m_Nunit[i_type][(1 + nu) % Ndim_spc];
211  unit_v[2] = m_Nunit[i_type][(2 + nu) % Ndim_spc];
212  int unit_v_max = unit_v[0];
213  if (unit_v_max < unit_v[1]) unit_v_max = unit_v[1];
214  if (unit_v_max < unit_v[2]) unit_v_max = unit_v[2];
215 
216  for (int site = 0; site < m_Nvol_ext; ++site) {
217  Uspc.set_mat(site, 0, Uunit);
218  }
219 
220  int Nmax = m_Nmax[i_type];
221  for (int j = 0; j < Nmax; ++j) {
222  // redef_Uspc(Uspc, Uext, j, unit_v);
223  redef_Uspc(Uspc, Uext, j, nu, unit_v);
224  //- now Uspc is product of linkv in unit_v*j direction.
225 
226  for (int t_sep = 0; t_sep < m_Ntmp_size; ++t_sep) {
227  double wloop1 = calc_wloop(Uspc, t_sep + 1);
228  vout.detailed(m_vl, " %d %d %d %d %f\n",
229  i_type, nu, j + 1, t_sep + 1, wloop1);
230  wloop[index_wloop(j, t_sep, i_type)] += wloop1 / 3.0;
231  }
232  }
233  }
234  }
235 
237  for (int i_type = 0; i_type < m_Ntype; ++i_type) {
238  int Nmax = m_Nmax[i_type];
239  for (int x_sep = 0; x_sep < Nmax; ++x_sep) {
240  for (int t_sep = 0; t_sep < m_Ntmp_size; ++t_sep) {
241  vout.general(m_vl, " %d %d %d %20.14e\n",
242  i_type + 1, x_sep + 1, t_sep + 1, wloop[index_wloop(x_sep, t_sep, i_type)]);
243  }
244  }
245  }
246 
247  vout.paranoiac(m_vl, "%s: measurement finished.\n", class_name.c_str());
248 
249  //- return maximum loop with type=0.
250  return wloop[index_wloop(m_Nmax[0] - 1, m_Ntmp_size - 1, 0)];
251 }
252 
253 
254 //====================================================================
255 double WilsonLoop::calc_wloop(Field_G& Uspc, int t_sep)
256 {
257  int Nx = CommonParameters::Nx();
258  int Ny = CommonParameters::Ny();
259  int Nz = CommonParameters::Nz();
260  int Nt = CommonParameters::Nt();
261 
263 
264  int Nc = CommonParameters::Nc();
265  Mat_SU_N Utmp1(Nc), Utmp2(Nc), Utmp3(Nc);
266 
267  double wloop_r = 0.0;
268  double wloop_i = 0.0;
269 
270  for (int t = 0; t < Nt; ++t) {
271  for (int z = 0; z < Nz; ++z) {
272  for (int y = 0; y < Ny; ++y) {
273  for (int x = 0; x < Nx; ++x) {
274  int site1 = index_ext.site(x, y, z, t);
275  int site2 = index_ext.site(x, y, z, t + t_sep);
276 
277  Utmp1 = Uspc.mat(site1, 0);
278  Utmp2 = Uspc.mat_dag(site2, 0);
279  Utmp3 = Utmp1 * Utmp2;
280 
281  wloop_r += ReTr(Utmp3);
282  wloop_i += ImTr(Utmp3);
283  }
284  }
285  }
286  }
287 
288  wloop_r = Communicator::reduce_sum(wloop_r);
289  wloop_i = Communicator::reduce_sum(wloop_i);
290 
291  int Lvol = CommonParameters::Lvol();
292  wloop_r = wloop_r / double(Nc * Lvol);
293  wloop_i = wloop_i / double(Nc * Lvol);
294 
295  return wloop_r;
296 }
297 
298 
299 //====================================================================
301  int j, int nu, std::vector<int>& unit_v)
302 {
303  int Nx = CommonParameters::Nx();
304  int Ny = CommonParameters::Ny();
305  int Nz = CommonParameters::Nz();
306  int Nt = CommonParameters::Nt();
307  int NinG = Uext.nin();
308 
310 
311  int unit_v_max = unit_v[0];
312 
313  if (unit_v_max < unit_v[1]) unit_v_max = unit_v[1];
314  if (unit_v_max < unit_v[2]) unit_v_max = unit_v[2];
315 
316  int Nc = CommonParameters::Nc();
317  Mat_SU_N Utmp1(Nc), Utmp2(Nc), Utmp3(Nc);
318 
319  int imx = 0;
320  int imy = 0;
321  int imz = 0;
322 
324  for (int k = 0; k < 3 * unit_v_max; ++k) {
325  int kmod = (k + 3 - nu) % 3;
326 
327  if ((kmod == 0) && (imx < unit_v[0])) {
328  for (int t = 0; t < m_Nt_ext; ++t) {
329  for (int z = 0; z < Nz; ++z) {
330  for (int y = 0; y < Ny; ++y) {
331  for (int x = 0; x < Nx; ++x) {
332  int x2 = x + unit_v[0] * j + imx;
333  int y2 = y + unit_v[1] * j + imy;
334  int z2 = z + unit_v[2] * j + imz;
335  int site1 = index_ext.site(x, y, z, t);
336  int site2 = index_ext.site(x2, y2, z2, t);
337 
338  Utmp1 = Uspc.mat(site1, 0);
339  Utmp2 = Uext.mat(site2, 0);
340  Utmp3 = Utmp1 * Utmp2;
341  Uspc.set_mat(site1, 0, Utmp3);
342  }
343  }
344  }
345  }
346  ++imx;
347  }
348 
349  if ((kmod == 1) && (imy < unit_v[1])) {
350  for (int t = 0; t < m_Nt_ext; ++t) {
351  for (int z = 0; z < Nz; ++z) {
352  for (int y = 0; y < Ny; ++y) {
353  for (int x = 0; x < Nx; ++x) {
354  int x2 = x + unit_v[0] * j + imx;
355  int y2 = y + unit_v[1] * j + imy;
356  int z2 = z + unit_v[2] * j + imz;
357  int site1 = index_ext.site(x, y, z, t);
358  int site2 = index_ext.site(x2, y2, z2, t);
359 
360  Utmp1 = Uspc.mat(site1, 0);
361  Utmp2 = Uext.mat(site2, 1);
362  Utmp3 = Utmp1 * Utmp2;
363  Uspc.set_mat(site1, 0, Utmp3);
364  }
365  }
366  }
367  }
368  ++imy;
369  }
370 
371  if ((kmod == 2) && (imz < unit_v[2])) {
372  for (int t = 0; t < m_Nt_ext; ++t) {
373  for (int z = 0; z < Nz; ++z) {
374  for (int y = 0; y < Ny; ++y) {
375  for (int x = 0; x < Nx; ++x) {
376  int x2 = x + unit_v[0] * j + imx;
377  int y2 = y + unit_v[1] * j + imy;
378  int z2 = z + unit_v[2] * j + imz;
379  int site1 = index_ext.site(x, y, z, t);
380  int site2 = index_ext.site(x2, y2, z2, t);
381 
382  Utmp1 = Uspc.mat(site1, 0);
383  Utmp2 = Uext.mat(site2, 2);
384  Utmp3 = Utmp1 * Utmp2;
385  Uspc.set_mat(site1, 0, Utmp3);
386  }
387  }
388  }
389  }
390  ++imz;
391  }
392  }
393 }
394 
395 
396 //====================================================================
398 {
399  int Ndim = CommonParameters::Ndim();
400  int Nx = CommonParameters::Nx();
401  int Ny = CommonParameters::Ny();
402  int Nz = CommonParameters::Nz();
403  int Nt = CommonParameters::Nt();
404  int NinG = Uorg.nin();
405 
406  Index_lex index_lex;
408 
409  Uext.set(0.0);
410 
411  //- bulk part of extended field same to the original field.
412  for (int it = 0; it < Nt; ++it) {
413  for (int iz = 0; iz < Nz; ++iz) {
414  for (int iy = 0; iy < Ny; ++iy) {
415  for (int ix = 0; ix < Nx; ++ix) {
416  int site1 = index_lex.site(ix, iy, iz, it);
417  int site2 = index_ext.site(ix, iy, iz, it);
418 
419  for (int ex = 0; ex < Ndim; ++ex) {
420  Uext.set_mat(site2, ex, Uorg.mat(site1, ex));
421  }
422  }
423  }
424  }
425  }
426 
427  //- setting maximum size of volume for buffer field.
428  int Nmin_ext = m_Nx_ext;
429  if (m_Ny_ext < Nmin_ext) Nmin_ext = m_Ny_ext;
430  if (m_Nz_ext < Nmin_ext) Nmin_ext = m_Nz_ext;
431  if (m_Nt_ext < Nmin_ext) Nmin_ext = m_Nt_ext;
432  int Nvol_cp = m_Nvol_ext / Nmin_ext;
433 
434  //- buffer field for copy.
435  Field_G Ucp1(Nvol_cp, Ndim);
436  Field_G Ucp2(Nvol_cp, Ndim);
437  int size_ex = NinG * Nvol_cp * Ndim;
438 
439 
440  //- exchange in t-direction
441  for (int it_off = 0; it_off < m_Ntmp_size + 1; ++it_off) {
442  for (int iz = 0; iz < m_Nz_ext; ++iz) {
443  for (int iy = 0; iy < m_Ny_ext; ++iy) {
444  for (int ix = 0; ix < m_Nx_ext; ++ix) {
445  int site1 = index_ext.site(ix, iy, iz, it_off);
446  int site2 = ix + m_Nx_ext * (iy + m_Ny_ext * iz);
447 
448  for (int ex = 0; ex < Ndim; ++ex) {
449  Ucp1.set_mat(site2, ex, Uext.mat(site1, ex));
450  }
451  }
452  }
453  }
454 
455  Communicator::exchange(size_ex, Ucp2.ptr(0), Ucp1.ptr(0), 3, 1, 0);
456 
457  for (int iz = 0; iz < m_Nz_ext; ++iz) {
458  for (int iy = 0; iy < m_Ny_ext; ++iy) {
459  for (int ix = 0; ix < m_Nx_ext; ++ix) {
460  int site1 = ix + m_Nx_ext * (iy + m_Ny_ext * iz);
461  int site2 = index_ext.site(ix, iy, iz, Nt + it_off);
462 
463  for (int ex = 0; ex < Ndim; ++ex) {
464  Uext.set_mat(site2, ex, Ucp2.mat(site1, ex));
465  }
466  }
467  }
468  }
469  } // end of it_off loop.
470 
471  //- exchange in z-direction
472  for (int iz_off = 0; iz_off < m_Nspc_size + 1; ++iz_off) {
473  for (int it = 0; it < m_Nt_ext; ++it) {
474  for (int iy = 0; iy < m_Ny_ext; ++iy) {
475  for (int ix = 0; ix < m_Nx_ext; ++ix) {
476  int site1 = index_ext.site(ix, iy, iz_off, it);
477  int site2 = ix + m_Nx_ext * (iy + m_Ny_ext * it);
478 
479  for (int ex = 0; ex < Ndim; ++ex) {
480  Ucp1.set_mat(site2, ex, Uext.mat(site1, ex));
481  }
482  }
483  }
484  }
485 
486  Communicator::exchange(size_ex, Ucp2.ptr(0), Ucp1.ptr(0), 2, 1, 0);
487 
488  for (int it = 0; it < m_Nt_ext; ++it) {
489  for (int iy = 0; iy < m_Ny_ext; ++iy) {
490  for (int ix = 0; ix < m_Nx_ext; ++ix) {
491  int site1 = ix + m_Nx_ext * (iy + m_Ny_ext * it);
492  int site2 = index_ext.site(ix, iy, Nz + iz_off, it);
493 
494  for (int ex = 0; ex < Ndim; ++ex) {
495  Uext.set_mat(site2, ex, Ucp2.mat(site1, ex));
496  }
497  }
498  }
499  }
500  } // end of iz_off loop.
501 
502  //- exchange in y-direction
503  for (int iy_off = 0; iy_off < m_Nspc_size + 1; ++iy_off) {
504  for (int it = 0; it < m_Nt_ext; ++it) {
505  for (int iz = 0; iz < m_Nz_ext; ++iz) {
506  for (int ix = 0; ix < m_Nx_ext; ++ix) {
507  int site1 = index_ext.site(ix, iy_off, iz, it);
508  int site2 = ix + m_Nx_ext * (iz + m_Nz_ext * it);
509 
510  for (int ex = 0; ex < Ndim; ++ex) {
511  Ucp1.set_mat(site2, ex, Uext.mat(site1, ex));
512  }
513  }
514  }
515  }
516 
517  Communicator::exchange(size_ex, Ucp2.ptr(0), Ucp1.ptr(0), 1, 1, 0);
518 
519  for (int it = 0; it < m_Nt_ext; ++it) {
520  for (int iz = 0; iz < m_Nz_ext; ++iz) {
521  for (int ix = 0; ix < m_Nx_ext; ++ix) {
522  int site1 = ix + m_Nx_ext * (iz + m_Nz_ext * it);
523  int site2 = index_ext.site(ix, Ny + iy_off, iz, it);
524 
525  for (int ex = 0; ex < Ndim; ++ex) {
526  Uext.set_mat(site2, ex, Ucp2.mat(site1, ex));
527  }
528  }
529  }
530  }
531  } // end of iy_off loop.
532 
533  //- exchange in x-direction
534  for (int ix_off = 0; ix_off < m_Nspc_size + 1; ++ix_off) {
535  for (int it = 0; it < m_Nt_ext; ++it) {
536  for (int iz = 0; iz < m_Nz_ext; ++iz) {
537  for (int iy = 0; iy < m_Ny_ext; ++iy) {
538  int site1 = index_ext.site(ix_off, iy, iz, it);
539  int site2 = iy + m_Ny_ext * (iz + m_Nz_ext * it);
540 
541  for (int ex = 0; ex < Ndim; ++ex) {
542  Ucp1.set_mat(site2, ex, Uext.mat(site1, ex));
543  }
544  }
545  }
546  }
547 
548  Communicator::exchange(size_ex, Ucp2.ptr(0), Ucp1.ptr(0), 0, 1, 0);
549 
550  for (int it = 0; it < m_Nt_ext; ++it) {
551  for (int iz = 0; iz < m_Nz_ext; ++iz) {
552  for (int iy = 0; iy < m_Ny_ext; ++iy) {
553  int site1 = iy + m_Ny_ext * (iz + m_Nz_ext * it);
554  int site2 = index_ext.site(Nx + ix_off, iy, iz, it);
555 
556  for (int ex = 0; ex < Ndim; ++ex) {
557  Uext.set_mat(site2, ex, Ucp2.mat(site1, ex));
558  }
559  }
560  }
561  }
562  } // end of ix_off loop.
563 }
564 
565 
566 //====================================================================
568 {
569  int Ndim = CommonParameters::Ndim();
570  int Nc = CommonParameters::Nc();
571 
573  Mat_SU_N Utrf1(Nc), Utrf2(Nc), Utmp(Nc), Utmp2(Nc);
574 
575  int dir_t = Ndim - 1;
576 
577  for (int it = 1; it < m_Nt_ext; ++it) {
578  for (int iz = 0; iz < m_Nz_ext; ++iz) {
579  for (int iy = 0; iy < m_Ny_ext; ++iy) {
580  for (int ix = 0; ix < m_Nx_ext; ++ix) {
581  int site0 = index_ext.site(ix, iy, iz, it - 1);
582 
583  Utrf1 = Uext.mat(site0, dir_t);
584  Utrf2 = Uext.mat_dag(site0, dir_t);
585  Utmp2 = Utrf1 * Utrf2;
586  Uext.set_mat(site0, 3, Utmp2);
587 
588  int site1 = index_ext.site(ix, iy, iz, it);
589 
590  for (int ex = 0; ex < Ndim; ++ex) {
591  Utmp = Uext.mat(site1, ex);
592  Utmp2 = Utrf1 * Utmp;
593  Uext.set_mat(site1, ex, Utmp2);
594  }
595 
596  if (ix > 0) {
597  int site2 = index_ext.site(ix - 1, iy, iz, it);
598 
599  Utmp = Uext.mat(site2, 0);
600  Utmp2 = Utmp * Utrf2;
601  Uext.set_mat(site2, 0, Utmp2);
602  }
603 
604  if (iy > 0) {
605  int site2 = index_ext.site(ix, iy - 1, iz, it);
606 
607  Utmp = Uext.mat(site2, 1);
608  Utmp2 = Utmp * Utrf2;
609  Uext.set_mat(site2, 1, Utmp2);
610  }
611 
612  if (iz > 0) {
613  int site2 = index_ext.site(ix, iy, iz - 1, it);
614 
615  Utmp = Uext.mat(site2, 2);
616  Utmp2 = Utmp * Utrf2;
617  Uext.set_mat(site2, 2, Utmp2);
618  }
619  }
620  }
621  }
622  }
623 }
624 
625 
626 //====================================================================
627 //============================================================END=====
void gfix_temporal(Field_G &Uext)
temporal gauge fixing of extended gauge field.
Definition: wilsonLoop.cpp:567
BridgeIO vout
Definition: bridgeIO.cpp:278
void detailed(const char *format,...)
Definition: bridgeIO.cpp:82
void Register_string(const string &, const string &)
Definition: parameters.cpp:351
const double * ptr(const int jin, const int site, const int jex) const
Definition: field.h:133
void set(const int jin, const int site, const int jex, double v)
Definition: field.h:155
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:65
void Register_int(const string &, const int)
Definition: parameters.cpp:330
int m_Ntype
number of measured loop-type
Definition: wilsonLoop.h:63
int m_Nvol_ext
volume of extended gauge config.
Definition: wilsonLoop.h:71
std::vector< unit_vec > m_Nunit
Definition: wilsonLoop.h:74
double calc_wloop(Field_G &Uspc, int t_ext)
temporal gauge fixing of extended gauge field.
Definition: wilsonLoop.cpp:255
int m_Nspc_size
parameters set by user
Definition: wilsonLoop.h:61
int m_Nt_ext
size of extended gauge config.
Definition: wilsonLoop.h:70
Class for parameters.
Definition: parameters.h:38
static int Lvol()
void redef_Uspc(Field_G &Uspc, Field_G &Uext, int j, int nu, std::vector< int > &unit_v)
redefinition of product of spatial link variables.
Definition: wilsonLoop.cpp:300
void set_extfield(Field_G &Uext, Field_G &Uorg)
setup of extended gauge field.
Definition: wilsonLoop.cpp:397
int m_Ntmp_size
spatial size of loop
Definition: wilsonLoop.h:62
int nin() const
Definition: field.h:115
int m_Ntype_max
internal data members
Definition: wilsonLoop.h:66
SU(N) gauge field.
Definition: field_G.h:38
static const std::string class_name
Definition: wilsonLoop.h:54
int index_wloop(int i_spc, int i_tmp, int i_type)
index for Wilson loop variable.
Definition: wilsonLoop.h:104
void init()
initial setup independent of parameters.
Definition: wilsonLoop.cpp:121
double ImTr(const Mat_SU_N &m)
Definition: mat_SU_N.h:500
std::vector< int > m_Nmax
Definition: wilsonLoop.h:75
static int exchange(int count, double *recv_buf, double *send_buf, int idir, int ipm, int tag)
receive array of double from upstream specified by idir and ipm, and send array to downstream...
int m_Nz_ext
size of extended gauge config.
Definition: wilsonLoop.h:69
Lexical site index.
Definition: index_lex.h:34
void paranoiac(const char *format,...)
Definition: bridgeIO.cpp:99
Bridge::VerboseLevel m_vl
Definition: wilsonLoop.h:57
void crucial(const char *format,...)
Definition: bridgeIO.cpp:48
static bool Register(const std::string &realm, const creator_callback &cb)
virtual void set_parameters(const Parameters &params)
setting parameters.
Definition: wilsonLoop.cpp:46
Mat_SU_N mat_dag(const int site, const int mn=0) const
Definition: field_G.h:126
int non_negative(const int v)
Definition: checker.cpp:21
int m_Ny_ext
size of extended gauge config.
Definition: wilsonLoop.h:68
Mat_SU_N & unit()
Definition: mat_SU_N.h:373
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...
string get_string(const string &key) const
Definition: parameters.cpp:87
void set_mat(const int site, const int mn, const Mat_SU_N &U)
Definition: field_G.h:159
Mat_SU_N mat(const int site, const int mn=0) const
Definition: field_G.h:113
int fetch_int(const string &key, int &val) const
Definition: parameters.cpp:141
int m_Nx_ext
size of extended gauge config.
Definition: wilsonLoop.h:67
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:28
double ReTr(const Mat_SU_N &m)
Definition: mat_SU_N.h:488
double measure(Field_G &U)
main function to measure Wilson loops.
Definition: wilsonLoop.cpp:168