Bridge++  Ver. 1.1.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
polyakovLoop.cpp
Go to the documentation of this file.
1 
14 #include "polyakovLoop.h"
15 
16 #ifdef USE_PARAMETERS_FACTORY
17 #include "parameters_factory.h"
18 #endif
19 
20 using std::valarray;
21 
22 //- parameter entries
23 namespace {
24  void append_entry(Parameters& param)
25  {
26  param.Register_int("spatial_correlator_size", 0);
27  param.Register_int("number_of_correlator_type", 0);
28 
29  param.Register_string("verbose_level", "NULL");
30  }
31 
32 
33 #ifdef USE_PARAMETERS_FACTORY
34  bool init_param = ParametersFactory::Register("PolyakovLoop", append_entry);
35 #endif
36 }
37 //- end
38 
39 //- parameters class
41 //- end
42 
43 //====================================================================
45 {
46  const string str_vlevel = params.get_string("verbose_level");
47 
48  m_vl = vout.set_verbose_level(str_vlevel);
49 
50  //- fetch and check input parameters
51  int Nspc_size, Ntype;
52 
53  int err = 0;
54  err += params.fetch_int("spatial_correlator_size", Nspc_size);
55  err += params.fetch_int("number_of_correlator_type", Ntype);
56 
57  if (err) {
58  vout.crucial(m_vl, "PolyakovLoop: fetch error, input parameter not found.\n");
59  abort();
60  }
61 
62 
63  set_parameters(Nspc_size, Ntype);
64 }
65 
66 
67 //====================================================================
68 void PolyakovLoop::set_parameters(int Nspc_size, int Ntype)
69 {
70  //- print input parameters
71  vout.general(m_vl, "Polyakov loop measurement:\n");
72  vout.general(m_vl, " Nspc_size = %d\n", Nspc_size);
73  vout.general(m_vl, " Ntype = %d\n", Ntype);
74 
75  //- range check
76  int err = 0;
77  err += ParameterCheck::non_negative(Nspc_size);
78  err += ParameterCheck::non_negative(Ntype);
79 
82  if (Ntype > 6) ++err;
83 
84  if (err) {
85  vout.crucial(m_vl, "PolyakovLoop: parameter range check failed.\n");
86  abort();
87  }
88 
89  //- store values
90  m_Nspc_size = Nspc_size;
91  m_Ntype = Ntype;
92 
93 
94  //- post-process
98  m_Nt_ext = 1;
100 
103  m_Nmax[0] = Nspc_size;
104  m_Nmax[1] = Nspc_size;
105  m_Nmax[2] = Nspc_size / 2;
106  m_Nmax[3] = Nspc_size;
107  m_Nmax[4] = Nspc_size / 2;
108  m_Nmax[5] = Nspc_size / 2;
109 }
110 
111 
112 //====================================================================
114 {
115  int Ndim = CommonParameters::Ndim();
116 
117  assert(Ndim == 4);
118 
119  m_Ntype_max = 6;
120  int Ndim_spc = Ndim - 1;
121 
122  m_Nunit.resize(m_Ntype_max);
123  m_Nmax.resize(m_Ntype_max);
124 
125  for (int i = 0; i < m_Ntype_max; ++i) {
126  m_Nunit[i].resize(Ndim_spc);
127  }
128 
129  // The following setting explicitly depends on the definition
130  // of unit vectors.
131  assert(m_Ntype_max >= 6);
132 
133  m_Nunit[0][0] = 1;
134  m_Nunit[0][1] = 0;
135  m_Nunit[0][2] = 0;
136 
137  m_Nunit[1][0] = 1;
138  m_Nunit[1][1] = 1;
139  m_Nunit[1][2] = 0;
140 
141  m_Nunit[2][0] = 2;
142  m_Nunit[2][1] = 1;
143  m_Nunit[2][2] = 0;
144 
145  m_Nunit[3][0] = 1;
146  m_Nunit[3][1] = 1;
147  m_Nunit[3][2] = 1;
148 
149  m_Nunit[4][0] = 2;
150  m_Nunit[4][1] = 1;
151  m_Nunit[4][2] = 1;
152 
153  m_Nunit[5][0] = 2;
154  m_Nunit[5][1] = 2;
155  m_Nunit[5][2] = 1;
156 }
157 
158 
159 //====================================================================
161 {
162  int Ndim = CommonParameters::Ndim();
163  int Nx = CommonParameters::Nx();
164  int Ny = CommonParameters::Ny();
165  int Nz = CommonParameters::Nz();
166  int Nc = CommonParameters::Nc();
167  int Npet = Communicator::npe(Ndim - 1);
168  int Lvol_spc = CommonParameters::Lvol() / CommonParameters::Lt();
169  int Nvol_spc = Nx * Ny * Nz;
170 
171  Field_G P(Nvol_spc, 1);
172 
173  calc_ploop(P, U);
174 
175  Mat_SU_N utmp(Nc);
176  double tr = 0.0;
177  for (int site = 0; site < Nvol_spc; ++site) {
178  P.mat(utmp, site, 0);
179  tr += ReTr(utmp);
180  }
181  tr = tr / (double(Nc));
182 
183  double ploop = Communicator::reduce_sum(tr);
184  ploop = ploop / double(Lvol_spc * Npet);
185 
186  vout.detailed(m_vl, "Polyakov loop = %f\n", ploop);
187 
188  return ploop;
189 }
190 
191 
192 //====================================================================
194 {
195  int Ndim = CommonParameters::Ndim();
196  int Ndim_spc = Ndim - 1;
197 
198  int Nx = CommonParameters::Nx();
199  int Ny = CommonParameters::Ny();
200  int Nz = CommonParameters::Nz();
201  int Nt = CommonParameters::Nt();
202  int Nc = CommonParameters::Nc();
203 
204  int Nvol = U.nvol();
205 
206  assert(Nvol == Nx * Ny * Nz * Nt);
207 
208  int Nvol_spc = P.nvol();
209  assert(Nvol_spc == Nx * Ny * Nz);
210 
211  Index_lex index;
212  Index_lex index_spc(Nx, Ny, Nz, 1);
213 
214  Field_G Ut(Nvol, 1);
215  Mat_SU_N utmp1(Nc), utmp2(Nc), utmp3(Nc);
216 
217  Ut.setpart_ex(0, U, Ndim - 1);
218 
219  //- Definition of local Polyakov loops
220  int t = 0;
221  for (int z = 0; z < Nz; ++z) {
222  for (int y = 0; y < Ny; ++y) {
223  for (int x = 0; x < Nx; ++x) {
224  int site = index.site(x, y, z, t);
225  int site2 = index_spc.site(x, y, z, 0);
226  Ut.mat(utmp1, site, 0);
227  P.set_mat(site2, 0, utmp1);
228  }
229  }
230  }
231 
232  for (int t = 1; t < Nt; ++t) {
233  for (int z = 0; z < Nz; ++z) {
234  for (int y = 0; y < Ny; ++y) {
235  for (int x = 0; x < Nx; ++x) {
236  int site = index.site(x, y, z, t);
237  int site2 = index_spc.site(x, y, z, 0);
238  Ut.mat(utmp1, site, 0);
239  P.mat(utmp2, site2, 0);
240  utmp3.mult_nn(utmp2, utmp1);
241  P.set_mat(site2, 0, utmp3);
242  }
243  }
244  }
245  }
246 
247  //- global Polyakov loops
248  int Npet = Communicator::npe(Ndim - 1);
249 
250  if (Npet > 1) {
251  Field_G Pcp1(Nvol_spc, 1), Pcp2(Nvol_spc, 1);
252  int size_cp = P.nin() * Nvol_spc;
253 
254  for (int ipet = 1; ipet < Npet; ++ipet) {
255  if (ipet == 1) {
256  Pcp1.setpart_ex(0, P, 0);
257  } else {
258  Pcp1.setpart_ex(0, Pcp2, 0);
259  }
260 
261  Communicator::exchange(size_cp, Pcp2.ptr(0), Pcp1.ptr(0), Ndim - 1, 1, 0);
262 
263  Pcp1.mult_Field_Gnn(0, P, 0, Pcp2, 0);
264  P.setpart_ex(0, Pcp1, 0);
265  }
266  }
267 }
268 
269 
270 //====================================================================
271 //============================================================END=====