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