16 #ifdef USE_PARAMETERS_FACTORY
34 #ifdef USE_PARAMETERS_FACTORY
49 const string str_vlevel = params.
get_string(
"verbose_level");
54 int Nspc_size, Ntmp_size, Ntype;
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);
114 m_Nmax[2] = Nspc_size / 2;
116 m_Nmax[4] = Nspc_size / 2;
117 m_Nmax[5] = Nspc_size / 2;
129 int Ndim_spc = Ndim - 1;
140 assert(m_Ntype_max >= 6);
172 int Ndim_spc = Ndim - 1;
197 valarray<int> unit_v(Ndim_spc);
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];
215 for (
int site = 0; site <
m_Nvol_ext; ++site) {
219 int Nmax =
m_Nmax[i_type];
220 for (
int j = 0; j < Nmax; ++j) {
225 for (
int t_sep = 0; t_sep <
m_Ntmp_size; ++t_sep) {
228 i_type, nu, j + 1, t_sep + 1, wloop1);
229 wloop[
index_wloop(j, t_sep, i_type)] += wloop1 / 3.0;
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) {
241 i_type + 1, x_sep + 1, t_sep + 1, wloop[
index_wloop(x_sep, t_sep, i_type)]);
264 Mat_SU_N Utmp1(Nc), Utmp2(Nc), Utmp3(Nc);
266 double wloop_r = 0.0;
267 double wloop_i = 0.0;
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);
276 Utmp1 = Uspc.
mat(site1, 0);
277 Utmp2 = Uspc.
mat_dag(site2, 0);
278 Utmp3 = Utmp1 * Utmp2;
280 wloop_r +=
ReTr(Utmp3);
281 wloop_i +=
ImTr(Utmp3);
291 wloop_r = wloop_r / double(Nc * Lvol);
292 wloop_i = wloop_i / double(Nc * Lvol);
300 int j,
int nu, valarray<int>& unit_v)
306 int NinG = Uext.
nin();
310 int unit_v_max = unit_v[0];
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];
316 Mat_SU_N Utmp1(Nc), Utmp2(Nc), Utmp3(Nc);
323 for (
int k = 0; k < 3 * unit_v_max; ++k) {
324 int kmod = (k + 3 - nu) % 3;
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);
337 Utmp1 = Uspc.
mat(site1, 0);
338 Utmp2 = Uext.
mat(site2, 0);
339 Utmp3 = Utmp1 * Utmp2;
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);
359 Utmp1 = Uspc.
mat(site1, 0);
360 Utmp2 = Uext.
mat(site2, 1);
361 Utmp3 = Utmp1 * Utmp2;
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);
381 Utmp1 = Uspc.
mat(site1, 0);
382 Utmp2 = Uext.
mat(site2, 2);
383 Utmp3 = Utmp1 * Utmp2;
403 int NinG = Uorg.
nin();
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);
418 for (
int ex = 0; ex < Ndim; ++ex) {
436 int size_ex = NinG * Nvol_cp * Ndim;
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);
447 for (
int ex = 0; ex < Ndim; ++ex) {
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);
462 for (
int ex = 0; ex < Ndim; ++ex) {
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);
478 for (
int ex = 0; ex < Ndim; ++ex) {
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);
493 for (
int ex = 0; ex < Ndim; ++ex) {
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);
509 for (
int ex = 0; ex < Ndim; ++ex) {
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);
524 for (
int ex = 0; ex < Ndim; ++ex) {
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);
540 for (
int ex = 0; ex < Ndim; ++ex) {
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);
555 for (
int ex = 0; ex < Ndim; ++ex) {
572 Mat_SU_N Utrf1(Nc), Utrf2(Nc), Utmp(Nc), Utmp2(Nc);
574 int dir_t = Ndim - 1;
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);
582 Utrf1 = Uext.
mat(site0, dir_t);
583 Utrf2 = Uext.
mat_dag(site0, dir_t);
584 Utmp2 = Utrf1 * Utrf2;
587 int site1 = index_ext.
site(ix, iy, iz, it);
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);
596 int site2 = index_ext.
site(ix - 1, iy, iz, it);
598 Utmp = Uext.
mat(site2, 0);
599 Utmp2 = Utmp * Utrf2;
604 int site2 = index_ext.
site(ix, iy - 1, iz, it);
606 Utmp = Uext.
mat(site2, 1);
607 Utmp2 = Utmp * Utrf2;
612 int site2 = index_ext.
site(ix, iy, iz - 1, it);
614 Utmp = Uext.
mat(site2, 2);
615 Utmp2 = Utmp * Utrf2;
void gfix_temporal(Field_G &Uext)
temporal gauge fixing of extended gauge field.
void detailed(const char *format,...)
void Register_string(const string &, const string &)
int site(const int &x, const int &y, const int &z, const int &t) const
void general(const char *format,...)
void Register_int(const string &, const int)
double * ptr(const int jin, const int site, const int jex)
int m_Ntype
number of measured loop-type
int m_Nvol_ext
volume of extended gauge config.
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 redef_Uspc(Field_G &Uspc, Field_G &Uext, int j, int nu, std::valarray< 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::valarray< int > m_Nmax
void init()
initial setup independent of parameters.
double ImTr(const Mat_SU_N &m)
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.
std::valarray< unit_vec > m_Nunit
void paranoiac(const char *format,...)
Bridge::VerboseLevel m_vl
void crucial(const char *format,...)
static bool Register(const std::string &realm, const creator_callback &cb)
virtual void set_parameters(const Parameters ¶ms)
setting parameters.
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 fetch_int(const string &key, int &val) 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.