Bridge++  Ver. 2.0.3
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
fprop_alt_Standard_eo_Richardson-tmpl.h
Go to the documentation of this file.
1 
10 template<typename AFIELD_d, typename AFIELD_f>
12  = "Fprop_alt_Standard_eo_Richardson";
13 //====================================================================
14 template<typename AFIELD_d, typename AFIELD_f>
16  const Parameters& params_solver)
17 {
18  // this constructor assumes that the factories are available.
19  vout.general(m_vl, "\n");
20  vout.general(m_vl, "%s: being setup.\n", class_name.c_str());
21 
22  string fopr_type = params_fopr.get_string("fermion_type");
23  fopr_type += "_eo";
24 
25  m_kernel_d = 0;
26  m_fopr_d = AFopr<AFIELD_d>::New(fopr_type, params_fopr);
27 
28  m_kernel_f = 0;
29  m_fopr_f = AFopr<AFIELD_f>::New(fopr_type, params_fopr);
30 
31  m_dr_smear = 0;
32 
33  // solver parameters for preconditioner solver
34  Parameters params_solver2;
35  int max_iter = params_solver.get_int("maximum_number_of_iteration");
36  int max_restart = params_solver.get_int("maximum_number_of_restart");
37  params_solver2.set_int("maximum_number_of_iteration", max_iter * max_restart);
38  params_solver2.set_int("maximum_number_of_restart", 1);
39  params_solver2.set_double("convergence_criterion_squared", 1.0e-8);
40  string str_vlevel = params_solver.get_string("verbose_level");
41  params_solver2.set_string("verbose_level", str_vlevel);
42  params_solver2.set_string("initial_guess_mode", "ZERO");
43 
44  string solver_type = params_solver.get_string("solver_type");
45  m_solver_prec = ASolver<AFIELD_f>::New(solver_type, m_fopr_f);
46  m_solver_prec->set_parameters(params_solver2);
47 
48  m_precond
49  = new APrecond_Mixedprec<AFIELD_d, AFIELD_f>(m_solver_prec);
50 
51  m_solver
52  = new ASolver_Richardson<AFIELD_d>(m_fopr_d, m_precond);
53  m_solver->set_parameters(params_solver);
54 
55  m_use_DdagD = false;
56  if (solver_type == "CGNR") {
57  m_use_DdagD = true;
58  }
59  reset_performance();
60 
61 
62  int nin = m_fopr_d->field_nin();
63  int nvol2 = m_fopr_d->field_nvol();
64  int nex = m_fopr_d->field_nex();
65  int nvol = 2 * nvol2;
66 
67  m_axq.reset(nin, nvol, nex);
68  m_abq.reset(nin, nvol, nex);
69 
70  m_be.reset(nin, nvol2, nex);
71  m_bo.reset(nin, nvol2, nex);
72  m_xe.reset(nin, nvol2, nex);
73  m_xo.reset(nin, nvol2, nex);
74  // m_y1.reset(nin, nvol2, nex);
75  // m_y2.reset(nin, nvol2, nex);
76  // m_y1f.reset(nin, nvol2, nex);
77  // m_y2f.reset(nin, nvol2, nex);
78 
79 
80  vout.general(m_vl, "%s: setup finished.\n", class_name.c_str());
81 }
82 
83 
84 //====================================================================
85 template<typename AFIELD_d, typename AFIELD_f>
87  const Parameters& params_solver,
88  Director_Smear *dr_smear)
89 {
90  // this constructor assumes that the factories are available.
91  vout.general(m_vl, "\n");
92  vout.general(m_vl, "%s: being setup.\n", class_name.c_str());
93 
94  m_dr_smear = dr_smear;
95 
96  string fopr_type = params_fopr.get_string("fermion_type");
97  fopr_type += "_eo";
98 
99  m_kernel_d = AFopr<AFIELD_d>::New(fopr_type, params_fopr);
100  m_fopr_d = new AFopr_Smeared<AFIELD_d>(m_kernel_d, m_dr_smear);
101 
102  m_kernel_f = AFopr<AFIELD_f>::New(fopr_type, params_fopr);
103  m_fopr_f = new AFopr_Smeared<AFIELD_f>(m_kernel_f, m_dr_smear);
104 
105  // solver parameters for preconditioner solver
106  Parameters params_solver2;
107  params_solver2.set_int("maximum_number_of_iteration", 200);
108  params_solver2.set_int("maximum_number_of_restart", 1);
109  params_solver2.set_double("convergence_criterion_squared", 2.5e-8);
110  string str_vlevel = params_solver.get_string("verbose_level");
111  params_solver2.set_string("verbose_level", str_vlevel);
112  params_solver2.set_string("initial_guess_mode", "ZERO");
113 
114  string solver_type = params_solver.get_string("solver_type");
115  m_solver_prec = ASolver<AFIELD_f>::New(solver_type, m_fopr_f);
116  m_solver_prec->set_parameters(params_solver2);
117 
118  m_precond
119  = new APrecond_Mixedprec<AFIELD_d, AFIELD_f>(m_solver_prec);
120 
121  m_solver = new
122  ASolver_Richardson<AFIELD_d>(m_fopr_d, m_precond);
123  m_solver->set_parameters(params_solver);
124 
125  m_use_DdagD = false;
126  if (solver_type == "CGNR") {
127  m_use_DdagD = true;
128  }
129  reset_performance();
130 
131  int nin = m_fopr_d->field_nin();
132  int nvol2 = m_fopr_d->field_nvol();
133  int nex = m_fopr_d->field_nex();
134  int nvol = 2 * nvol2;
135 
136  m_axq.reset(nin, nvol, nex);
137  m_abq.reset(nin, nvol, nex);
138 
139  m_be.reset(nin, nvol2, nex);
140  m_bo.reset(nin, nvol2, nex);
141  m_xe.reset(nin, nvol2, nex);
142  m_xo.reset(nin, nvol2, nex);
143  // m_y1.reset(nin, nvol2, nex);
144  // m_y2.reset(nin, nvol2, nex);
145  //m_y1f.reset(nin, nvol2, nex);
146  //m_y2f.reset(nin, nvol2, nex);
147 
148  vout.general(m_vl, "%s: setup finished.\n", class_name.c_str());
149  fflush(0);
150  exit(EXIT_SUCCESS);
151 }
152 
153 
154 //====================================================================
155 template<typename AFIELD_d, typename AFIELD_f>
157 {
158  delete m_solver;
159  delete m_precond;
160  delete m_solver_prec;
161  delete m_fopr_f;
162  delete m_fopr_d;
163  if (m_kernel_d != 0) delete m_kernel_d;
164  if (m_kernel_f != 0) delete m_kernel_f;
165 }
166 
167 
168 //====================================================================
169 template<typename AFIELD_d, typename AFIELD_f>
171 {
172  m_fopr_d->set_config(U);
173  m_fopr_f->set_config(U);
174 }
175 
176 
177 //====================================================================
178 template<typename AFIELD_d, typename AFIELD_f>
180  int& nconv, double& diff)
181 {
182  vout.paranoiac(m_vl, "%s: invert is called.\n", class_name.c_str());
183  vout.paranoiac(m_vl, "mode = %s.\n", m_mode.c_str());
184 
185  if (m_mode == "D") {
186  invert_D(xq, b, nconv, diff);
187  } else if (m_mode == "DdagD") {
188  invert_DdagD(xq, b, nconv, diff);
189  } else if (m_mode == "DdagD_even") {
190  // invert_DdagD_even(xq, b, nconv, diff);
191  vout.crucial(m_vl, "%s: unsupported mode: %s (not yet ready for Field)\n",
192  class_name.c_str(), m_mode.c_str());
193  } else {
194  vout.crucial(m_vl, "%s: unsupported mode: %s\n",
195  class_name.c_str(), m_mode.c_str());
196  exit(EXIT_FAILURE);
197  }
198 }
199 
200 
201 //====================================================================
202 template<typename AFIELD_d, typename AFIELD_f>
204  int& nconv, double& diff)
205 {
206  vout.paranoiac(m_vl, "%s: invert is called.\n", class_name.c_str());
207  vout.paranoiac(m_vl, "mode = %s.\n", m_mode.c_str());
208 
209  if (m_mode == "D") {
210  invert_D(xq, b, nconv, diff);
211  } else if (m_mode == "DdagD") {
212  invert_DdagD(xq, b, nconv, diff);
213  } else if (m_mode == "DdagD_even") {
214  invert_DdagD_even(xq, b, nconv, diff);
215  } else {
216  vout.crucial(m_vl, "%s: unsupported mode: %s\n",
217  class_name.c_str(), m_mode.c_str());
218  exit(EXIT_FAILURE);
219  }
220 }
221 
222 
223 //====================================================================
224 template<typename AFIELD_d, typename AFIELD_f>
226  Field& xq, const Field& b,
227  int& nconv, double& diff)
228 {
230  vout.paranoiac("invert_D start.\n");
231 #pragma omp parallel
232  {
233  Timer timer;
234  timer.reset();
235  timer.start();
236 
238 
239  if (m_fopr_d->needs_convert()) {
240  vout.detailed(m_vl, "convert required.\n");
241  m_fopr_d->convert(m_abq, b);
242  } else {
243  vout.detailed(m_vl, "convert not required.\n");
244  convert(index_alt, m_abq, b);
245  }
246 
247 #pragma omp barrier
248  timer.stop();
249  invert_D(m_axq, m_abq, nconv, diff);
250  timer.start();
251 #pragma omp barrier
252  if (m_fopr_d->needs_convert()) {
253  m_fopr_d->reverse(xq, m_axq);
254  } else {
255  reverse(index_alt, xq, m_axq);
256  }
257  timer.stop();
258 #pragma omp master
259  {
260  m_elapsed_time += timer.elapsed_sec();
261  }
262  } // omp parallel
263 }
264 
265 
266 //====================================================================
267 template<typename AFIELD_d, typename AFIELD_f>
269  Field& xq, const Field& b,
270  int& nconv, double& diff)
271 {
272  Timer timer;
273  timer.reset();
274  timer.start();
275 
277 #pragma omp parallel
278  {
279  if (m_fopr_d->needs_convert()) {
280  vout.detailed(m_vl, "convert required.\n");
281  m_fopr_d->convert(m_abq, b);
282  } else {
283  vout.detailed(m_vl, "convert not required.\n");
284  convert(index_alt, m_abq, b);
285  }
286  }
287  timer.stop();
288  invert_DdagD(m_axq, m_abq, nconv, diff);
289  timer.start();
290 #pragma omp parallel
291  {
292  if (m_fopr_d->needs_convert()) {
293  m_fopr_d->reverse(xq, m_axq);
294  } else {
295  reverse(index_alt, xq, m_axq);
296  }
297  }
298  timer.stop();
299  m_elapsed_time += timer.elapsed_sec();
300 }
301 
302 
303 //====================================================================
304 template<typename AFIELD_d, typename AFIELD_f>
306  AFIELD_d& xq, const AFIELD_d& b,
307  int& nconv, double& diff)
308 {
309  // ThreadManager::assert_single_thread(class_name);
310  vout.paranoiac("invert_D start.\n");
311 
312 #pragma omp master
313  {
314  m_timer.reset();
315  m_timer.start();
316  }
317 
318  //AIndex_lex<real_t, AFIELD_d::IMPL> index_alt;
320 
321  index_eo.split(m_be, m_bo, b);
322 #pragma omp barrier
323 
324  invert_De(m_xe, m_xo, m_be, m_bo, nconv, diff);
325 
326 #pragma omp barrier
327  index_eo.merge(xq, m_xe, m_xo);
328 
329 #pragma omp master
330  {
331  m_timer.stop();
332  m_elapsed_time += m_timer.elapsed_sec();
333  m_flop_count += m_solver->flop_count();
334  }
335 }
336 
337 
338 //====================================================================
339 template<typename AFIELD_d, typename AFIELD_f>
341  AFIELD_d& xq, const AFIELD_d& b,
342  int& nconv, double& diff)
343 {
345  vout.paranoiac("invert_DdagD start.\n");
346 
347  #pragma omp parallel
348  {
349 #pragma omp master
350  {
351  m_timer.reset();
352  m_timer.start();
353  }
354 
356  index_eo.split(m_xe, m_xo, b);
357 #pragma omp barrier
358 
359  int nconv1;
360  double diff1;
361  invert_De_dag(m_be, m_bo, m_xe, m_xo, nconv1, diff1);
362 #pragma omp barrier
363 
364  int nconv2;
365  double diff2;
366  invert_De(m_xe, m_xo, m_be, m_bo, nconv2, diff2);
367 
368 #pragma omp barrier
369  nconv1 += nconv2;
370  diff1 += diff2;
371 
372  index_eo.merge(xq, m_xe, m_xo);
373 
374 #pragma omp master
375  {
376  m_timer.stop();
377  m_elapsed_time += m_timer.elapsed_sec();
378  m_flop_count += m_solver->flop_count();
379  nconv = nconv1;
380  diff = diff1;
381  }
382  }
383 }
384 
385 
386 //====================================================================
387 template<typename AFIELD_d, typename AFIELD_f>
389  AFIELD_d& xe, AFIELD_d& xo,
390  AFIELD_d& be, AFIELD_d& bo, // be, bo are destroyed
391  int& nconv, double& diff)
392 {
393  // set even source vector.
394 #pragma omp barrier
395 
396  m_fopr_d->mult(xo, bo, "Doo_inv");
397 #pragma omp barrier
398 
399  m_fopr_d->mult(xe, xo, "Deo");
400 #pragma omp barrier
401 
402  aypx(real_t(-1.0), xe, be); // xe = -Deo Doo_inv bo + be
403 #pragma omp barrier
404 
405  m_fopr_d->mult(be, xe, "Dee_inv");
406 
407  if (m_use_DdagD) {
408  m_fopr_d->set_mode("Ddag");
409  m_fopr_d->mult(xo, be);
410  m_fopr_d->set_mode("DdagD");
411  m_fopr_f->set_mode("DdagD");
412  m_solver->solve(xe, xo, nconv, diff);
413  } else {
414  m_fopr_d->set_mode("D");
415  m_fopr_f->set_mode("D");
416  m_solver->solve(xe, be, nconv, diff);
417  }
418 #pragma omp barrier
419 
420  m_fopr_d->mult(xo, xe, "Doe");
421 #pragma omp barrier
422 
423  axpy(bo, real_t(-1.0), xo); // bo := bo - Doe xe
424 #pragma omp barrier
425 
426  m_fopr_d->mult(xo, bo, "Doo_inv");
427 #pragma omp barrier
428 }
429 
430 
431 //====================================================================
432 template<typename AFIELD_d, typename AFIELD_f>
434  AFIELD_d& xe, AFIELD_d& xo,
435  AFIELD_d& be, AFIELD_d& bo, // be, bo are destroyed
436  int& nconv, double& diff)
437 {
438  // set even source vector.
439 #pragma omp barrier
440 
441  m_fopr_d->mult_dag(xo, bo, "Doo_inv");
442 #pragma omp barrier
443 
444  m_fopr_d->mult_dag(xe, xo, "Deo");
445 #pragma omp barrier
446 
447  axpy(be, real_t(-1.0), xe); // be = be - Deo Boo_inv bo
448 #pragma omp barrier
449 
450  if (m_use_DdagD) {
451  m_fopr_d->set_mode("DdagD");
452  m_fopr_f->set_mode("DdagD");
453  m_solver->solve(xe, be, nconv, diff);
454  m_fopr_d->set_mode("D");
455  m_fopr_d->mult(xo, xe);
456  } else {
457  m_fopr_d->set_mode("Ddag");
458  m_fopr_f->set_mode("Ddag");
459  m_solver->solve(xo, be, nconv, diff);
460  }
461 #pragma omp barrier
462  m_fopr_d->mult_dag(xe, xo, "Dee_inv");
463 #pragma omp barrier
464 
465  m_fopr_d->mult_dag(xo, xe, "Doe");
466 #pragma omp barrier
467 
468  axpy(bo, real_t(-1.0), xo); // bo := bo - Doe xe
469 #pragma omp barrier
470 
471  m_fopr_d->mult_dag(xo, bo, "Doo_inv"); // xo = Doo_inv (bo - Doe xe)
472 #pragma omp barrier
473 }
474 
475 
476 
477 
478 //====================================================================
479 template<typename AFIELD_d, typename AFIELD_f>
481  AFIELD_d& xq, const AFIELD_d& b,
482  int& nconv, double& diff)
483 {
485  vout.paranoiac("invert_DdagD_even start.\n");
486 
487  m_timer.reset();
488  m_timer.start();
489 
490  m_fopr_d->set_mode("DdagD");
491  m_fopr_f->set_mode("DdagD");
492 
493 #pragma omp parallel
494  {
495  m_solver->solve(xq, b, nconv, diff);
496  }
497 
498  m_timer.stop();
499  m_elapsed_time += m_timer.elapsed_sec();
500  m_flop_count += m_solver->flop_count();
501 }
502 
503 
504 //====================================================================
505 template<typename AFIELD_d, typename AFIELD_f>
507 {
508  return m_solver->flop_count();
509 }
510 
511 
512 //====================================================================
513 template<typename AFIELD_d, typename AFIELD_f>
515 {
516  m_flop_count = 0.0;
517  m_elapsed_time = 0.0;
518 }
519 
520 
521 //====================================================================
522 template<typename AFIELD_d, typename AFIELD_f>
524 {
525  double flops = m_flop_count / m_elapsed_time;
526  double gflops = flops * 1.0e-9;
527 
528  vout.general(m_vl, "\n");
529  vout.general(m_vl, "%s: solver performance:\n", class_name.c_str());
530  vout.general(m_vl, " Elapsed time = %14.6f sec\n", m_elapsed_time);
531  vout.general(m_vl, " Flop(total) = %18.0f\n", m_flop_count);
532  vout.general(m_vl, " Performance = %11.3f GFlops\n", gflops);
533 }
534 
535 
536 //====================================================================
537 template<typename AFIELD_d, typename AFIELD_f>
539  const std::string mode,
540  const int Nrepeat)
541 {
542  int nin = m_fopr_d->field_nin();
543  int nvol = m_fopr_d->field_nvol();
544  int nex = m_fopr_d->field_nex();
545 
546  unique_ptr<Timer> timer(new Timer);
547 
548  std::string mode_prev_d = m_fopr_d->get_mode();
549  std::string mode_prev_f = m_fopr_f->get_mode();
550 
551  m_fopr_d->set_mode(mode);
552  m_fopr_f->set_mode(mode);
553 
554  {
555  // AFIELD_d axq(nin, nvol, nex), abq(nin, nvol, nex);
556  AFIELD_d &y1 = m_be;
557  AFIELD_d &y2 = m_bo;
558 #pragma omp parallel
559  {
560  y1.set(0.0);
561  }
562  y1.set(0, 1.0);
563 
564  timer->start();
565 
566 #pragma omp parallel
567  {
568  for (int i = 0; i < Nrepeat; ++i) {
569  m_fopr_d->mult(y2, y1);
570  m_fopr_d->mult(y1, y2);
571  }
572  }
573 
574  timer->stop();
575  }
576 
577  double flop_fopr = m_fopr_d->flop_count();
578  double flop_total = flop_fopr * double(2 * Nrepeat);
579 
580  double elapsed_time = timer->elapsed_sec();
581  double flops = flop_total / elapsed_time;
582  double gflops = flops * 1.0e-9;
583 
584  vout.general(m_vl, "\n");
585  vout.general(m_vl, "%s: mult performance:\n", class_name.c_str());
586  vout.general(m_vl, " mult mode = %s\n", mode.c_str());
587  vout.general(m_vl, " Double precision:\n");
588  vout.general(m_vl, " Elapsed time = %14.6f sec\n", elapsed_time);
589  vout.general(m_vl, " Flop(Fopr) = %18.0f\n", flop_fopr);
590  vout.general(m_vl, " Flop(total) = %18.0f\n", flop_total);
591  vout.general(m_vl, " Performance = %11.3f GFlops\n", gflops);
592 
593  {
594  // AFIELD_f axq(nin, nvol, nex), abq(nin, nvol, nex);
595  AFIELD_f y1f;
596  AFIELD_f y2f;
597  int nin = m_fopr_f->field_nin();
598  int nvol2 = m_fopr_f->field_nvol();
599  int nex = m_fopr_f->field_nex();
600  y1f.reset(nin, nvol2, nex);
601  y2f.reset(nin, nvol2, nex);
602 
603 #pragma omp parallel
604  {
605  y1f.set(0.0);
606  }
607  y2f.set(0, 1.0);
608 
609  timer->reset();
610  timer->start();
611 
612 #pragma omp parallel
613  {
614  for (int i = 0; i < Nrepeat; ++i) {
615  m_fopr_f->mult(y2f, y1f);
616  m_fopr_f->mult(y1f, y2f);
617  }
618  }
619 
620  timer->stop();
621  }
622 
623  flop_fopr = m_fopr_f->flop_count();
624  flop_total = flop_fopr * double(2 * Nrepeat);
625 
626  elapsed_time = timer->elapsed_sec();
627  flops = flop_total / elapsed_time;
628  gflops = flops * 1.0e-9;
629 
630  vout.general(m_vl, " Single precision:\n");
631  vout.general(m_vl, " Elapsed time = %14.6f sec\n", elapsed_time);
632  vout.general(m_vl, " Flop(Fopr) = %18.0f\n", flop_fopr);
633  vout.general(m_vl, " Flop(total) = %18.0f\n", flop_total);
634  vout.general(m_vl, " Performance = %11.3f GFlops\n", gflops);
635 
636  m_fopr_d->set_mode(mode_prev_d);
637  m_fopr_f->set_mode(mode_prev_f);
638 }
639 
640 
641 //============================================================END=====
Parameters::set_string
void set_string(const string &key, const string &value)
Definition: parameters.cpp:39
AFopr
Definition: afopr.h:48
ASolver
Definition: asolver.h:23
Fprop_alt_Standard_eo_Richardson::invert_De
void invert_De(AFIELD_d &, AFIELD_d &, AFIELD_d &, AFIELD_d &, int &, double &)
Definition: fprop_alt_Standard_eo_Richardson-tmpl.h:388
Fprop_alt_Standard_eo_Richardson::set_config
void set_config(Field *)
Definition: fprop_alt_Standard_eo_Richardson-tmpl.h:170
Parameters
Class for parameters.
Definition: parameters.h:46
AIndex_lex
Definition: aindex_lex_base.h:17
Fprop_alt_Standard_eo_Richardson
Get quark propagator for Fopr with lexical site index: alternative version.
Definition: fprop_alt_Standard_eo_Richardson.h:31
Parameters::set_double
void set_double(const string &key, const double value)
Definition: parameters.cpp:33
convert
void convert(INDEX &index, AFIELD &v, const Field &w)
Definition: afield-inc.h:129
AField< double, QXS >
Parameters::get_int
int get_int(const string &key) const
Definition: parameters.cpp:192
Bridge::BridgeIO::detailed
void detailed(const char *format,...)
Definition: bridgeIO.cpp:219
Fprop_alt_Standard_eo_Richardson::tidyup
void tidyup()
Definition: fprop_alt_Standard_eo_Richardson-tmpl.h:156
aypx
void aypx(const double a, Field &y, const Field &x)
aypx(y, a, x): y := a * y + x
Definition: field.cpp:509
Fprop_alt_Standard_eo_Richardson::init
void init(const Parameters &params_fopr, const Parameters &params_solver)
Definition: fprop_alt_Standard_eo_Richardson-tmpl.h:15
axpy
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
Definition: field.cpp:380
real_t
double real_t
Definition: bridgeQXS_Clover_coarse_double.cpp:16
Fprop_alt_Standard_eo_Richardson::report_performance
void report_performance()
Definition: fprop_alt_Standard_eo_Richardson-tmpl.h:523
Timer
Definition: timer.h:31
Bridge::BridgeIO::paranoiac
void paranoiac(const char *format,...)
Definition: bridgeIO.cpp:238
Timer::start
void start()
Definition: timer.cpp:44
Fprop_alt_Standard_eo_Richardson::invert_DdagD
void invert_DdagD(Field &, const Field &, int &, double &)
Definition: fprop_alt_Standard_eo_Richardson-tmpl.h:268
Fprop_alt_Standard_eo_Richardson::mult_performance
void mult_performance(const std::string mode, const int Nrepeat)
Definition: fprop_alt_Standard_eo_Richardson-tmpl.h:538
AFopr_Smeared
smeared fermion operator: alternative version.
Definition: afopr_Smeared.h:41
Fprop_alt_Standard_eo_Richardson::invert_De_dag
void invert_De_dag(AFIELD_d &, AFIELD_d &, AFIELD_d &, AFIELD_d &, int &, double &)
Definition: fprop_alt_Standard_eo_Richardson-tmpl.h:433
Director_Smear
Manager of smeared configurations.
Definition: director_Smear.h:39
Fprop_alt_Standard_eo_Richardson::reset_performance
void reset_performance()
Definition: fprop_alt_Standard_eo_Richardson-tmpl.h:514
Fprop_alt_Standard_eo_Richardson::invert_D
void invert_D(Field &, const Field &, int &, double &)
Definition: fprop_alt_Standard_eo_Richardson-tmpl.h:225
APrecond_Mixedprec
Definition: aprecond_Mixedprec.h:28
Fprop_alt_Standard_eo_Richardson::invert_DdagD_even
void invert_DdagD_even(AFIELD_d &, const AFIELD_d &, int &, double &)
Definition: fprop_alt_Standard_eo_Richardson-tmpl.h:480
reverse
void reverse(INDEX &index, Field &v, const AFIELD &w)
Definition: afield-inc.h:159
Fprop_alt_Standard_eo_Richardson::invert
void invert(Field &, const Field &, int &, double &)
invert accordingly to the mode. [22 Sep 2018 H.Matsufuru]
Definition: fprop_alt_Standard_eo_Richardson-tmpl.h:179
Parameters::set_int
void set_int(const string &key, const int value)
Definition: parameters.cpp:36
Parameters::get_string
string get_string(const string &key) const
Definition: parameters.cpp:221
Bridge::BridgeIO::crucial
void crucial(const char *format,...)
Definition: bridgeIO.cpp:180
Fprop_alt_Standard_eo_Richardson::flop_count
double flop_count()
Definition: fprop_alt_Standard_eo_Richardson-tmpl.h:506
Field
Container of Field-type object.
Definition: field.h:46
Timer::elapsed_sec
double elapsed_sec() const
Definition: timer.cpp:107
ASolver_Richardson
Definition: asolver_Richardson.h:30
Bridge::BridgeIO::general
void general(const char *format,...)
Definition: bridgeIO.cpp:200
Timer::stop
void stop()
Definition: timer.cpp:69
ThreadManager::assert_single_thread
static void assert_single_thread(const std::string &class_name)
assert currently running on single thread.
Definition: threadManager.cpp:372
Bridge::vout
BridgeIO vout
Definition: bridgeIO.cpp:512
AIndex_eo
Definition: aindex_eo_base.h:17
Timer::reset
void reset()
Definition: timer.cpp:97