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.