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