Bridge++  Ver.2.1.3
afopr_Domainwall_5din-tmpl.h
Go to the documentation of this file.
1 
11 
13 
14 #include <stdio.h>
15 #include <stdlib.h>
16 #include <assert.h>
17 using namespace std;
18 
22 
23 
24 template<typename AFIELD>
26  = "AFopr_Domainwall_5din";
27 //====================================================================
28 template<typename AFIELD>
30 {
32 
33  std::string vlevel;
34  if (!params.fetch_string("verbose_level", vlevel)) {
35  m_vl = vout.set_verbose_level(vlevel);
36  } else {
37  m_vl = CommonParameters::Vlevel();
38  }
39 
40  vout.general(m_vl, "%s: construction\n", class_name.c_str());
42 
43  m_repr = "Dirac"; // now only the Dirac repr is available.
44 
45  std::string repr;
46  if (!params.fetch_string("gamma_matrix_type", repr)) {
47  if (repr != "Dirac") {
48  vout.crucial(" Error at %s: unsupported gamma-matrix type: %s\n",
49  class_name.c_str(), repr.c_str());
50  exit(EXIT_FAILURE);
51  }
52  }
53 
54  int Nc = CommonParameters::Nc();
55  if (Nc != 3) {
56  vout.crucial("%s: only applicable to Nc = 3\n",
57  class_name.c_str());
58  exit(EXIT_FAILURE);
59  }
60 
61  int Nd = CommonParameters::Nd();
62  m_Nvcd = 2 * Nc * Nd;
63  m_Ndf = 2 * Nc * Nc;
64 
65  m_Nvol = CommonParameters::Nvol();
66  m_Ndim = CommonParameters::Ndim();
67  m_Nx = CommonParameters::Nx();
68  m_Ny = CommonParameters::Ny();
69  m_Nz = CommonParameters::Nz();
70  m_Nt = CommonParameters::Nt();
71 
72  m_Nsize[0] = m_Nx;
73  m_Nsize[1] = m_Ny;
74  m_Nsize[2] = m_Nz;
75  m_Nsize[3] = m_Nt;
76 
77  // switches for coomunication
78  int req_comm = 0; // 0: communication only if necessary
79  // 1: communication is enforced any time
80  if (!params.fetch_int("require_communication", req_comm)) {
81  vout.general(m_vl, "req_comm = %d (input)\n", req_comm);
82  } else {
83  vout.general(m_vl, "req_comm = %d (default)\n", req_comm);
84  }
85 
86  do_comm_any = 0;
87  for (int mu = 0; mu < m_Ndim; ++mu) {
88  do_comm[mu] = 1;
89  if ((req_comm == 0) && (Communicator::npe(mu) == 1)) do_comm[mu] = 0;
90  do_comm_any += do_comm[mu];
91  vout.general("do_comm[%d] = %d\n", mu, do_comm[mu]);
92  }
93 
94  m_Ns = 0; // temporary set
95  set_parameters(params);
96 
98 
99  // gauge configuration.
100  m_U.reset(m_Ndf, m_Nvol, m_Ndim);
101 
102  m_Nbdsize.resize(m_Ndim);
103  m_Nbdsize[0] = (m_Nvcd/2) * m_Ns * ceil_nwp(m_Nvol/m_Nx);
104  m_Nbdsize[1] = (m_Nvcd/2) * m_Ns * ceil_nwp(m_Nvol/m_Ny);
105  m_Nbdsize[2] = (m_Nvcd/2) * m_Ns * ceil_nwp(m_Nvol/m_Nz);
106  m_Nbdsize[3] = (m_Nvcd/2) * m_Ns * ceil_nwp(m_Nvol/m_Nt);
107 
108  setup_channels();
109 
110  vout.general(m_vl, "%s: construction finished.\n",
111  class_name.c_str());
112 
113 }
114 
115 //====================================================================
116 template<typename AFIELD>
118 {
120 
121  // openacc device memory clean up
122  for(int mu = 0; mu < m_Ndim; ++mu){
123 
124 #ifdef USE_MPI
125  real_t* buf_dn1 = (real_t*)chsend_dn[mu].ptr();
126  real_t* buf_dn2 = (real_t*)chrecv_dn[mu].ptr();
127  real_t* buf_up1 = (real_t*)chrecv_up[mu].ptr();
128  real_t* buf_up2 = (real_t*)chsend_up[mu].ptr();
129  BridgeACC::afield_tidyup(buf_dn1, m_Nbdsize[mu]);
130  BridgeACC::afield_tidyup(buf_dn2, m_Nbdsize[mu]);
131  BridgeACC::afield_tidyup(buf_up1, m_Nbdsize[mu]);
132  BridgeACC::afield_tidyup(buf_up2, m_Nbdsize[mu]);
133 #else
134  real_t* buf_up = (real_t*)chsend_up[mu].ptr();
135  real_t* buf_dn = (real_t*)chsend_dn[mu].ptr();
136  BridgeACC::afield_tidyup(buf_up, m_Nbdsize[mu]);
137  BridgeACC::afield_tidyup(buf_dn, m_Nbdsize[mu]);
138 #endif
139 
140  }
141 
142 }
143 
144 //====================================================================
145 template<typename AFIELD>
147 {
149 
150  chsend_up.resize(m_Ndim);
151  chrecv_up.resize(m_Ndim);
152  chsend_dn.resize(m_Ndim);
153  chrecv_dn.resize(m_Ndim);
154 
155  for (int mu = 0; mu < m_Ndim; ++mu) {
156  size_t Nvsize = m_Nbdsize[mu] * sizeof(real_t);
157 
158  chsend_dn[mu].send_init(Nvsize, mu, -1);
159  chsend_up[mu].send_init(Nvsize, mu, 1);
160 #ifdef USE_MPI
161  chrecv_up[mu].recv_init(Nvsize, mu, 1);
162  chrecv_dn[mu].recv_init(Nvsize, mu, -1);
163 #else
164  void *buf_up = (void *)chsend_dn[mu].ptr();
165  chrecv_up[mu].recv_init(Nvsize, mu, 1, buf_up);
166  void *buf_dn = (void *)chsend_up[mu].ptr();
167  chrecv_dn[mu].recv_init(Nvsize, mu, -1, buf_dn);
168 #endif
169 
170  if (do_comm[mu] == 1) {
171  chset_send.append(chsend_up[mu]);
172  chset_send.append(chsend_dn[mu]);
173  chset_recv.append(chrecv_up[mu]);
174  chset_recv.append(chrecv_dn[mu]);
175  }
176 
177  // openacc device memory allocation
178 #ifdef USE_MPI
179  real_t* buf_dn1 = (real_t*)chsend_dn[mu].ptr();
180  real_t* buf_dn2 = (real_t*)chrecv_dn[mu].ptr();
181  real_t* buf_up1 = (real_t*)chsend_up[mu].ptr();
182  real_t* buf_up2 = (real_t*)chrecv_up[mu].ptr();
183  BridgeACC::afield_init(buf_dn1, m_Nbdsize[mu]);
184  BridgeACC::afield_init(buf_dn2, m_Nbdsize[mu]);
185  BridgeACC::afield_init(buf_up1, m_Nbdsize[mu]);
186  BridgeACC::afield_init(buf_up2, m_Nbdsize[mu]);
187 #else
188  BridgeACC::afield_init((real_t*)buf_up, m_Nbdsize[mu]);
189  BridgeACC::afield_init((real_t*)buf_dn, m_Nbdsize[mu]);
190 #endif
191 
192  }
193 
194 }
195 
196 //====================================================================
197 template<typename AFIELD>
199 {
200  std::string vlevel;
201  if (!params.fetch_string("verbose_level", vlevel)) {
202  m_vl = vout.set_verbose_level(vlevel);
203  }
204 
205  //- fetch and check input parameters
206  string gmset_type;
207  double mq, M0;
208  int Ns;
209  std::vector<int> bc;
210  double b, c, alpha;
211 
212  int err_optional = 0;
213  err_optional += params.fetch_string("gamma_matrix_type", gmset_type);
214 
215  err_optional = 0;
216  err_optional += params.fetch_string("code_implementation", m_impl);
217  if(err_optional){
218  vout.crucial(m_vl, " code_implementation is not given\n");
219  m_impl = "5d";
220  }
221 
222  int err = 0;
223  err += params.fetch_double("quark_mass", mq);
224  err += params.fetch_double("domain_wall_height", M0);
225  err += params.fetch_int("extent_of_5th_dimension", Ns);
226  err += params.fetch_int_vector("boundary_condition", bc);
227 
228  if (err) {
229  vout.crucial(m_vl, "Error at %s: input parameter not found.\n",
230  class_name.c_str());
231  exit(EXIT_FAILURE);
232  }
233 
234  int err2 = 0;
235  err2 += params.fetch_double("coefficient_b", b);
236  err2 += params.fetch_double("coefficient_c", c);
237  if (err2) {
238  vout.general(m_vl, " coefficients b, c are not provided:"
239  " set to Shamir's form.\n");
240  b = 1.0;
241  c = 0.0;
242  }
243 
244  int err3 = params.fetch_double("parameter_alpha", alpha);
245  if (err3) {
246  vout.general(m_vl, " parameter alpha is not provided: set to 1.0.\n");
247  alpha = 1.0;
248  }
249 
250  set_parameters(real_t(mq), real_t(M0), Ns, bc,
251  real_t(b), real_t(c), real_t(alpha));
252 
253  // if (real_t(M0) != m_M0) set_kernel_parameters(params);
254 }
255 
256 
257 //====================================================================
258 template<typename AFIELD>
260  Parameters& params) const
261 {
262  params.set_string("kernel_type", m_kernel_type);
263  params.set_string("gamma_matrix_type", m_repr);
264  params.set_string("code_implementation", m_impl);
265  params.set_double("quark_mass", double(m_mq));
266  params.set_double("domain_wall_height", double(m_M0));
267  params.set_int("extent_of_5th_dimension", m_Ns);
268  params.set_int_vector("boundary_condition", m_boundary);
269  params.set_double("coefficient_b", double(m_b[0]));
270  params.set_double("coefficient_c", double(m_c[0]));
271  params.set_double("parameter_alpha", double(m_alpha));
272  params.set_string("gamma_matrix_type", m_repr);
273 
274  params.set_string("verbose_level", vout.get_verbose_level(m_vl));
275 }
276 
277 
278 //====================================================================
279 template<typename AFIELD>
281  const real_t mq,
282  const real_t M0,
283  const int Ns,
284  const std::vector<int> bc,
285  const real_t b,
286  const real_t c,
287  const real_t alpha)
288 {
289 #pragma omp barrier
290 
291  int ith = ThreadManager::get_thread_id();
292 
293  if (ith == 0) {
294  m_M0 = real_t(M0);
295  m_mq = real_t(mq);
296  m_Ns = Ns;
297  m_NinF = m_Nvcd * m_Ns;
298  m_alpha = alpha;
299 
300  assert(bc.size() == m_Ndim);
301  if (m_boundary.size() != m_Ndim) m_boundary.resize(m_Ndim);
302 
303  for (int mu = 0; mu < m_Ndim; ++mu) {
304  m_boundary[mu] = bc[mu];
305  m_bc[mu] = 1;
306  if(do_comm[mu] > 0){ // do communication
307  if(Communicator::ipe(mu) == 0) m_bc[mu] = m_boundary[mu];
308  m_bc2[mu] = 0;
309  }else{ // no communication
310  m_bc[mu] = 0; // for boundar part (dummy)
311  m_bc2[mu] = m_boundary[mu]; // for bulk part
312  }
313  }
314 
315  if (m_b.size() != m_Ns) {
316  m_b.resize(m_Ns);
317  m_c.resize(m_Ns);
318  }
319  for (int is = 0; is < m_Ns; ++is) {
320  m_b[is] = real_t(b);
321  m_c[is] = real_t(c);
322  }
323  }
324 
325 #pragma omp barrier
326 
327  vout.general(m_vl, "%s: input parameters\n", class_name.c_str());
328  vout.general(m_vl, " mq = %8.4f\n", m_mq);
329  vout.general(m_vl, " M0 = %8.4f\n", m_M0);
330  vout.general(m_vl, " Ns = %4d\n", m_Ns);
331  for (int mu = 0; mu < m_Ndim; ++mu) {
332  vout.general(m_vl, " boundary[%d] = %2d\n", mu, m_boundary[mu]);
333  }
334  vout.general(m_vl, " coefficients:\n");
335  for (int is = 0; is < m_Ns; ++is) {
336  vout.general(m_vl, " b[%2d] = %16.10f c[%2d] = %16.10f\n",
337  is, m_b[is], is, m_c[is]);
338  }
339  vout.general(m_vl, " alpha = %8.4f\n", m_alpha);
340 
341  set_precond_parameters();
342 
343  // working 5d vectors.
344  if (m_w1.nin() != m_NinF) {
345  if (ith == 0) {
346  m_w1.reset(m_NinF, m_Nvol, 1);
347  m_v1.reset(m_NinF, m_Nvol, 1);
348  }
349  }
350 
351 #pragma omp barrier
352 }
353 
354 
355 //====================================================================
356 template<typename AFIELD>
358  const std::vector<real_t> vec_b,
359  const std::vector<real_t> vec_c)
360 {
361  if ((vec_b.size() != m_Ns) || (vec_c.size() != m_Ns)) {
362  vout.crucial(m_vl, "%s: size of coefficient vectors incorrect.\n",
363  class_name.c_str());
364  }
365 
366  vout.general(m_vl, "%s: coefficient vectors are set:\n",
367  class_name.c_str());
368 
369  int ith = ThreadManager::get_thread_id();
370  if (ith == 0) {
371  for (int is = 0; is < m_Ns; ++is) {
372  m_b[is] = real_t(vec_b[is]);
373  m_c[is] = real_t(vec_c[is]);
374  vout.general(m_vl, "b[%2d] = %16.10f c[%2d] = %16.10f\n",
375  is, m_b[is], is, m_c[is]);
376  }
377  }
378 
379  set_precond_parameters();
380 }
381 
382 
383 //====================================================================
384 template<typename AFIELD>
386 {
387 #pragma omp barrier
388 
389  int ith = ThreadManager::get_thread_id();
390  if (ith == 0) {
391 
392  if (m_dp.size() != m_Ns) {
393  m_dp.resize(m_Ns);
394  m_dm.resize(m_Ns);
395  m_dpinv.resize(m_Ns);
396  m_e.resize(m_Ns - 1);
397  m_f.resize(m_Ns - 1);
398  }
399 
400  for (int is = 0; is < m_Ns; ++is) {
401  m_dp[is] = m_alpha * (1.0 + m_b[is] * (4.0 - m_M0));
402  m_dm[is] = m_alpha * (1.0 - m_c[is] * (4.0 - m_M0));
403  }
404 
405  m_e[0] = m_mq * m_dm[m_Ns - 1] / m_dp[0];
406  m_f[0] = m_mq * m_dm[0]/m_alpha;
407  for (int is = 1; is < m_Ns - 1; ++is) {
408  m_e[is] = m_e[is - 1] * m_dm[is - 1] / m_dp[is];
409  m_f[is] = m_f[is - 1] * m_dm[is] / m_dp[is - 1];
410  }
411 
412  m_g = m_e[m_Ns - 2] * m_dm[m_Ns - 2];
413 
414  for (int is = 0; is < m_Ns - 1; ++is) {
415  m_dpinv[is] = 1.0 / m_dp[is];
416  }
417  m_dpinv[m_Ns - 1] = 1.0 / (m_dp[m_Ns - 1] + m_g);
418  }
419 
420 #pragma omp barrier
421 }
422 
423 
424 //====================================================================
425 template<typename AFIELD>
427 {
428  int nth = ThreadManager::get_num_threads();
429 
430  vout.detailed(m_vl, "%s: set_config is called: num_threads = %d\n",
431  class_name.c_str(), nth);
432 
433  if (nth > 1) {
434  set_config_impl(u);
435  } else {
436  set_config_omp(u);
437  }
438 
439  vout.detailed(m_vl, "%s: set_config finished\n", class_name.c_str());
440 }
441 
442 
443 //====================================================================
444 template<typename AFIELD>
446 {
447  vout.detailed(m_vl, " set_config_omp is called.\n");
448 
449 #pragma omp parallel
450  {
451  set_config_impl(u);
452  }
453 }
454 
455 
456 //====================================================================
457 template<typename AFIELD>
459 {
460 #pragma omp barrier
461 
463 
464  convert_gauge(index_lex, m_U, *u);
465 
466 #pragma omp barrier
467 }
468 
469 //====================================================================
470 template<typename AFIELD>
472 {
473 #pragma omp barrier
474 
475  int ith, nth, isite, nsite;
476  set_threadtask_afopr(ith, nth, isite, nsite, m_Nvol);
477 
479 
480  for (int site = isite; site < nsite; ++site) {
481  for (int is = 0; is < m_Ns; ++is) {
482  for (int ivcd = 0; ivcd < NVCD; ++ivcd) {
483  int in_alt = ivcd + NVCD * is;
484  real_t vt = real_t(w.cmp(ivcd, site, is));
485  v.set_host(index.idx(in_alt, m_NinF, site, 0), vt);
486  }
487  }
488  } // site-llop
489 
490  v.update_device(); // omp barrier inside
491 
492 }
493 
494 //====================================================================
495 template<typename AFIELD>
497 {
498 #pragma omp barrier
499 
500  int ith, nth, isite, nsite;
501  set_threadtask_afopr(ith, nth, isite, nsite, m_Nvol);
502 
503  w.update_host(); // omp barrier inside
504 
506 
507  for (int site = isite; site < nsite; ++site) {
508  for (int is = 0; is < m_Ns; ++is) {
509  for (int ivcd = 0; ivcd < NVCD; ++ivcd) {
510  int in_alt = ivcd + NVCD * is;
511  double vt = double(w.cmp_host(index.idx(in_alt, m_NinF, site, 0)));
512  v.set(ivcd, site, is, vt);
513  }
514  }
515  } // site-llop
516 
517 #pragma omp barrier
518 }
519 
520 
521 //====================================================================
522 template<typename AFIELD>
524 {
525 #pragma omp barrier
526 
527  int ith = ThreadManager::get_thread_id();
528  if (ith == 0) m_mode = mode;
529 
530 #pragma omp barrier
531 }
532 
533 
534 //====================================================================
535 template<typename AFIELD>
537 {
538  if (m_mode == "D") {
539  D(v, w);
540  } else if (m_mode == "Ddag") {
541  Ddag(v, w);
542  } else if (m_mode == "DdagD") {
543  DdagD(v, w);
544  } else if (m_mode == "DDdag") {
545  DDdag(v, w);
546  } else if (m_mode == "H") {
547  H(v, w);
548  } else if (m_mode == "Hdag") {
549  Hdag(v, w);
550  } else if (m_mode == "D_prec") {
551  D_prec(v, w);
552  } else if (m_mode == "Ddag_prec") {
553  Ddag_prec(v, w);
554  } else if (m_mode == "DdagD_prec") {
555  DdagD_prec(v, w);
556  } else if (m_mode == "Prec") {
557  Prec(v, w);
558  } else {
559  vout.crucial(m_vl, "mode undeifined in %s.\n", class_name.c_str());
560  exit(EXIT_FAILURE);
561  }
562 }
563 
564 
565 //====================================================================
566 template<typename AFIELD>
568 {
569  if (m_mode == "D") {
570  Ddag(v, w);
571  } else if (m_mode == "Ddag") {
572  D(v, w);
573  } else if (m_mode == "DdagD") {
574  DdagD(v, w);
575  } else if (m_mode == "DDdag") {
576  DDdag(v, w);
577  } else if (m_mode == "H") {
578  Hdag(v, w);
579  } else if (m_mode == "Hdag") {
580  H(v, w);
581  } else if (m_mode == "D_prec") {
582  Ddag_prec(v, w);
583  } else if (m_mode == "Ddag_prec") {
584  D_prec(v, w);
585  } else if (m_mode == "DdagD_prec") {
586  DdagD_prec(v, w);
587  } else if (m_mode == "Prec") {
588  Precdag(v, w);
589  } else {
590  vout.crucial(m_vl, "mode undeifined in %s.\n", class_name.c_str());
591  exit(EXIT_FAILURE);
592  }
593 }
594 
595 
596 //====================================================================
597 template<typename AFIELD>
599  std::string mode)
600 {
601  assert(w.check_size(m_NinF, m_Nvol, 1));
602  assert(v.check_size(m_NinF, m_Nvol, 1));
603 
604  if (mode == "Prec") {
605  Prec(v, w);
606  } else if (mode == "Precdag") {
607  Precdag(v, w);
608  } else if (mode == "D") {
609  D(v, w);
610  } else if (mode == "Ddag") {
611  Ddag(v, w);
612  } else if (mode == "DdagD") {
613  DdagD(v, w);
614  } else if (mode == "DDdag") {
615  DDdag(v, w);
616  } else if (mode == "D_prec") {
617  D_prec(v, w);
618  } else if (mode == "Ddag_prec") {
619  Ddag_prec(v, w);
620  } else if (mode == "DdagD_prec") {
621  DdagD_prec(v, w);
622  } else {
623  vout.crucial(m_vl, "%s: undefined mode = %s\n",
624  class_name.c_str(), mode.c_str());
625  exit(EXIT_FAILURE);
626  }
627 }
628 
629 
630 //====================================================================
631 template<typename AFIELD>
633  std::string mode)
634 {
635  assert(w.check_size(m_NinF, m_Nvol, 1));
636  assert(v.check_size(m_NinF, m_Nvol, 1));
637 
638  if (mode == "Prec") {
639  Precdag(v, w);
640  } else if (mode == "Precdag") {
641  Prec(v, w);
642  } else if (mode == "D") {
643  Ddag(v, w);
644  } else if (mode == "Ddag") {
645  D(v, w);
646  } else if (mode == "DdagD") {
647  DdagD(v, w);
648  } else if (mode == "DDdag") {
649  DDdag(v, w);
650  } else if (mode == "D_prec") {
651  Ddag_prec(v, w);
652  } else if (mode == "Ddag_prec") {
653  D_prec(v, w);
654  } else if (mode == "DdagD_prec") {
655  DdagD_prec(v, w);
656  } else {
657  std::cout << "mode undeifined in AFopr_Domainwall_5din.\n";
658  abort();
659  }
660 }
661 
662 
663 //====================================================================
664 template<typename AFIELD>
666 {
667  real_t *vp = v.ptr(0);
668  real_t *wp = const_cast<AFIELD *>(&w)->ptr(0);
669 
670 #pragma omp barrier
671 
672  int ith = ThreadManager::get_thread_id();
673 
674  if (ith == 0)
676  vp, wp, m_Ns, m_Nsize);
677 
678 #pragma omp barrier
679 }
680 
681 //====================================================================
682 template<typename AFIELD>
684 {
685  assert(w.check_size(m_NinF, m_Nvol, 1));
686  assert(v.check_size(m_NinF, m_Nvol, 1));
687 
688  D(m_v1, w);
689  Ddag(v, m_v1);
690 }
691 
692 
693 //====================================================================
694 template<typename AFIELD>
696 {
697  assert(w.check_size(m_NinF, m_Nvol, 1));
698  assert(v.check_size(m_NinF, m_Nvol, 1));
699 
700  Ddag(m_v1, w);
701  D(v, m_v1);
702 }
703 
704 
705 //====================================================================
706 template<typename AFIELD>
708 {
709  assert(w.check_size(m_NinF, m_Nvol, 1));
710  assert(v.check_size(m_NinF, m_Nvol, 1));
711 
712  LU_inv(m_v1, w);
713  D(v, m_v1);
714  Ddag(m_v1, v);
715  LUdag_inv(v, m_v1);
716 }
717 
718 
719 //====================================================================
720 template<typename AFIELD>
722 {
723  LU_inv(m_v1, w);
724  D(v, m_v1);
725 }
726 
727 
728 //====================================================================
729 template<typename AFIELD>
731 {
732  Ddag(m_v1, w);
733  LUdag_inv(v, m_v1);
734 }
735 
736 
737 //====================================================================
738 template<typename AFIELD>
740 {
741  LU_inv(v, w);
742 }
743 
744 
745 //====================================================================
746 template<typename AFIELD>
748 {
749  LUdag_inv(v, w);
750 }
751 
752 
753 //====================================================================
754 template<typename AFIELD>
756 {
757  D(m_v1, w);
758  mult_gm5R(v, m_v1);
759 }
760 
761 
762 //====================================================================
763 template<typename AFIELD>
765 {
766  mult_gm5R(m_v1, w);
767  Ddag(v, m_v1);
768 }
769 
770 
771 //====================================================================
772 template<typename AFIELD>
774 {
775 #pragma omp barrier
776 
777  real_t *vp = v.ptr(0);
778  real_t *wp = const_cast<AFIELD *>(&w)->ptr(0);
779 
780  int ith = ThreadManager::get_thread_id();
781 
782  if (ith == 0)
784  vp, wp, m_Ns, m_Nsize);
785 
786 #pragma omp barrier
787 }
788 
789 
790 //====================================================================
791 template<typename AFIELD>
793 {
794  assert(w.check_size(m_NinF, m_Nvol, 1));
795  assert(v.check_size(m_NinF, m_Nvol, 1));
796 
797 #pragma omp barrier
798 
799  real_t *vp = v.ptr(0);
800  real_t *wp = const_cast<AFIELD *>(&w)->ptr(0);
801 
802  int ith = ThreadManager::get_thread_id();
803 
804  if (ith == 0)
805  BridgeACC::mult_domainwall_5din_mult_R(vp, wp, m_Ns, m_Nsize);
806 
807 #pragma omp barrier
808 }
809 
810 
811 //====================================================================
812 template<typename AFIELD>
814 {
815 #pragma omp barrier
816 
817  int ith = ThreadManager::get_thread_id();
818  int nth = ThreadManager::get_num_threads();
819  int ith_kernel = 0;
820  if(nth > 1) ith_kernel = 1;
821 
822  real_t *vp = v.ptr(0);
823  real_t *wp = const_cast<AFIELD *>(&w)->ptr(0);
824  real_t *yp = m_w1.ptr(0); // working vector
825  real_t *up = m_U.ptr(0);
826 
827  if (ith == ith_kernel){
828 
830  vp, yp, wp, m_mq, m_M0, m_Ns,
831  &m_b[0], &m_c[0], m_alpha, m_Nsize);
832 
833  if (do_comm_any > 0) {
834 
835  real_t *buf1_xp = (real_t *)chsend_dn[0].ptr();
836  real_t *buf1_xm = (real_t *)chsend_up[0].ptr();
837  real_t *buf1_yp = (real_t *)chsend_dn[1].ptr();
838  real_t *buf1_ym = (real_t *)chsend_up[1].ptr();
839  real_t *buf1_zp = (real_t *)chsend_dn[2].ptr();
840  real_t *buf1_zm = (real_t *)chsend_up[2].ptr();
841  real_t *buf1_tp = (real_t *)chsend_dn[3].ptr();
842  real_t *buf1_tm = (real_t *)chsend_up[3].ptr();
843 
845  buf1_xp, buf1_xm, buf1_yp, buf1_ym,
846  buf1_zp, buf1_zm, buf1_tp, buf1_tm,
847  up, yp,
848  m_Ns, m_bc, m_Nsize, do_comm);
849  }
850  }
851 #pragma omp barrier
852 
853  if(do_comm_any > 0 && ith == 0){
854  chset_recv.start();
855  chset_send.start();
856  }
857 
858  if (ith == ith_kernel){
859  if(m_impl == "5d"){
861  vp, up, yp, m_Ns, m_bc2, m_Nsize, do_comm, 1);
862  }else{
863 #ifdef USE_DOMAINWALL_5DIN_4D_KERNEL
865  vp, up, yp, m_Ns, m_bc2, m_Nsize, do_comm, 1);
866 #else
867  vout.crucial(m_vl, "%s: 4D kernel not compiled\n",
868  class_name.c_str());
869  exit(EXIT_FAILURE);
870 #endif
871  }
872  }
873 
874  if(do_comm_any > 0 && ith == 0){
875  chset_recv.wait();
876  chset_send.wait();
877  }
878 
879 #pragma omp barrier
880 
881  if(do_comm_any > 0 && ith == ith_kernel){
882 
883  real_t *buf2_xp = (real_t *)chrecv_up[0].ptr();
884  real_t *buf2_xm = (real_t *)chrecv_dn[0].ptr();
885  real_t *buf2_yp = (real_t *)chrecv_up[1].ptr();
886  real_t *buf2_ym = (real_t *)chrecv_dn[1].ptr();
887  real_t *buf2_zp = (real_t *)chrecv_up[2].ptr();
888  real_t *buf2_zm = (real_t *)chrecv_dn[2].ptr();
889  real_t *buf2_tp = (real_t *)chrecv_up[3].ptr();
890  real_t *buf2_tm = (real_t *)chrecv_dn[3].ptr();
891 
893  vp, up, yp,
894  buf2_xp, buf2_xm, buf2_yp, buf2_ym,
895  buf2_zp, buf2_zm, buf2_tp, buf2_tm,
896  m_Ns, m_bc, m_Nsize, do_comm);
897  }
898 #pragma omp barrier
899 
900 }
901 
902 //====================================================================
903 template<typename AFIELD>
905 {
906 #pragma omp barrier
907 
908  int ith = ThreadManager::get_thread_id();
909  int nth = ThreadManager::get_num_threads();
910  int ith_kernel = 0;
911  if(nth > 1) ith_kernel = 1;
912 
913  real_t *vp = v.ptr(0);
914  real_t *wp = const_cast<AFIELD *>(&w)->ptr(0);
915  real_t *yp = m_w1.ptr(0);
916  real_t *up = m_U.ptr(0);
917 
918  if (ith == ith_kernel){
919 
921  vp, wp, m_Ns, m_Nsize);
922 
923  if (do_comm_any > 0) {
924 
925  real_t *buf1_xp = (real_t *)chsend_dn[0].ptr();
926  real_t *buf1_xm = (real_t *)chsend_up[0].ptr();
927  real_t *buf1_yp = (real_t *)chsend_dn[1].ptr();
928  real_t *buf1_ym = (real_t *)chsend_up[1].ptr();
929  real_t *buf1_zp = (real_t *)chsend_dn[2].ptr();
930  real_t *buf1_zm = (real_t *)chsend_up[2].ptr();
931  real_t *buf1_tp = (real_t *)chsend_dn[3].ptr();
932  real_t *buf1_tm = (real_t *)chsend_up[3].ptr();
933 
935  buf1_xp, buf1_xm, buf1_yp, buf1_ym,
936  buf1_zp, buf1_zm, buf1_tp, buf1_tm,
937  up, vp, m_Ns, m_bc, m_Nsize, do_comm);
938  }
939  }
940 #pragma omp barrier
941 
942  if(do_comm_any > 0 && ith == 0){
943  chset_recv.start();
944  chset_send.start();
945  }
946 
947  if(ith == ith_kernel){
948  if(m_impl == "5d"){
950  yp, up, vp, m_Ns, m_bc2, m_Nsize, do_comm, 0);
951  }else{
952 #ifdef USE_DOMAINWALL_5DIN_4D_KERNEL
954  yp, up, vp, m_Ns, m_bc2, m_Nsize, do_comm, 0);
955 #else
956  vout.crucial(m_vl, "%s: 4D kernel not compiled\n",
957  class_name.c_str());
958  exit(EXIT_FAILURE);
959 #endif
960  }
961  }
962 
963  if(do_comm_any > 0 && ith == 0){
964  chset_recv.wait();
965  chset_send.wait();
966  }
967 
968 #pragma omp barrier
969 
970  if (ith == ith_kernel) {
971 
972  if (do_comm_any > 0) {
973 
974  real_t *buf2_xp = (real_t *)chrecv_up[0].ptr();
975  real_t *buf2_xm = (real_t *)chrecv_dn[0].ptr();
976  real_t *buf2_yp = (real_t *)chrecv_up[1].ptr();
977  real_t *buf2_ym = (real_t *)chrecv_dn[1].ptr();
978  real_t *buf2_zp = (real_t *)chrecv_up[2].ptr();
979  real_t *buf2_zm = (real_t *)chrecv_dn[2].ptr();
980  real_t *buf2_tp = (real_t *)chrecv_up[3].ptr();
981  real_t *buf2_tm = (real_t *)chrecv_dn[3].ptr();
982 
984  yp, up, vp,
985  buf2_xp, buf2_xm, buf2_yp, buf2_ym,
986  buf2_zp, buf2_zm, buf2_tp, buf2_tm,
987  m_Ns, m_bc, m_Nsize, do_comm);
988  }
989 
991  vp, yp, wp, m_mq, m_M0, m_Ns,
992  &m_b[0], &m_c[0], m_alpha, m_Nsize);
993 
994  }
995 #pragma omp barrier
996 
997 }
998 
999 
1000 //====================================================================
1001 template<typename AFIELD>
1003 {
1004 #pragma omp barrier
1005 
1006  real_t *vp = v.ptr(0);
1007  real_t *wp = const_cast<AFIELD *>(&w)->ptr(0);
1008 
1009  int ith = ThreadManager::get_thread_id();
1010 
1011  if (ith == 0){
1013  vp, wp, m_Ns, m_Nsize,
1014  &m_e[0], &m_f[0], &m_dpinv[0], &m_dm[0], m_alpha);
1015  }
1016 
1017 #pragma omp barrier
1018 }
1019 
1020 //====================================================================
1021 template<typename AFIELD>
1023  const AFIELD& w)
1024 {
1025 #pragma omp barrier
1026 
1027  real_t *vp = v.ptr(0);
1028  real_t *wp = const_cast<AFIELD *>(&w)->ptr(0);
1029 
1030  int ith = ThreadManager::get_thread_id();
1031 
1032  if (ith == 0){
1034  vp, wp, m_Ns, m_Nsize,
1035  &m_e[0], &m_f[0], &m_dpinv[0], &m_dm[0], m_alpha);
1036  }
1037 
1038 #pragma omp barrier
1039 }
1040 
1041 //====================================================================
1042 template<typename AFIELD>
1044 {
1045  int Lvol = CommonParameters::Lvol();
1046  double vsite = static_cast<double>(Lvol);
1047  double vNs = static_cast<double>(m_Ns);
1048  int Nc = CommonParameters::Nc();
1049  int Nd = CommonParameters::Nd();
1050 
1051  double flop_Wilson;
1052  double flop_LU_inv;
1053  double axpy1 = static_cast<double>(2 * m_NinF);
1054  double scal1 = static_cast<double>(1 * m_NinF);
1055  if (m_repr == "Dirac") {
1056  flop_Wilson = static_cast<double>(
1057  Nc * Nd * (4 + 6 * (4 * Nc + 2) + 2 * (4 * Nc + 1))) * vsite;
1058  flop_LU_inv = static_cast<double>(Nc * Nd * (2 + (vNs - 1) * 26)) * vsite;
1059  } else if (m_repr == "Chiral") {
1060  flop_Wilson = static_cast<double>(
1061  Nc * Nd * (4 + 8 * (4 * Nc + 2))) * vsite;
1062  flop_LU_inv = static_cast<double>(Nc * Nd * (2 + (vNs - 1) * 10)) * vsite;
1063  }
1064 
1065  // Note that m_NinF := m_Nvcd * m_Ns;
1066  double flop_DW = vNs * flop_Wilson + vsite * (6 * axpy1 + 2 * scal1);
1067  // In Ddag case, flop_Wilson + 7 axpy which equals flop_DW.
1068 
1069  // double flop_LU_inv = 2.0 * vsite *
1070  // ((3.0*axpy1 + scal1)*(vNs-1.0) + axpy1 + 2.0*scal1);
1071 
1072  double flop = 0.0;
1073  if (mode == "Prec") {
1074  flop = flop_LU_inv;
1075  } else if ((mode == "D") || (mode == "Ddag")) {
1076  flop = flop_DW;
1077  } else if (mode == "DdagD") {
1078  flop = 2.0 * flop_DW;
1079  } else if ((mode == "D_prec") || (mode == "Ddag_prec")) {
1080  flop = flop_LU_inv + flop_DW;
1081  } else if (mode == "DdagD_prec") {
1082  flop = 2.0 * (flop_LU_inv + flop_DW);
1083  } else {
1084  vout.crucial(m_vl, "Error at %s: input mode is undefined.\n",
1085  class_name.c_str());
1086  exit(EXIT_FAILURE);
1087  }
1088 
1089  return flop;
1090 }
1091 
1092 //============================================================END=====
BridgeACC::mult_domainwall_5din_mult_gm5_dirac
void mult_domainwall_5din_mult_gm5_dirac(double *RESTRICT vp, double *RESTRICT wp, int Ns, int *Nsize)
Definition: mult_Domainwall_5din_openacc-inc.h:293
CommonParameters::Ny
static int Ny()
Definition: commonParameters.h:106
CommonParameters::Nz
static int Nz()
Definition: commonParameters.h:107
CommonParameters::Lvol
static long_t Lvol()
Definition: commonParameters.h:95
convert_gauge
void convert_gauge(INDEX &index, AFIELD &v, const Field &w)
Definition: afield-inc.h:223
Parameters::set_string
void set_string(const string &key, const string &value)
Definition: parameters.cpp:39
BridgeACC::mult_domainwall_5din_mult_R
void mult_domainwall_5din_mult_R(double *RESTRICT vp, double *RESTRICT wp, int Ns, int *Nsize)
Definition: mult_Domainwall_5din_openacc-inc.h:341
AFopr_Domainwall_5din::mult
void mult(AFIELD &v, const AFIELD &w)
multiplies fermion operator to a given field.
Definition: afopr_Domainwall_5din-tmpl.h:536
AFopr_Domainwall_5din::Precdag
void Precdag(AFIELD &, const AFIELD &)
Definition: afopr_Domainwall_5din-tmpl.h:747
BridgeACC::mult_domainwall_5din_hopb_dirac_4d
void mult_domainwall_5din_hopb_dirac_4d(double *RESTRICT vp, double *RESTRICT up, double *RESTRICT wp, int Ns, int *bc, int *Nsize, int *do_comm, int flag)
Definition: mult_Domainwall_5din_4d_openacc-inc.h:14
ThreadManager::get_num_threads
static int get_num_threads()
returns available number of threads.
Definition: threadManager.cpp:246
CommonParameters::Ndim
static int Ndim()
Definition: commonParameters.h:117
BridgeACC::afield_tidyup
void afield_tidyup(double *data, const int size)
Field::set
void set(const int jin, const int site, const int jex, double v)
Definition: field.h:175
AFopr_Domainwall_5din::get_parameters
void get_parameters(Parameters &params) const
gets parameters by a Parameter object: to be implemented in a subclass.
Definition: afopr_Domainwall_5din-tmpl.h:259
AFopr_Domainwall_5din::mult_dag
void mult_dag(AFIELD &v, const AFIELD &w)
hermitian conjugate of mult.
Definition: afopr_Domainwall_5din-tmpl.h:567
Parameters
Class for parameters.
Definition: parameters.h:46
AFopr_Domainwall_5din::H
void H(AFIELD &, const AFIELD &)
Definition: afopr_Domainwall_5din-tmpl.h:755
AIndex_lex
Definition: aindex_lex_base.h:17
BridgeACC::mult_domainwall_5din_hop1_dirac
void mult_domainwall_5din_hop1_dirac(double *RESTRICT buf1_xp, double *RESTRICT buf1_xm, double *RESTRICT buf1_yp, double *RESTRICT buf1_ym, double *RESTRICT buf1_zp, double *RESTRICT buf1_zm, double *RESTRICT buf1_tp, double *RESTRICT buf1_tm, double *RESTRICT up, double *RESTRICT wp, int Ns, int *bc, int *Nsize, int *do_comm)
Definition: mult_Domainwall_5din_openacc-inc.h:645
AFopr_Domainwall_5din::Ddag
void Ddag(AFIELD &, const AFIELD &)
Definition: afopr_Domainwall_5din-tmpl.h:904
Parameters::set_double
void set_double(const string &key, const double value)
Definition: parameters.cpp:33
AFopr_Domainwall_5din::mult_gm5R
void mult_gm5R(AFIELD &, const AFIELD &)
Definition: afopr_Domainwall_5din-tmpl.h:773
Bridge::BridgeIO::decrease_indent
void decrease_indent()
Definition: bridgeIO.cpp:518
NVCD
#define NVCD
Definition: define_params_SU3.h:20
BridgeACC::mult_domainwall_5din_mult_gm5R_dirac
void mult_domainwall_5din_mult_gm5R_dirac(double *RESTRICT vp, double *RESTRICT wp, int Ns, int *Nsize)
Definition: mult_Domainwall_5din_openacc-inc.h:385
AFopr_Domainwall_5din::set_config_omp
void set_config_omp(Field *U)
Definition: afopr_Domainwall_5din-tmpl.h:445
Bridge::BridgeIO::increase_indent
void increase_indent()
Definition: bridgeIO.cpp:508
Bridge::BridgeIO::detailed
void detailed(const char *format,...)
Definition: bridgeIO.cpp:281
AFopr_Domainwall_5din::Hdag
void Hdag(AFIELD &, const AFIELD &)
Definition: afopr_Domainwall_5din-tmpl.h:764
Field::check_size
bool check_size(const int nin, const int nvol, const int nex) const
checking size parameters. [23 May 2016 H.Matsufuru]
Definition: field.h:135
BridgeACC::mult_domainwall_5din_5dir_dirac
void mult_domainwall_5din_5dir_dirac(double *RESTRICT vp, double *RESTRICT yp, double *RESTRICT wp, double mq, double M0, int Ns, double *b, double *c, double alpha, int *Nsize)
Definition: mult_Domainwall_5din_openacc-inc.h:14
CommonParameters::Nvol
static int Nvol()
Definition: commonParameters.h:109
BridgeACC::mult_domainwall_5din_LUinv_dirac
void mult_domainwall_5din_LUinv_dirac(double *RESTRICT vp, double *RESTRICT wp, int Ns, int *Nsize, double *e, double *f, double *dpinv, double *dm, double alpha)
Definition: mult_Domainwall_5din_LUinv_openacc-inc.h:14
BridgeACC::mult_domainwall_5din_hopb_dirac_5d
void mult_domainwall_5din_hopb_dirac_5d(double *RESTRICT vp, double *RESTRICT up, double *RESTRICT wp, int Ns, int *bc, int *Nsize, int *do_comm, int flag)
Definition: mult_Domainwall_5din_openacc-inc.h:436
AFopr_Domainwall_5din::D
void D(AFIELD &, const AFIELD &)
Definition: afopr_Domainwall_5din-tmpl.h:813
AFopr_Domainwall_5din::setup_channels
void setup_channels()
Definition: afopr_Domainwall_5din-tmpl.h:146
AFopr_Domainwall_5din::D_prec
void D_prec(AFIELD &, const AFIELD &)
Definition: afopr_Domainwall_5din-tmpl.h:721
AFopr_Domainwall_5din::convert
void convert(AFIELD &, const Field &)
convert Field to AField for this class.
Definition: afopr_Domainwall_5din-tmpl.h:471
AFopr_Domainwall_5din::Ddag_prec
void Ddag_prec(AFIELD &, const AFIELD &)
Definition: afopr_Domainwall_5din-tmpl.h:730
CommonParameters::Nx
static int Nx()
Definition: commonParameters.h:105
AFopr_Domainwall_5din
Domain-wall fermion operator.
Definition: afopr_Domainwall_5din.h:42
BridgeACC::mult_domainwall_5din_5dirdag_dirac
void mult_domainwall_5din_5dirdag_dirac(double *RESTRICT vp, double *RESTRICT yp, double *RESTRICT wp, double mq, double M0, int Ns, double *b, double *c, double alpha, int *Nsize)
Definition: mult_Domainwall_5din_openacc-inc.h:140
AFopr_Domainwall_5din::set_precond_parameters
void set_precond_parameters()
set parameters for preconditioning.
Definition: afopr_Domainwall_5din-tmpl.h:385
CommonParameters::Nc
static int Nc()
Definition: commonParameters.h:115
CommonParameters::Nt
static int Nt()
Definition: commonParameters.h:108
AFopr_Domainwall_5din::set_coefficients
void set_coefficients(const std::vector< real_t > b, const std::vector< real_t > c)
set coefficients if they depend in s.
Definition: afopr_Domainwall_5din-tmpl.h:357
Parameters::fetch_int_vector
int fetch_int_vector(const string &key, vector< int > &value) const
Definition: parameters.cpp:429
AFopr_Domainwall_5din::mult_gm5
void mult_gm5(AFIELD &, const AFIELD &)
multiplies gamma_5 matrix.
Definition: afopr_Domainwall_5din-tmpl.h:665
Communicator::npe
static int npe(const int dir)
logical grid extent
Definition: communicator.cpp:112
AFopr_Domainwall_5din::Prec
void Prec(AFIELD &, const AFIELD &)
Definition: afopr_Domainwall_5din-tmpl.h:739
threadManager.h
AFopr_Domainwall_5din::mult_R
void mult_R(AFIELD &, const AFIELD &)
Definition: afopr_Domainwall_5din-tmpl.h:792
AFopr_Domainwall_5din::real_t
AFIELD::real_t real_t
Definition: afopr_Domainwall_5din.h:45
Parameters::set_int_vector
void set_int_vector(const string &key, const vector< int > &value)
Definition: parameters.cpp:45
AFopr_Domainwall_5din::DdagD
void DdagD(AFIELD &, const AFIELD &)
Definition: afopr_Domainwall_5din-tmpl.h:683
AFopr_Domainwall_5din::DdagD_prec
void DdagD_prec(AFIELD &, const AFIELD &)
Definition: afopr_Domainwall_5din-tmpl.h:707
real_t
double real_t
Definition: bridgeACC_AField_double.cpp:14
BridgeACC::mult_domainwall_5din_LUdaginv_dirac
void mult_domainwall_5din_LUdaginv_dirac(double *RESTRICT vp, double *RESTRICT wp, int Ns, int *Nsize, double *e, double *f, double *dpinv, double *dm, double alpha)
Definition: mult_Domainwall_5din_LUinv_openacc-inc.h:204
Field::cmp
double cmp(const int jin, const int site, const int jex) const
Definition: field.h:143
AFopr_Domainwall_5din::reverse
void reverse(Field &, const AFIELD &)
reverse AField to Field.
Definition: afopr_Domainwall_5din-tmpl.h:496
Field::ptr
const double * ptr(const int jin, const int site, const int jex) const
Definition: field.h:153
AFopr_Domainwall_5din::tidyup
void tidyup()
final tidyup.
Definition: afopr_Domainwall_5din-tmpl.h:117
CommonParameters::Nd
static int Nd()
Definition: commonParameters.h:116
CommonParameters::Vlevel
static Bridge::VerboseLevel Vlevel()
Definition: commonParameters.h:122
Bridge::BridgeIO::set_verbose_level
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:195
AFopr_Domainwall_5din::set_mode
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
Definition: afopr_Domainwall_5din-tmpl.h:523
BridgeACC::mult_domainwall_5din_hop2_dirac
void mult_domainwall_5din_hop2_dirac(double *RESTRICT vp, double *RESTRICT up, double *RESTRICT wp, double *RESTRICT buf2_xp, double *RESTRICT buf2_xm, double *RESTRICT buf2_yp, double *RESTRICT buf2_ym, double *RESTRICT buf2_zp, double *RESTRICT buf2_zm, double *RESTRICT buf2_tp, double *RESTRICT buf2_tm, int Ns, int *bc, int *Nsize, int *do_comm)
Definition: mult_Domainwall_5din_openacc-inc.h:891
Parameters::set_int
void set_int(const string &key, const int value)
Definition: parameters.cpp:36
AFopr_Domainwall_5din::LU_inv
void LU_inv(AFIELD &, const AFIELD &)
Definition: afopr_Domainwall_5din-tmpl.h:1002
Communicator::ipe
static int ipe(const int dir)
logical coordinate of current proc.
Definition: communicator.cpp:105
Parameters::fetch_string
int fetch_string(const string &key, string &value) const
Definition: parameters.cpp:378
Parameters::fetch_double
int fetch_double(const string &key, double &value) const
Definition: parameters.cpp:327
AFopr_Domainwall_5din::flop_count
double flop_count()
this returns the number of floating point number operations.
Definition: afopr_Domainwall_5din.h:174
afopr_common_th-inc.h
afopr_Domainwall_5din.h
AFopr_Domainwall_5din::LUdag_inv
void LUdag_inv(AFIELD &, const AFIELD &)
Definition: afopr_Domainwall_5din-tmpl.h:1022
commonParameters.h
AFopr_Domainwall_5din::init
void init(const Parameters &params)
initial setup.
Definition: afopr_Domainwall_5din-tmpl.h:29
Bridge::BridgeIO::crucial
void crucial(const char *format,...)
Definition: bridgeIO.cpp:242
AFopr_Domainwall_5din::set_parameters
void set_parameters(const Parameters &params)
sets parameters by a Parameter object: to be implemented in a subclass.
Definition: afopr_Domainwall_5din-tmpl.h:198
AFopr_Domainwall_5din::set_config_impl
void set_config_impl(Field *U)
Definition: afopr_Domainwall_5din-tmpl.h:458
Field
Container of Field-type object.
Definition: field.h:46
communicator.h
ThreadManager::get_thread_id
static int get_thread_id()
returns thread id.
Definition: threadManager.cpp:253
AFopr_Domainwall_5din::DDdag
void DDdag(AFIELD &, const AFIELD &)
Definition: afopr_Domainwall_5din-tmpl.h:695
Parameters::fetch_int
int fetch_int(const string &key, int &value) const
Definition: parameters.cpp:346
Bridge::BridgeIO::general
void general(const char *format,...)
Definition: bridgeIO.cpp:262
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:572
Bridge::BridgeIO::get_verbose_level
static std::string get_verbose_level(const VerboseLevel vl)
Definition: bridgeIO.cpp:216
BridgeACC::afield_init
void afield_init(double *data, const int size)
AFopr_Domainwall_5din::set_config
void set_config(Field *U)
sets the gauge configuration.
Definition: afopr_Domainwall_5din-tmpl.h:426