Go to the documentation of this file.
32 int Nspc_size, Ntmp_size, Ntype;
35 err += params.
fetch_int(
"max_spatial_loop_size", Nspc_size);
36 err += params.
fetch_int(
"max_temporal_loop_size", Ntmp_size);
37 err += params.
fetch_int(
"number_of_loop_type", Ntype);
103 m_Nmax[2] = Nspc_size / 2;
105 m_Nmax[4] = Nspc_size / 2;
106 m_Nmax[5] = Nspc_size / 2;
120 const int Ndim_spc = Ndim - 1;
163 const int Ndim_spc = Ndim - 1;
180 for (
size_t i = 0, n = wloop.size(); i < n; ++i) {
185 for (
int i_type = 0; i_type <
m_Ntype; ++i_type) {
187 for (
int nu = 0; nu < Ndim_spc; ++nu) {
188 std::vector<int> unit_v(Ndim_spc);
189 unit_v[0] =
m_Nunit[i_type][nu % Ndim_spc];
190 unit_v[1] =
m_Nunit[i_type][(1 + nu) % Ndim_spc];
191 unit_v[2] =
m_Nunit[i_type][(2 + nu) % Ndim_spc];
193 int unit_v_max = unit_v[0];
194 if (unit_v_max < unit_v[1]) unit_v_max = unit_v[1];
195 if (unit_v_max < unit_v[2]) unit_v_max = unit_v[2];
198 for (
int site = 0; site <
m_Nvol_ext; ++site) {
202 int Nmax =
m_Nmax[i_type];
203 for (
int j = 0; j < Nmax; ++j) {
208 for (
int t_sep = 0; t_sep <
m_Ntmp_size; ++t_sep) {
211 i_type, nu, j + 1, t_sep + 1, wloop1);
212 wloop[
index_wloop(j, t_sep, i_type)] += wloop1 / 3.0;
220 if (use_outputfile) {
225 for (
int i_type = 0; i_type <
m_Ntype; ++i_type) {
226 int Nmax =
m_Nmax[i_type];
227 for (
int x_sep = 0; x_sep < Nmax; ++x_sep) {
228 for (
int t_sep = 0; t_sep <
m_Ntmp_size; ++t_sep) {
230 i_type + 1, x_sep + 1, t_sep + 1, wloop[
index_wloop(x_sep, t_sep, i_type)]);
235 if (use_outputfile) {
261 double wloop_r = 0.0;
262 double wloop_i = 0.0;
264 for (
int t = 0; t < Nt; ++t) {
265 for (
int z = 0; z < Nz; ++z) {
266 for (
int y = 0; y < Ny; ++y) {
267 for (
int x = 0; x < Nx; ++x) {
268 int site1 = index_ext.
site(x, y, z, t);
269 int site2 = index_ext.
site(x, y, z, t + t_sep);
272 Utmp1 = Uspc.
mat(site1, 0);
275 Utmp2 = Uspc.
mat_dag(site2, 0);
278 Utmp3 = Utmp1 * Utmp2;
280 wloop_r +=
ReTr(Utmp3);
281 wloop_i +=
ImTr(Utmp3);
290 wloop_r = wloop_r / Nc / Nvol / NPE;
291 wloop_i = wloop_i / Nc / Nvol / NPE;
299 const int j,
const int nu,
const std::vector<int>& unit_v)
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];
319 for (
int k = 0; k < 3 * unit_v_max; ++k) {
320 int kmod = (k + 3 - nu) % 3;
322 if ((kmod == 0) && (imx < unit_v[0])) {
323 for (
int t = 0; t <
m_Nt_ext; ++t) {
324 for (
int z = 0; z < Nz; ++z) {
325 for (
int y = 0; y < Ny; ++y) {
326 for (
int x = 0; x < Nx; ++x) {
327 int x2 = x + unit_v[0] * j + imx;
328 int y2 = y + unit_v[1] * j + imy;
329 int z2 = z + unit_v[2] * j + imz;
331 int site1 = index_ext.
site(x, y, z, t);
332 int site2 = index_ext.
site(x2, y2, z2, t);
335 Utmp1 = Uspc.
mat(site1, 0);
338 Utmp2 = Uext.
mat(site2, 0);
341 Utmp3 = Utmp1 * Utmp2;
351 if ((kmod == 1) && (imy < unit_v[1])) {
352 for (
int t = 0; t <
m_Nt_ext; ++t) {
353 for (
int z = 0; z < Nz; ++z) {
354 for (
int y = 0; y < Ny; ++y) {
355 for (
int x = 0; x < Nx; ++x) {
356 int x2 = x + unit_v[0] * j + imx;
357 int y2 = y + unit_v[1] * j + imy;
358 int z2 = z + unit_v[2] * j + imz;
360 int site1 = index_ext.
site(x, y, z, t);
361 int site2 = index_ext.
site(x2, y2, z2, t);
364 Utmp1 = Uspc.
mat(site1, 0);
367 Utmp2 = Uext.
mat(site2, 1);
370 Utmp3 = Utmp1 * Utmp2;
380 if ((kmod == 2) && (imz < unit_v[2])) {
381 for (
int t = 0; t <
m_Nt_ext; ++t) {
382 for (
int z = 0; z < Nz; ++z) {
383 for (
int y = 0; y < Ny; ++y) {
384 for (
int x = 0; x < Nx; ++x) {
385 int x2 = x + unit_v[0] * j + imx;
386 int y2 = y + unit_v[1] * j + imy;
387 int z2 = z + unit_v[2] * j + imz;
389 int site1 = index_ext.
site(x, y, z, t);
390 int site2 = index_ext.
site(x2, y2, z2, t);
393 Utmp1 = Uspc.
mat(site1, 0);
396 Utmp2 = Uext.
mat(site2, 2);
399 Utmp3 = Utmp1 * Utmp2;
420 const int NinG = Uorg.
nin();
428 for (
int it = 0;
it < Nt; ++
it) {
429 for (
int iz = 0;
iz < Nz; ++
iz) {
430 for (
int iy = 0;
iy < Ny; ++
iy) {
431 for (
int ix = 0;
ix < Nx; ++
ix) {
435 for (
int ex = 0; ex < Ndim; ++ex) {
455 const int size_ex = NinG * Nvol_cp * Ndim;
459 for (
int it_off = 0; it_off <
m_Ntmp_size + 1; ++it_off) {
463 int site1 = index_ext.
site(
ix,
iy,
iz, it_off);
466 for (
int ex = 0; ex < Ndim; ++ex) {
479 int site2 = index_ext.
site(
ix,
iy,
iz, Nt + it_off);
481 for (
int ex = 0; ex < Ndim; ++ex) {
490 for (
int iz_off = 0; iz_off <
m_Nspc_size + 1; ++iz_off) {
494 int site1 = index_ext.
site(
ix,
iy, iz_off,
it);
497 for (
int ex = 0; ex < Ndim; ++ex) {
510 int site2 = index_ext.
site(
ix,
iy, Nz + iz_off,
it);
512 for (
int ex = 0; ex < Ndim; ++ex) {
521 for (
int iy_off = 0; iy_off <
m_Nspc_size + 1; ++iy_off) {
525 int site1 = index_ext.
site(
ix, iy_off,
iz,
it);
528 for (
int ex = 0; ex < Ndim; ++ex) {
541 int site2 = index_ext.
site(
ix, Ny + iy_off,
iz,
it);
543 for (
int ex = 0; ex < Ndim; ++ex) {
552 for (
int ix_off = 0; ix_off <
m_Nspc_size + 1; ++ix_off) {
556 int site1 = index_ext.
site(ix_off,
iy,
iz,
it);
559 for (
int ex = 0; ex < Ndim; ++ex) {
572 int site2 = index_ext.
site(Nx + ix_off,
iy,
iz,
it);
574 for (
int ex = 0; ex < Ndim; ++ex) {
590 const int dir_t = Ndim - 1;
601 Utrf1 = Uext.
mat(site0, dir_t);
604 Utrf2 = Uext.
mat_dag(site0, dir_t);
607 Utmp2 = Utrf1 * Utrf2;
613 for (
int ex = 0; ex < Ndim; ++ex) {
615 Utmp = Uext.
mat(site1, ex);
616 Utmp2 = Utrf1 * Utmp;
617 Uext.
set_mat(site1, ex, Utmp2);
624 Utmp = Uext.
mat(site2, 0);
625 Utmp2 = Utmp * Utrf2;
633 Utmp = Uext.
mat(site2, 1);
634 Utmp2 = Utmp * Utrf2;
642 Utmp = Uext.
mat(site2, 2);
643 Utmp2 = Utmp * Utrf2;
int m_Ny_ext
size of extended gauge config.
void init(const std::string &filename)
int m_Ntype_max
internal data members
void set_string(const string &key, const string &value)
double ImTr(const Mat_SU_N &m)
void set(const int jin, const int site, const int jex, double v)
int m_Ntmp_size
spatial size of loop
Mat_SU_N mat_dag(const int site, const int mn=0) const
std::vector< int > m_Nmax
void detailed(const char *format,...)
void set_mat(const int site, const int mn, const Mat_SU_N &U)
static const std::string class_name
void gfix_temporal(Field_G &Uext)
temporal gauge fixing of extended gauge field.
Bridge::VerboseLevel m_vl
void init()
initial setup independent of parameters.
void get_parameters(Parameters ¶ms) const
int non_negative(const int v)
void paranoiac(const char *format,...)
static int reduce_sum(int count, dcomplex *recv_buf, dcomplex *send_buf, int pattern=0)
make a global sum of an array of dcomplex over the communicator. pattern specifies the dimensions to ...
virtual void set_parameters(const Parameters ¶ms)
setting parameters.
int index_wloop(const int i_spc, const int i_tmp, const int i_type)
index for Wilson loop variable.
void redef_Uspc(Field_G &Uspc, const Field_G &Uext, const int j, const int nu, const std::vector< int > &unit_v)
redefinition of product of spatial link variables.
int m_Ntype
number of measured loop-type
int m_Nx_ext
size of extended gauge config.
std::vector< unit_vec > m_Nunit
int m_Nt_ext
size of extended gauge config.
int site(const int &x, const int &y, const int &z, const int &t) const
const double * ptr(const int jin, const int site, const int jex) const
double calc_wloop(const Field_G &Uspc, const int t_ext)
temporal gauge fixing of extended gauge field.
std::string m_filename_output
static VerboseLevel set_verbose_level(const std::string &str)
void set_int(const string &key, const int value)
int fetch_string(const string &key, string &value) const
string get_string(const string &key) const
void crucial(const char *format,...)
void set_extfield(Field_G &Uext, const Field_G &Uorg)
setup of extended gauge field.
double ReTr(const Mat_SU_N &m)
static int exchange(int count, dcomplex *recv_buf, dcomplex *send_buf, int idir, int ipm, int tag)
receive array of dcomplex from upstream specified by idir and ipm, and send array to downstream.
int m_Nvol_ext
volume of extended gauge config.
Mat_SU_N mat(const int site, const int mn=0) const
int m_Nspc_size
parameters set by user
int m_Nz_ext
size of extended gauge config.
int fetch_int(const string &key, int &value) const
void general(const char *format,...)
double measure(const Field_G &U)
main function to measure Wilson loops.
static std::string get_verbose_level(const VerboseLevel vl)