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