26 const string str_vlevel = params.
get_string(
"verbose_level");
30 int Nspc_size, Ntmp_size, Ntype;
33 err += params.
fetch_int(
"max_spatial_loop_size", Nspc_size);
34 err += params.
fetch_int(
"max_temporal_loop_size", Ntmp_size);
35 err += params.
fetch_int(
"number_of_loop_type", Ntype);
107 int Ndim_spc = Ndim - 1;
118 assert(m_Ntype_max >= 6);
150 int Ndim_spc = Ndim - 1;
169 std::vector<int> unit_v(Ndim_spc);
174 for (
size_t i = 0, n = wloop.size(); i < n; ++i) {
179 for (
int i_type = 0; i_type <
m_Ntype; ++i_type) {
181 for (
int nu = 0; nu < Ndim_spc; ++nu) {
182 unit_v[0] =
m_Nunit[i_type][nu % Ndim_spc];
183 unit_v[1] =
m_Nunit[i_type][(1 + nu) % Ndim_spc];
184 unit_v[2] =
m_Nunit[i_type][(2 + nu) % Ndim_spc];
185 int unit_v_max = unit_v[0];
186 if (unit_v_max < unit_v[1]) unit_v_max = unit_v[1];
187 if (unit_v_max < unit_v[2]) unit_v_max = unit_v[2];
189 for (
int site = 0; site <
m_Nvol_ext; ++site) {
193 int Nmax =
m_Nmax[i_type];
194 for (
int j = 0; j < Nmax; ++j) {
199 for (
int t_sep = 0; t_sep <
m_Ntmp_size; ++t_sep) {
202 i_type, nu, j + 1, t_sep + 1, wloop1);
203 wloop[
index_wloop(j, t_sep, i_type)] += wloop1 / 3.0;
211 std::ofstream log_file;
218 for (
int i_type = 0; i_type <
m_Ntype; ++i_type) {
219 int Nmax =
m_Nmax[i_type];
220 for (
int x_sep = 0; x_sep < Nmax; ++x_sep) {
221 for (
int t_sep = 0; t_sep <
m_Ntmp_size; ++t_sep) {
223 i_type + 1, x_sep + 1, t_sep + 1, wloop[
index_wloop(x_sep, t_sep, i_type)]);
251 Mat_SU_N Utmp1(Nc), Utmp2(Nc), Utmp3(Nc);
253 double wloop_r = 0.0;
254 double wloop_i = 0.0;
256 for (
int t = 0; t < Nt; ++t) {
257 for (
int z = 0; z < Nz; ++z) {
258 for (
int y = 0; y < Ny; ++y) {
259 for (
int x = 0; x < Nx; ++x) {
260 int site1 = index_ext.
site(x, y, z, t);
261 int site2 = index_ext.
site(x, y, z, t + t_sep);
263 Utmp1 = Uspc.
mat(site1, 0);
264 Utmp2 = Uspc.
mat_dag(site2, 0);
265 Utmp3 = Utmp1 * Utmp2;
267 wloop_r +=
ReTr(Utmp3);
268 wloop_i +=
ImTr(Utmp3);
278 wloop_r = wloop_r / double(Nc * Lvol);
279 wloop_i = wloop_i / double(Nc * Lvol);
287 int j,
int nu, std::vector<int>& unit_v)
295 int unit_v_max = unit_v[0];
297 if (unit_v_max < unit_v[1]) unit_v_max = unit_v[1];
298 if (unit_v_max < unit_v[2]) unit_v_max = unit_v[2];
301 Mat_SU_N Utmp1(Nc), Utmp2(Nc), Utmp3(Nc);
308 for (
int k = 0; k < 3 * unit_v_max; ++k) {
309 int kmod = (k + 3 - nu) % 3;
311 if ((kmod == 0) && (imx < unit_v[0])) {
312 for (
int t = 0; t <
m_Nt_ext; ++t) {
313 for (
int z = 0; z < Nz; ++z) {
314 for (
int y = 0; y < Ny; ++y) {
315 for (
int x = 0; x < Nx; ++x) {
316 int x2 = x + unit_v[0] * j + imx;
317 int y2 = y + unit_v[1] * j + imy;
318 int z2 = z + unit_v[2] * j + imz;
319 int site1 = index_ext.
site(x, y, z, t);
320 int site2 = index_ext.
site(x2, y2, z2, t);
322 Utmp1 = Uspc.
mat(site1, 0);
323 Utmp2 = Uext.
mat(site2, 0);
324 Utmp3 = Utmp1 * Utmp2;
333 if ((kmod == 1) && (imy < unit_v[1])) {
334 for (
int t = 0; t <
m_Nt_ext; ++t) {
335 for (
int z = 0; z < Nz; ++z) {
336 for (
int y = 0; y < Ny; ++y) {
337 for (
int x = 0; x < Nx; ++x) {
338 int x2 = x + unit_v[0] * j + imx;
339 int y2 = y + unit_v[1] * j + imy;
340 int z2 = z + unit_v[2] * j + imz;
341 int site1 = index_ext.
site(x, y, z, t);
342 int site2 = index_ext.
site(x2, y2, z2, t);
344 Utmp1 = Uspc.
mat(site1, 0);
345 Utmp2 = Uext.
mat(site2, 1);
346 Utmp3 = Utmp1 * Utmp2;
355 if ((kmod == 2) && (imz < unit_v[2])) {
356 for (
int t = 0; t <
m_Nt_ext; ++t) {
357 for (
int z = 0; z < Nz; ++z) {
358 for (
int y = 0; y < Ny; ++y) {
359 for (
int x = 0; x < Nx; ++x) {
360 int x2 = x + unit_v[0] * j + imx;
361 int y2 = y + unit_v[1] * j + imy;
362 int z2 = z + unit_v[2] * j + imz;
363 int site1 = index_ext.
site(x, y, z, t);
364 int site2 = index_ext.
site(x2, y2, z2, t);
366 Utmp1 = Uspc.
mat(site1, 0);
367 Utmp2 = Uext.
mat(site2, 2);
368 Utmp3 = Utmp1 * Utmp2;
388 int NinG = Uorg.
nin();
396 for (
int it = 0; it < Nt; ++it) {
397 for (
int iz = 0; iz < Nz; ++iz) {
398 for (
int iy = 0; iy < Ny; ++iy) {
399 for (
int ix = 0; ix < Nx; ++ix) {
400 int site1 = index_lex.
site(ix, iy, iz, it);
401 int site2 = index_ext.
site(ix, iy, iz, it);
403 for (
int ex = 0; ex < Ndim; ++ex) {
421 int size_ex = NinG * Nvol_cp * Ndim;
425 for (
int it_off = 0; it_off <
m_Ntmp_size + 1; ++it_off) {
426 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
427 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
428 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
429 int site1 = index_ext.
site(ix, iy, iz, it_off);
430 int site2 = ix + m_Nx_ext * (iy + m_Ny_ext * iz);
432 for (
int ex = 0; ex < Ndim; ++ex) {
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 = ix + m_Nx_ext * (iy + m_Ny_ext * iz);
445 int site2 = index_ext.
site(ix, iy, iz, Nt + it_off);
447 for (
int ex = 0; ex < Ndim; ++ex) {
456 for (
int iz_off = 0; iz_off <
m_Nspc_size + 1; ++iz_off) {
457 for (
int it = 0; it <
m_Nt_ext; ++it) {
458 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
459 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
460 int site1 = index_ext.
site(ix, iy, iz_off, it);
461 int site2 = ix + m_Nx_ext * (iy + m_Ny_ext * it);
463 for (
int ex = 0; ex < Ndim; ++ex) {
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 = ix + m_Nx_ext * (iy + m_Ny_ext * it);
476 int site2 = index_ext.
site(ix, iy, Nz + iz_off, it);
478 for (
int ex = 0; ex < Ndim; ++ex) {
487 for (
int iy_off = 0; iy_off < m_Nspc_size + 1; ++iy_off) {
488 for (
int it = 0; it <
m_Nt_ext; ++it) {
489 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
490 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
491 int site1 = index_ext.
site(ix, iy_off, iz, it);
492 int site2 = ix + m_Nx_ext * (iz + m_Nz_ext * it);
494 for (
int ex = 0; ex < Ndim; ++ex) {
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 = ix + m_Nx_ext * (iz + m_Nz_ext * it);
507 int site2 = index_ext.
site(ix, Ny + iy_off, iz, it);
509 for (
int ex = 0; ex < Ndim; ++ex) {
518 for (
int ix_off = 0; ix_off < m_Nspc_size + 1; ++ix_off) {
519 for (
int it = 0; it <
m_Nt_ext; ++it) {
520 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
521 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
522 int site1 = index_ext.
site(ix_off, iy, iz, it);
523 int site2 = iy + m_Ny_ext * (iz + m_Nz_ext * it);
525 for (
int ex = 0; ex < Ndim; ++ex) {
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 = iy + m_Ny_ext * (iz + m_Nz_ext * it);
538 int site2 = index_ext.
site(Nx + ix_off, iy, iz, it);
540 for (
int ex = 0; ex < Ndim; ++ex) {
557 Mat_SU_N Utrf1(Nc), Utrf2(Nc), Utmp(Nc), Utmp2(Nc);
559 int dir_t = Ndim - 1;
561 for (
int it = 1; it <
m_Nt_ext; ++it) {
562 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
563 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
564 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
565 int site0 = index_ext.
site(ix, iy, iz, it - 1);
567 Utrf1 = Uext.
mat(site0, dir_t);
568 Utrf2 = Uext.
mat_dag(site0, dir_t);
569 Utmp2 = Utrf1 * Utrf2;
572 int site1 = index_ext.
site(ix, iy, iz, it);
574 for (
int ex = 0; ex < Ndim; ++ex) {
575 Utmp = Uext.
mat(site1, ex);
576 Utmp2 = Utrf1 * Utmp;
577 Uext.
set_mat(site1, ex, Utmp2);
581 int site2 = index_ext.
site(ix - 1, iy, iz, it);
583 Utmp = Uext.
mat(site2, 0);
584 Utmp2 = Utmp * Utrf2;
589 int site2 = index_ext.
site(ix, iy - 1, iz, it);
591 Utmp = Uext.
mat(site2, 1);
592 Utmp2 = Utmp * Utrf2;
597 int site2 = index_ext.
site(ix, iy, iz - 1, it);
599 Utmp = Uext.
mat(site2, 2);
600 Utmp2 = Utmp * Utrf2;
void gfix_temporal(Field_G &Uext)
temporal gauge fixing of extended gauge field.
void detailed(const char *format,...)
const double * ptr(const int jin, const int site, const int jex) const
void set(const int jin, const int site, const int jex, double v)
int site(const int &x, const int &y, const int &z, const int &t) const
void general(const char *format,...)
int m_Ntype
number of measured loop-type
int m_Nvol_ext
volume of extended gauge config.
std::vector< unit_vec > m_Nunit
double calc_wloop(Field_G &Uspc, int t_ext)
temporal gauge fixing of extended gauge field.
int m_Nspc_size
parameters set by user
int m_Nt_ext
size of extended gauge config.
void init(const std::string &filename)
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.
void set_extfield(Field_G &Uext, Field_G &Uorg)
setup of extended gauge field.
int m_Ntmp_size
spatial size of loop
int m_Ntype_max
internal data members
static const std::string class_name
int index_wloop(int i_spc, int i_tmp, int i_type)
index for Wilson loop variable.
std::string m_filename_output
int fetch_int(const string &key, int &value) const
void init()
initial setup independent of parameters.
double ImTr(const Mat_SU_N &m)
std::vector< int > m_Nmax
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.
void paranoiac(const char *format,...)
Bridge::VerboseLevel m_vl
void crucial(const char *format,...)
virtual void set_parameters(const Parameters ¶ms)
setting parameters.
std::ostream & getStream()
Mat_SU_N mat_dag(const int site, const int mn=0) const
int non_negative(const int v)
int m_Ny_ext
size of extended gauge config.
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
void set_mat(const int site, const int mn, const Mat_SU_N &U)
Mat_SU_N mat(const int site, const int mn=0) const
int m_Nx_ext
size of extended gauge config.
static VerboseLevel set_verbose_level(const std::string &str)
double ReTr(const Mat_SU_N &m)
double measure(Field_G &U)
main function to measure Wilson loops.