Bridge++  Ver. 1.2.x
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fopr_CloverTerm_eo.cpp
Go to the documentation of this file.
1 
14 #include "fopr_CloverTerm_eo.h"
15 
16 #include "threadManager_OpenMP.h"
17 #include "solver_CG.h"
18 
19 #ifdef USE_PARAMETERS_FACTORY
20 #include "parameters_factory.h"
21 #endif
22 
23 using std::valarray;
24 
25 
26 //====================================================================
27 //- parameter entry
28 namespace {
29  void append_entry(Parameters& param)
30  {
31  param.Register_double("hopping_parameter", 0.0);
32  param.Register_double("clover_coefficient", 0.0);
33  param.Register_int_vector("boundary_condition", std::valarray<int>());
34 
35  param.Register_string("verbose_level", "NULL");
36  }
37 
38 
39 #ifdef USE_PARAMETERS_FACTORY
40  bool init_param = ParametersFactory::Register("Fopr.CloverTerm_eo",
41  append_entry);
42 #endif
43 }
44 //- end
45 
46 //- parameters class
48 { append_entry(*this); }
49 //- end
50 
51 const std::string Fopr_CloverTerm_eo::class_name = "Fopr_CloverTerm_eo";
52 
53 //====================================================================
54 void Fopr_CloverTerm_eo::init(std::string repr)
55 {
56  m_repr = repr;
57 
61  m_NinF = 2 * m_Nc * m_Nd;
63  m_Nvol2 = m_Nvol / 2;
64 
65  m_boundary.resize(m_Ndim);
66 
67  m_Ueo = 0;
68 
69  m_GM.resize(m_Ndim + 1);
70  m_SG.resize(m_Ndim * m_Ndim);
71 
72  GammaMatrixSet *gmset = GammaMatrixSet::New(m_repr);
73 
74  m_GM[0] = gmset->get_GM(gmset->GAMMA1);
75  m_GM[1] = gmset->get_GM(gmset->GAMMA2);
76  m_GM[2] = gmset->get_GM(gmset->GAMMA3);
77  m_GM[3] = gmset->get_GM(gmset->GAMMA4);
78  m_GM[4] = gmset->get_GM(gmset->GAMMA5);
79 
80  m_SG[sg_index(0, 1)] = gmset->get_GM(gmset->SIGMA12);
81  m_SG[sg_index(1, 2)] = gmset->get_GM(gmset->SIGMA23);
82  m_SG[sg_index(2, 0)] = gmset->get_GM(gmset->SIGMA31);
83  m_SG[sg_index(3, 0)] = gmset->get_GM(gmset->SIGMA41);
84  m_SG[sg_index(3, 1)] = gmset->get_GM(gmset->SIGMA42);
85  m_SG[sg_index(3, 2)] = gmset->get_GM(gmset->SIGMA43);
86 
87  m_SG[sg_index(1, 0)] = m_SG[sg_index(0, 1)].mult(-1);
88  m_SG[sg_index(2, 1)] = m_SG[sg_index(1, 2)].mult(-1);
89  m_SG[sg_index(0, 2)] = m_SG[sg_index(2, 0)].mult(-1);
90  m_SG[sg_index(0, 3)] = m_SG[sg_index(3, 0)].mult(-1);
91  m_SG[sg_index(1, 3)] = m_SG[sg_index(3, 1)].mult(-1);
92  m_SG[sg_index(2, 3)] = m_SG[sg_index(3, 2)].mult(-1);
93 
94  m_SG[sg_index(0, 0)] = gmset->get_GM(gmset->UNITY);
95  m_SG[sg_index(1, 1)] = gmset->get_GM(gmset->UNITY);
96  m_SG[sg_index(2, 2)] = gmset->get_GM(gmset->UNITY);
97  m_SG[sg_index(3, 3)] = gmset->get_GM(gmset->UNITY);
98  // these 4 gamma matrices are actually not used.
99 
100  delete gmset;
101 
102  m_fee_inv = new Field_F(m_Nvol2, m_Nc * m_Nd);
103  m_foo_inv = new Field_F(m_Nvol2, m_Nc * m_Nd);
104 
105  m_vf.reset(m_Nvol2, 1);
106  m_ff.reset(m_Nvol2, 1);
107 
108  int Nfst = 6;
109  m_T2.resize(2); // 0: even, 1: odd.
110  m_T2[0].reset(m_Nvol2, Nfst);
111  m_T2[1].reset(m_Nvol2, Nfst);
112 }
113 
114 
115 //====================================================================
117 {
118  delete m_foo_inv;
119  delete m_fee_inv;
120 }
121 
122 
123 //====================================================================
125 {
126  const string str_vlevel = params.get_string("verbose_level");
127 
128  m_vl = vout.set_verbose_level(str_vlevel);
129 
130  //- fetch and check input parameters
131  double kappa, cSW;
132  valarray<int> bc;
133 
134  int err = 0;
135  err += params.fetch_double("hopping_parameter", kappa);
136  err += params.fetch_double("clover_coefficient", cSW);
137  err += params.fetch_int_vector("boundary_condition", bc);
138 
139  if (err) {
140  vout.crucial(m_vl, "%s: fetch error, input parameter not found.\n", class_name.c_str());
141  abort();
142  }
143 
144  set_parameters(kappa, cSW, bc);
145 }
146 
147 
148 //====================================================================
149 void Fopr_CloverTerm_eo::set_parameters(const double kappa, const double cSW,
150  const std::valarray<int> bc)
151 {
152  //- print input parameters
153  vout.general(m_vl, "Parameters of %s:\n", class_name.c_str());
154  vout.general(m_vl, " kappa = %8.4f\n", kappa);
155  vout.general(m_vl, " cSW = %8.4f\n", cSW);
156  for (int mu = 0; mu < m_Ndim; ++mu) {
157  vout.general(m_vl, " boundary[%d] = %2d\n", mu, bc[mu]);
158  }
159 
160  //- range check
161  // NB. kappa,cSW == 0 is allowed.
162  assert(bc.size() == m_Ndim);
163 
164  //- store values
165  m_kappa = kappa;
166  m_cSW = cSW;
167  assert(bc.size() == m_Ndim);
168  for (int mu = 0; mu < m_Ndim; ++mu) {
169  m_boundary[mu] = bc[mu];
170  }
171 }
172 
173 
174 //====================================================================
176 {
177  m_Ueo = (Field_G *)Ueo;
178 
179  set_csw();
180  solve_csw_inv();
181 }
182 
183 
184 //====================================================================
186 {
187  double eps2 = CommonParameters::epsilon_criterion2();
188 
189  Parameters *params_solver = ParametersFactory::New("Solver");
190 
191  params_solver->set_string("solver_type", "CG");
192  params_solver->set_int("maximum_number_of_iteration", 1000);
193  params_solver->set_double("convergence_criterion_squared", 1.0e-30);
194  //- NB. set VerboseLevel to CRUCIAL to suppress frequent messages.
195  params_solver->set_string("verbose_level", "Crucial");
196 
197  int Nconv;
198  double diff;
199 
200  Solver *solver = new Solver_CG(this);
201  solver->set_parameters(*params_solver);
202 
203  Field_F w(m_Nvol2);
204  Field_F w2(m_Nvol2);
205 
206  for (int ispin = 0; ispin < m_Nd; ++ispin) {
207  for (int icolor = 0; icolor < m_Nc; ++icolor) {
208  int spin_color = icolor + m_Nc * ispin;
209  w = 0.0;
210  for (int isite = 0; isite < m_Nvol2; ++isite) {
211  w.set_ri(icolor, ispin, isite, 0, 1, 0);
212  }
213 
214  if (m_cSW * m_cSW < eps2) {
215  m_fee_inv->setpart_ex(spin_color, w, 0);
216  m_foo_inv->setpart_ex(spin_color, w, 0);
217  } else {
218  // m_fopr_csw->set_mode("even");
219  set_mode("even");
220  solver->solve(w2, w, Nconv, diff);
221  m_fee_inv->setpart_ex(spin_color, w2, 0);
222 
223  vout.detailed(m_vl, " Nconv,diff = %d %12.4e\n", Nconv, diff);
224 
225  set_mode("odd");
226  solver->solve(w2, w, Nconv, diff);
227  m_foo_inv->setpart_ex(spin_color, w2, 0);
228 
229  vout.detailed(m_vl, " Nconv,diff = %d %12.4e\n", Nconv, diff);
230  }
231  }
232  }
233 
234  delete params_solver;
235  delete solver;
236 
237  // redefine the inverse matrix with its dagger.
238  double re, im;
239  for (int ics = 0; ics < m_Nc * m_Nd; ++ics) {
240  for (int site = 0; site < m_Nvol2; ++site) {
241  for (int id = 0; id < m_Nd; ++id) {
242  for (int ic = 0; ic < m_Nc; ++ic) {
243  re = m_foo_inv->cmp_r(ic, id, site, ics);
244  im = m_foo_inv->cmp_i(ic, id, site, ics);
245  m_foo_inv->set_ri(ic, id, site, ics, re, -im);
246  re = m_fee_inv->cmp_r(ic, id, site, ics);
247  im = m_fee_inv->cmp_i(ic, id, site, ics);
248  m_fee_inv->set_ri(ic, id, site, ics, re, -im);
249  }
250  }
251  }
252  }
253 }
254 
255 
256 //====================================================================
257 const Field_F Fopr_CloverTerm_eo::mult_csw_inv(const Field_F& f, const int ieo)
258 {
259  int nex = f.nex();
260  Field_F w(m_Nvol2, nex);
261 
262  mult_csw_inv(w, f, ieo);
263 
264  return w;
265 }
266 
267 
268 //====================================================================
270  const Field& f, const int ieo)
271 {
272  int nex = f.nex();
273  Field_F v2(m_Nvol2, nex), f2(m_Nvol2, nex);
274  Field_F *csw_inv;
275 
276  copy(f2, f);
277  v2.set(0.0);
278 
279  if (ieo == 0) {
280  csw_inv = m_fee_inv;
281  } else if (ieo == 1) {
282  csw_inv = m_foo_inv;
283  } else {
284  vout.crucial(m_vl, "%s: wrong parameter, ieo=%d.\n",
285  class_name.c_str(), ieo);
286  abort();
287  }
288 
289  for (int iex = 0; iex < nex; ++iex) {
290  for (int isite = 0; isite < m_Nvol2; ++isite) {
291  for (int ispin = 0; ispin < m_Nd; ++ispin) {
292  for (int icolor = 0; icolor < m_Nc; ++icolor) {
293  double re = 0.0;
294  double im = 0.0;
295 
296  for (int jspin = 0; jspin < m_Nd; ++jspin) {
297  for (int jcolor = 0; jcolor < m_Nc; ++jcolor) {
298  int spin_color = jcolor + m_Nc * jspin;
299  // Hermiteness of clover term is used here.
300  re += csw_inv->cmp_r(icolor, ispin, isite, spin_color) *
301  f2.cmp_r(jcolor, jspin, isite, iex);
302  re += csw_inv->cmp_i(icolor, ispin, isite, spin_color) *
303  f2.cmp_i(jcolor, jspin, isite, iex);
304 
305  im += csw_inv->cmp_r(icolor, ispin, isite, spin_color) *
306  f2.cmp_i(jcolor, jspin, isite, iex);
307  im -= csw_inv->cmp_i(icolor, ispin, isite, spin_color) *
308  f2.cmp_r(jcolor, jspin, isite, iex);
309  }
310  }
311 
312  v2.set_ri(icolor, ispin, isite, iex, re, im);
313  }
314  }
315  }
316  }
317  copy(v, v2);
318 }
319 
320 
321 //====================================================================
322 std::vector<double> Fopr_CloverTerm_eo::csmatrix(const int& site)
323 {
324  std::vector<double> matrix(m_Nc * m_Nc * m_Nd * m_Nd * 2);
325 
326  for (int ispin = 0; ispin < m_Nd / 2; ++ispin) {
327  for (int icolor = 0; icolor < m_Nc; ++icolor) {
328  int ics = icolor + ispin * m_Nc;
329  for (int jspin = 0; jspin < m_Nd; ++jspin) {
330  int js2 = (jspin + m_Nd / 2) % m_Nd;
331  for (int jcolor = 0; jcolor < m_Nc; ++jcolor) {
332  int cs1 = jcolor + m_Nc * (jspin + m_Nd * ics);
333  int cs2 = jcolor + m_Nc * (jspin + m_Nd * (ics + m_Nc * m_Nd / 2));
334  int cc = jcolor + icolor * m_Nc;
335  int ss1 = jspin + ispin * m_Nd;
336  int ss2 = js2 + ispin * m_Nd;
337 
338  matrix[2 * cs1] = m_T.cmp_r(cc, site, ss1);
339  matrix[2 * cs1 + 1] = m_T.cmp_i(cc, site, ss1);
340 
341  matrix[2 * cs2] = m_T.cmp_r(cc, site, ss2);
342  matrix[2 * cs2 + 1] = m_T.cmp_i(cc, site, ss2);
343  }
344  }
345  }
346  }
347 
348  return matrix;
349 }
350 
351 
352 //====================================================================
353 void Fopr_CloverTerm_eo::D(Field& v, const Field& f, const int ieo)
354 {
355  Field_F vf(v.nvol(), v.nex());
356  Field_F ff(f.nvol(), f.nex());
357  Field_F wt(f.nvol(), f.nex());
358 
359  int Nfst = 6;
360  Field_G T2(m_Nvol2, Nfst);
361  int NinG = T2.nin();
362 
363  /*
364  for(int ex = 0; ex < Nfst; ++ex){
365  for(int isite = 0; isite < m_Nvol2; ++isite){
366  for(int in = 0; in < NinG; ++in){
367  T2.set(in, isite, ex, m_T.cmp(in, idx.site(isite, ieo), ex));
368  }
369  }
370  }
371  */
372 
373  copy(ff, f); // ff = (Field_F)f;
374  copy(vf, ff);
375  double coeff = -m_kappa * m_cSW;
376 
377  // i s_23 F_23
378  mult_iGM(wt, m_SG[sg_index(1, 2)], ff);
379  multadd_Field_Gn(vf, 0, m_T2[ieo], 0, wt, 0, coeff);
380 
381  // i s_31 F_31
382  mult_iGM(wt, m_SG[sg_index(2, 0)], ff);
383  multadd_Field_Gn(vf, 0, m_T2[ieo], 1, wt, 0, coeff);
384 
385  // i s_12 F_12
386  mult_iGM(wt, m_SG[sg_index(0, 1)], ff);
387  multadd_Field_Gn(vf, 0, m_T2[ieo], 2, wt, 0, coeff);
388 
389  // i s_41 F_41
390  mult_iGM(wt, m_SG[sg_index(3, 0)], ff);
391  multadd_Field_Gn(vf, 0, m_T2[ieo], 3, wt, 0, coeff);
392 
393  // i s_42 F_42
394  mult_iGM(wt, m_SG[sg_index(3, 1)], ff);
395  multadd_Field_Gn(vf, 0, m_T2[ieo], 4, wt, 0, coeff);
396 
397  // i s_43 F_43
398  mult_iGM(wt, m_SG[sg_index(3, 2)], ff);
399  multadd_Field_Gn(vf, 0, m_T2[ieo], 5, wt, 0, coeff);
400 
401  copy(v, vf);
402 
403  /*
404  Field_F vf(v.nvol(), v.nex());
405  Field_F ff(f.nvol(), f.nex());
406 
407  ff = (Field_F)f;
408 
409  int n_ex = f.nex();
410 
411  Vec_SU_N u_vec, d_vec;
412  for (int iex = 0; iex < n_ex; ++iex) {
413  for (int isite = 0; isite < m_Nvol2; ++isite) {
414  for (int ispin = 0; ispin < m_Nd / 2; ++ispin) {
415  u_vec.zero();
416  d_vec.zero();
417  for (int jspin = 0; jspin < m_Nd; ++jspin) {
418  int u_spin = jspin + ispin * m_Nd;
419  u_vec += m_T.mat(idx.site(isite, ieo), u_spin)
420  * ff.vec(jspin, isite, iex);
421  int d_spin = (jspin + m_Nd / 2) % m_Nd + ispin * m_Nd;
422  d_vec += m_T.mat(idx.site(isite, ieo), d_spin)
423  * ff.vec(jspin, isite, iex);
424  }
425  vf.set_vec(ispin, isite, iex, u_vec);
426  vf.set_vec(ispin + m_Nd / 2, isite, iex, d_vec);
427  }
428  }
429  }
430 
431  v = (Field)vf;
432  */
433 }
434 
435 
436 //====================================================================
438  const int mu, const int nu)
439 {
440  assert(mu != nu);
441  mult_iGM(v, m_SG[sg_index(mu, nu)], w);
442 }
443 
444 
445 //====================================================================
447 {
448  m_T.set(0.0);
449 
450  Field_G F;
451 
452  //- F_23
453  set_fieldstrength(F, 1, 2);
454  copy(m_T, 0, F, 0);
455 
456  //- F_31
457  set_fieldstrength(F, 2, 0);
458  copy(m_T, 1, F, 0);
459 
460  //- F_12
461  set_fieldstrength(F, 0, 1);
462  copy(m_T, 2, F, 0);
463 
464  //- F_41
465  set_fieldstrength(F, 3, 0);
466  copy(m_T, 3, F, 0);
467 
468  //- F_42
469  set_fieldstrength(F, 3, 1);
470  copy(m_T, 4, F, 0);
471 
472  //- F_43
473  set_fieldstrength(F, 3, 2);
474  copy(m_T, 5, F, 0);
475 
476  int Nfst = 6;
477  int NinG = m_T2[0].nin();
478  for (int ieo = 0; ieo < 2; ++ieo) {
479  for (int ex = 0; ex < Nfst; ++ex) {
480  for (int isite = 0; isite < m_Nvol2; ++isite) {
481  for (int in = 0; in < NinG; ++in) {
482  m_T2[ieo].set(in, isite, ex, m_T.cmp(in, idx.site(isite, ieo), ex));
483  }
484  }
485  }
486  }
487 
488 
489  /*
490  //- sigma23
491  Field_G F;
492  set_fieldstrength(F, 1, 2);
493  F.xI();
494  m_T.addpart_ex(1, F, 0);
495  m_T.addpart_ex(4, F, 0);
496 
497  //- sigma31
498  set_fieldstrength(F, 2, 0);
499  m_T.addpart_ex(1, F, 0);
500  scal(F, -1.0);
501  m_T.addpart_ex(4, F, 0);
502 
503  //- sigma12
504  set_fieldstrength(F, 0, 1);
505  F.xI();
506  m_T.addpart_ex(0, F, 0);
507  scal(F, -1.0);
508  m_T.addpart_ex(5, F, 0);
509 
510  //- sigma41
511  set_fieldstrength(F, 3, 0);
512  F.xI();
513  scal(F, -1.0); // F *= -1.0;
514  m_T.addpart_ex(3, F, 0);
515  m_T.addpart_ex(6, F, 0);
516 
517  //- sigma42
518  set_fieldstrength(F, 3, 1);
519  m_T.addpart_ex(6, F, 0);
520  scal(F, -1.0);
521  m_T.addpart_ex(3, F, 0);
522 
523  //- sigma43
524  set_fieldstrength(F, 3, 2);
525  F.xI();
526  m_T.addpart_ex(7, F, 0);
527  scal(F, -1.0);
528  m_T.addpart_ex(2, F, 0);
529 
530  scal(m_T, -m_kappa*m_cSW);
531 
532  //- add unit color matrix for diag part of dirac matrix;
533  for (int ispin = 0; ispin < m_Nd / 2; ++ispin) {
534  int spin_diag = ispin + m_Nd * ispin;
535  for (int isite = 0; isite < m_Nvol; ++isite) {
536  for (int icolor = 0; icolor < m_Nc; ++icolor) {
537  int cc2 = 2 * (icolor * m_Nc + icolor);
538  m_T.add(cc2, isite, spin_diag, 1.0);
539  }
540  }
541  }
542  */
543 }
544 
545 
546 //====================================================================
548  const int mu, const int nu)
549 {
550  Staples_eo staple;
551 
552  Field_G Cup(m_Nvol, 1), Cdn(m_Nvol, 1);
553  Field_G Umu(m_Nvol, 1);
554  Field_G w(m_Nvol, 1), v(m_Nvol, 1), v2(m_Nvol, 1);
555 
556  Cup = staple.upper(m_Ueo, mu, nu);
557  Cdn = staple.lower(m_Ueo, mu, nu);
558  Umu.setpart_ex(0, *m_Ueo, mu);
559 
560  for (int site = 0; site < m_Nvol; ++site) {
561  w.set_mat(site, 0, Umu.mat(site) * Cup.mat_dag(site));
562  }
563 
564  for (int site = 0; site < m_Nvol; ++site) {
565  v2.set_mat(site, 0, Umu.mat(site) * Cdn.mat_dag(site));
566  }
567 
568  w -= v2;
569 
570  for (int site = 0; site < m_Nvol; ++site) {
571  v.set_mat(site, 0, Cup.mat_dag(site) * Umu.mat(site));
572  }
573 
574  for (int site = 0; site < m_Nvol; ++site) {
575  v2.set_mat(site, 0, Cdn.mat_dag(site) * Umu.mat(site));
576  }
577 
578  v -= v2;
579 
580  m_shift_eo.forward(v2, v, mu);
581 
582  w += v2;
583 
584  for (int site = 0; site < m_Nvol; ++site) {
585  Fst.set_mat(site, 0, w.mat(site).ah());
586  }
587 
588  Fst *= 0.25;
589 }
590 
591 
592 //====================================================================
593 const Field_G Fopr_CloverTerm_eo::trSigmaInv(const int mu, const int nu)
594 {
595  int nex_finv = m_fee_inv->nex();
596  Vec_SU_N v;
597  Field_F sigma_inv(m_Nvol, nex_finv);
598  Field_G tr_sigma_inv(m_Nvol, 1);
599 
600  {
601  Field_F sigma_eo_inv(m_Nvol2, nex_finv);
602  mult_isigma(sigma_eo_inv, *m_fee_inv, mu, nu);
603  m_idx.reverseField(sigma_inv, sigma_eo_inv, 0);
604  mult_isigma(sigma_eo_inv, *m_foo_inv, mu, nu);
605  m_idx.reverseField(sigma_inv, sigma_eo_inv, 1);
606  }
607 
608  for (int isite = 0; isite < m_Nvol; ++isite) {
609  for (int ispin = 0; ispin < m_Nd; ++ispin) {
610  for (int icolor = 0; icolor < m_Nc; ++icolor) {
611  v = sigma_inv.vec(ispin, isite, icolor + m_Nc * ispin);
612  for (int jcolor = 0; jcolor < m_Nc; ++jcolor) {
613  int cc = icolor + m_Nc * jcolor;
614  tr_sigma_inv.set_r(cc, isite, 0, v.r(jcolor));
615  tr_sigma_inv.set_i(cc, isite, 0, v.i(jcolor));
616  }
617  }
618  }
619  }
620  return tr_sigma_inv;
621 }
622 
623 
624 //====================================================================
626 {
627  // The following counting explicitly depends on the implementation
628  // and to be recalculated when the code is modified.
629  // Present counting is based on rev.1107. [24 Aug 2014 H.Matsufuru]
630 
631  int Lvol = CommonParameters::Lvol();
632  double flop_site =
633  static_cast<double>(8 * m_Nc * m_Nc * m_Nd * m_Nd);
634 
635  double flop = flop_site * static_cast<double>(Lvol / 2);
636 
637  return flop;
638 }
639 
640 
641 //====================================================================
642 //============================================================END=====
Staple construction.
Definition: staples_eo.h:33
BridgeIO vout
Definition: bridgeIO.cpp:207
void init(std::string repr)
double cmp_i(const int cc, const int s, const int site, const int e=0) const
Definition: field_F.h:100
void detailed(const char *format,...)
Definition: bridgeIO.cpp:50
void Register_string(const string &, const string &)
Definition: parameters.cpp:352
double r(const int c) const
Definition: vec_SU_N.h:65
void set(const int jin, const int site, const int jex, double v)
Definition: field.h:128
void general(const char *format,...)
Definition: bridgeIO.cpp:38
GammaMatrix get_GM(GMspecies spec)
void set_int(const string &key, const int value)
Definition: parameters.cpp:262
Container of Field-type object.
Definition: field.h:37
int nvol() const
Definition: field.h:101
double cmp_i(const int cc, const int site, const int mn=0) const
Definition: field_G.h:88
Field_G m_T
m_T = 1 - kappa c_SW sigma F / 2
double cmp(const int jin, const int site, const int jex) const
Definition: field.h:108
int site(const int x2, const int y, const int z, const int t, const int ieo) const
Definition: index_eo.h:104
std::valarray< GammaMatrix > m_SG
const Field_G * m_Ueo
Class for parameters.
Definition: parameters.h:40
void copy(Field &y, const Field &x)
copy(y, x): y = x
Definition: field.cpp:409
static int Lvol()
void set_parameters(const Parameters &params)
static Parameters * New(const std::string &realm)
Standard Conjugate Gradient solver algorithm.
Definition: solver_CG.h:41
int fetch_int_vector(const string &key, std::valarray< int > &val) const
Definition: parameters.cpp:176
void multadd_Field_Gn(Field_F &y, const int ex, const Field_G &u, int ex1, const Field_F &x, int ex2, const double a)
Wilson-type fermion field.
Definition: field_F.h:37
virtual void set_parameters(const Parameters &params)=0
void set(const int c, const double re, const double im)
Definition: vec_SU_N.h:74
void set_string(const string &key, const string &value)
Definition: parameters.cpp:298
SU(N) gauge field.
Definition: field_G.h:36
static double epsilon_criterion2()
void reset(int Nvol, int Nex)
Definition: field_F.h:81
static const std::string class_name
const Field_F mult_csw_inv(const Field_F &, const int ieo)
void mult_iGM(Field_F &y, const GammaMatrix &gm, const Field_F &x)
gamma matrix multiplication (i is multiplied)
Definition: field_F_imp.cpp:94
void mult_isigma(Field_F &, const Field_F &, const int mu, const int nu)
double i(const int c) const
Definition: vec_SU_N.h:67
void set_ri(const int cc, const int s, const int site, const int e, const double re, const double im)
Definition: field_F.h:116
Bridge::VerboseLevel m_vl
Definition: fopr.h:99
const Field D(const Field &f, const int ieo)
Set of Gamma Matrices: basis class.
Field_G upper(const Field_G *, const int, const int)
Definition: staples_eo.cpp:89
int nex() const
Definition: field.h:102
void set_fieldstrength(Field_G &, const int, const int)
void crucial(const char *format,...)
Definition: bridgeIO.cpp:26
Base class for linear solver class family.
Definition: solver.h:37
static bool Register(const std::string &realm, const creator_callback &cb)
void set_double(const string &key, const double value)
Definition: parameters.cpp:271
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
void reverseField(Field &lex, const Field &eo)
Definition: index_eo.cpp:110
void forward(Field &, const Field &, const int mu)
const Field_G trSigmaInv(const int mu, const int nu)
Field_G lower(const Field_G *, const int, const int)
Definition: staples_eo.cpp:112
std::valarray< int > m_boundary
void Register_double(const string &, const double)
Definition: parameters.cpp:324
double cmp_r(const int cc, const int site, const int mn=0) const
Definition: field_G.h:83
void Register_int_vector(const string &, const std::valarray< int > &)
Definition: parameters.cpp:345
void setpart_ex(int ex, const Field &w, int exw)
Definition: field.h:150
int fetch_double(const string &key, double &val) const
Definition: parameters.cpp:124
string get_string(const string &key) const
Definition: parameters.cpp:85
void set_mat(const int site, const int mn, const Mat_SU_N &U)
Definition: field_G.h:156
std::valarray< GammaMatrix > m_GM
Gamma Matrix and Sigma_{mu,nu} = -i [Gamma_mu, Gamma_nu] /2.
double flop_count()
retuns number of floating point number operations.
std::vector< double > csmatrix(const int &)
valarray< Field_G > m_T2
m_T2 is used in Org-version.
int sg_index(int mu, int nu)
ShiftField_eo m_shift_eo
virtual void solve(Field &solution, const Field &source, int &Nconv, double &diff)=0
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:191
void set_config(Field *Ueo)
setting pointer to the gauge configuration.
double cmp_r(const int cc, const int s, const int site, const int e=0) const
Definition: field_F.h:94