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) {
432 int site1 = index_lex.
site(ix, iy, iz, it);
433 int site2 = index_ext.
site(ix, iy, iz, it);
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) {
460 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
461 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
462 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
463 int site1 = index_ext.
site(ix, iy, iz, it_off);
466 for (
int ex = 0; ex < Ndim; ++ex) {
475 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
476 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
477 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
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) {
491 for (
int it = 0; it <
m_Nt_ext; ++it) {
492 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
493 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
494 int site1 = index_ext.
site(ix, iy, iz_off, it);
497 for (
int ex = 0; ex < Ndim; ++ex) {
506 for (
int it = 0; it <
m_Nt_ext; ++it) {
507 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
508 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
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) {
522 for (
int it = 0; it <
m_Nt_ext; ++it) {
523 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
524 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
525 int site1 = index_ext.
site(ix, iy_off, iz, it);
528 for (
int ex = 0; ex < Ndim; ++ex) {
537 for (
int it = 0; it <
m_Nt_ext; ++it) {
538 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
539 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
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) {
553 for (
int it = 0; it <
m_Nt_ext; ++it) {
554 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
555 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
556 int site1 = index_ext.
site(ix_off, iy, iz, it);
559 for (
int ex = 0; ex < Ndim; ++ex) {
568 for (
int it = 0; it <
m_Nt_ext; ++it) {
569 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
570 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
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;
594 for (
int it = 1; it <
m_Nt_ext; ++it) {
595 for (
int iz = 0; iz <
m_Nz_ext; ++iz) {
596 for (
int iy = 0; iy <
m_Ny_ext; ++iy) {
597 for (
int ix = 0; ix <
m_Nx_ext; ++ix) {
598 int site0 = index_ext.
site(ix, iy, iz, it - 1);
601 Utrf1 = Uext.
mat(site0, dir_t);
604 Utrf2 = Uext.
mat_dag(site0, dir_t);
607 Utmp2 = Utrf1 * Utrf2;
611 int site1 = index_ext.
site(ix, iy, iz, it);
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);
621 int site2 = index_ext.
site(ix - 1, iy, iz, it);
624 Utmp = Uext.
mat(site2, 0);
625 Utmp2 = Utmp * Utrf2;
630 int site2 = index_ext.
site(ix, iy - 1, iz, it);
633 Utmp = Uext.
mat(site2, 1);
634 Utmp2 = Utmp * Utrf2;
639 int site2 = index_ext.
site(ix, iy, iz - 1, it);
642 Utmp = Uext.
mat(site2, 2);
643 Utmp2 = Utmp * Utrf2;