16 #ifdef USE_PARAMETERS_FACTORY
34 #ifdef USE_PARAMETERS_FACTORY
47 const string str_vlevel = params.
get_string(
"verbose_level");
52 int Nspc_size, Ntmp_size, Ntype;
55 err += params.
fetch_int(
"max_spatial_loop_size", Nspc_size);
56 err += params.
fetch_int(
"max_temporal_loop_size", Ntmp_size);
57 err += params.
fetch_int(
"number_of_loop_type", Ntype);
60 vout.
crucial(
m_vl,
"WilsonLoop: fetch error, input parameter not found.\n");
112 m_Nmax[2] = Nspc_size / 2;
114 m_Nmax[4] = Nspc_size / 2;
115 m_Nmax[5] = Nspc_size / 2;
127 int Ndim_spc = Ndim - 1;
138 assert(m_Ntype_max >= 6);
170 int Ndim_spc = Ndim - 1;
176 int Nvol = Nx * Ny * Nz * Nt;
195 valarray<int> unit_v(Ndim_spc);
203 for (
int i_type = 0; i_type <
m_Ntype; ++i_type) {
205 for (
int nu = 0; nu < Ndim_spc; ++nu) {
206 unit_v[0] =
m_Nunit[i_type][nu % Ndim_spc];
207 unit_v[1] =
m_Nunit[i_type][(1 + nu) % Ndim_spc];
208 unit_v[2] =
m_Nunit[i_type][(2 + nu) % Ndim_spc];
209 int unit_v_max = unit_v[0];
210 if (unit_v_max < unit_v[1]) unit_v_max = unit_v[1];
211 if (unit_v_max < unit_v[2]) unit_v_max = unit_v[2];
213 for (
int site = 0; site <
m_Nvol_ext; ++site) {
217 int Nmax =
m_Nmax[i_type];
218 for (
int j = 0; j < Nmax; ++j) {
223 for (
int t_sep = 0; t_sep <
m_Ntmp_size; ++t_sep) {
226 i_type, nu, j + 1, t_sep + 1, wloop1);
227 wloop[
index_wloop(j, t_sep, i_type)] += wloop1 / 3.0;
234 for (
int i_type = 0; i_type <
m_Ntype; ++i_type) {
235 int Nmax =
m_Nmax[i_type];
236 for (
int x_sep = 0; x_sep < Nmax; ++x_sep) {
237 for (
int t_sep = 0; t_sep <
m_Ntmp_size; ++t_sep) {
239 i_type + 1, x_sep + 1, t_sep + 1, wloop[
index_wloop(x_sep, t_sep, i_type)]);
262 Mat_SU_N Utmp1(Nc), Utmp2(Nc), Utmp3(Nc);
264 double wloop_r = 0.0;
265 double wloop_i = 0.0;
267 for (
int t = 0; t < Nt; ++t) {
268 for (
int z = 0; z < Nz; ++z) {
269 for (
int y = 0; y < Ny; ++y) {
270 for (
int x = 0; x < Nx; ++x) {
271 int site1 = index_ext.
site(x, y, z, t);
272 int site2 = index_ext.
site(x, y, z, t + t_sep);
274 Utmp1 = Uspc.
mat(site1, 0);
275 Utmp2 = Uspc.
mat_dag(site2, 0);
276 Utmp3 = Utmp1 * Utmp2;
278 wloop_r +=
ReTr(Utmp3);
279 wloop_i +=
ImTr(Utmp3);
289 wloop_r = wloop_r / double(Nc * Lvol);
290 wloop_i = wloop_i / double(Nc * Lvol);
298 int j,
int nu, valarray<int>& unit_v)
304 int NinG = Uext.
nin();
308 int unit_v_max = unit_v[0];
310 if (unit_v_max < unit_v[1]) unit_v_max = unit_v[1];
311 if (unit_v_max < unit_v[2]) unit_v_max = unit_v[2];
314 Mat_SU_N Utmp1(Nc), Utmp2(Nc), Utmp3(Nc);
321 for (
int k = 0; k < 3 * unit_v_max; ++k) {
322 int kmod = (k + 3 - nu) % 3;
324 if ((kmod == 0) && (imx < unit_v[0])) {
325 for (
int t = 0; t <
m_Nt_ext; ++t) {
326 for (
int z = 0; z < Nz; ++z) {
327 for (
int y = 0; y < Ny; ++y) {
328 for (
int x = 0; x < Nx; ++x) {
329 int x2 = x + unit_v[0] * j + imx;
330 int y2 = y + unit_v[1] * j + imy;
331 int z2 = z + unit_v[2] * j + imz;
332 int site1 = index_ext.
site(x, y, z, t);
333 int site2 = index_ext.
site(x2, y2, z2, t);
335 Utmp1 = Uspc.
mat(site1, 0);
336 Utmp2 = Uext.
mat(site2, 0);
337 Utmp3 = Utmp1 * Utmp2;
346 if ((kmod == 1) && (imy < unit_v[1])) {
347 for (
int t = 0; t <
m_Nt_ext; ++t) {
348 for (
int z = 0; z < Nz; ++z) {
349 for (
int y = 0; y < Ny; ++y) {
350 for (
int x = 0; x < Nx; ++x) {
351 int x2 = x + unit_v[0] * j + imx;
352 int y2 = y + unit_v[1] * j + imy;
353 int z2 = z + unit_v[2] * j + imz;
354 int site1 = index_ext.
site(x, y, z, t);
355 int site2 = index_ext.
site(x2, y2, z2, t);
357 Utmp1 = Uspc.
mat(site1, 0);
358 Utmp2 = Uext.
mat(site2, 1);
359 Utmp3 = Utmp1 * Utmp2;
368 if ((kmod == 2) && (imz < unit_v[2])) {
369 for (
int t = 0; t <
m_Nt_ext; ++t) {
370 for (
int z = 0; z < Nz; ++z) {
371 for (
int y = 0; y < Ny; ++y) {
372 for (
int x = 0; x < Nx; ++x) {
373 int x2 = x + unit_v[0] * j + imx;
374 int y2 = y + unit_v[1] * j + imy;
375 int z2 = z + unit_v[2] * j + imz;
376 int site1 = index_ext.
site(x, y, z, t);
377 int site2 = index_ext.
site(x2, y2, z2, t);
379 Utmp1 = Uspc.
mat(site1, 0);
380 Utmp2 = Uext.
mat(site2, 2);
381 Utmp3 = Utmp1 * Utmp2;
401 int NinG = Uorg.
nin();
409 for (
int it = 0; it < Nt; ++it) {
410 for (
int iz = 0; iz < Nz; ++iz) {
411 for (
int iy = 0; iy < Ny; ++iy) {
412 for (
int ix = 0; ix < Nx; ++ix) {
413 int site1 = index_lex.
site(ix, iy, iz, it);
414 int site2 = index_ext.
site(ix, iy, iz, it);
416 for (
int ex = 0; ex < Ndim; ++ex) {
434 int size_ex = NinG * Nvol_cp * Ndim;
438 for (
int it_off = 0; it_off <
m_Ntmp_size + 1; ++it_off) {
439 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
440 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
441 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
442 int site1 = index_ext.
site(ix, iy, iz, it_off);
443 int site2 = ix + m_Nx_ext * (iy + m_Ny_ext * iz);
445 for (
int ex = 0; ex < Ndim; ++ex) {
454 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
455 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
456 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
457 int site1 = ix + m_Nx_ext * (iy + m_Ny_ext * iz);
458 int site2 = index_ext.
site(ix, iy, iz, Nt + it_off);
460 for (
int ex = 0; ex < Ndim; ++ex) {
469 for (
int iz_off = 0; iz_off <
m_Nspc_size + 1; ++iz_off) {
470 for (
int it = 0; it <
m_Nt_ext; ++it) {
471 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
472 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
473 int site1 = index_ext.
site(ix, iy, iz_off, it);
474 int site2 = ix + m_Nx_ext * (iy + m_Ny_ext * it);
476 for (
int ex = 0; ex < Ndim; ++ex) {
485 for (
int it = 0; it <
m_Nt_ext; ++it) {
486 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
487 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
488 int site1 = ix + m_Nx_ext * (iy + m_Ny_ext * it);
489 int site2 = index_ext.
site(ix, iy, Nz + iz_off, it);
491 for (
int ex = 0; ex < Ndim; ++ex) {
500 for (
int iy_off = 0; iy_off < m_Nspc_size + 1; ++iy_off) {
501 for (
int it = 0; it <
m_Nt_ext; ++it) {
502 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
503 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
504 int site1 = index_ext.
site(ix, iy_off, iz, it);
505 int site2 = ix + m_Nx_ext * (iz + m_Nz_ext * it);
507 for (
int ex = 0; ex < Ndim; ++ex) {
516 for (
int it = 0; it <
m_Nt_ext; ++it) {
517 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
518 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
519 int site1 = ix + m_Nx_ext * (iz + m_Nz_ext * it);
520 int site2 = index_ext.
site(ix, Ny + iy_off, iz, it);
522 for (
int ex = 0; ex < Ndim; ++ex) {
531 for (
int ix_off = 0; ix_off < m_Nspc_size + 1; ++ix_off) {
532 for (
int it = 0; it <
m_Nt_ext; ++it) {
533 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
534 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
535 int site1 = index_ext.
site(ix_off, iy, iz, it);
536 int site2 = iy + m_Ny_ext * (iz + m_Nz_ext * it);
538 for (
int ex = 0; ex < Ndim; ++ex) {
547 for (
int it = 0; it <
m_Nt_ext; ++it) {
548 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
549 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
550 int site1 = iy + m_Ny_ext * (iz + m_Nz_ext * it);
551 int site2 = index_ext.
site(Nx + ix_off, iy, iz, it);
553 for (
int ex = 0; ex < Ndim; ++ex) {
570 Mat_SU_N Utrf1(Nc), Utrf2(Nc), Utmp(Nc), Utmp2(Nc);
572 int dir_t = Ndim - 1;
574 for (
int it = 1; it <
m_Nt_ext; ++it) {
575 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
576 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
577 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
578 int site0 = index_ext.
site(ix, iy, iz, it - 1);
580 Utrf1 = Uext.
mat(site0, dir_t);
581 Utrf2 = Uext.
mat_dag(site0, dir_t);
582 Utmp2 = Utrf1 * Utrf2;
585 int site1 = index_ext.
site(ix, iy, iz, it);
587 for (
int ex = 0; ex < Ndim; ++ex) {
588 Utmp = Uext.
mat(site1, ex);
589 Utmp2 = Utrf1 * Utmp;
590 Uext.
set_mat(site1, ex, Utmp2);
594 int site2 = index_ext.
site(ix - 1, iy, iz, it);
596 Utmp = Uext.
mat(site2, 0);
597 Utmp2 = Utmp * Utrf2;
602 int site2 = index_ext.
site(ix, iy - 1, iz, it);
604 Utmp = Uext.
mat(site2, 1);
605 Utmp2 = Utmp * Utrf2;
610 int site2 = index_ext.
site(ix, iy, iz - 1, it);
612 Utmp = Uext.
mat(site2, 2);
613 Utmp2 = Utmp * Utrf2;