Bridge++  Ver.2.1.3
fopr_Staggered.cpp
Go to the documentation of this file.
1 
11 #include "lib/Field/index_lex.h"
13 
14 #if defined USE_GROUP_SU3
16 #elif defined USE_GROUP_SU2
18 #elif defined USE_GROUP_SU_N
20 #endif
21 
22 
23 #ifdef USE_FACTORY_AUTOREGISTER
24 namespace {
25  bool init = Fopr_Staggered::register_factory();
26 }
27 #endif
28 
29 const std::string Fopr_Staggered::class_name = "Fopr_Staggered";
30 
31 //====================================================================
32 void Fopr_Staggered::init(const Parameters& params)
33 {
35 
37  vout.general(m_vl, "%s: construction\n", class_name.c_str());
39 
40  setup();
41 
42  set_parameters(params);
43 
45  vout.general(m_vl, "%s: construction finished.\n",
46  class_name.c_str());
47 }
48 
49 
50 //====================================================================
52 {
54 
56  vout.general(m_vl, "%s: construction (obsolete)\n",
57  class_name.c_str());
58 
59  setup();
60 
61  vout.general(m_vl, "%s: construction finished.\n",
62  class_name.c_str());
63 }
64 
65 
66 //====================================================================
68 {
70  m_Nvc = 2 * m_Nc;
71  m_Ndf = 2 * m_Nc * m_Nc;
74 
79 
80  m_boundary.resize(m_Ndim);
81 
85 
87 
88  m_v1.reset(m_Nvc, m_Nvol, 1);
89  m_v2.reset(m_Nvc, m_Nvol, 1);
90 
91  int Nvx = m_Nvc * m_Ny * m_Nz * m_Nt;
92  vcp1_xp = new double[Nvx];
93  vcp2_xp = new double[Nvx];
94  vcp1_xm = new double[Nvx];
95  vcp2_xm = new double[Nvx];
96 
97  int Nvy = m_Nvc * m_Nx * m_Nz * m_Nt;
98  vcp1_yp = new double[Nvy];
99  vcp2_yp = new double[Nvy];
100  vcp1_ym = new double[Nvy];
101  vcp2_ym = new double[Nvy];
102 
103  int Nvz = m_Nvc * m_Nx * m_Ny * m_Nt;
104  vcp1_zp = new double[Nvz];
105  vcp2_zp = new double[Nvz];
106  vcp1_zm = new double[Nvz];
107  vcp2_zm = new double[Nvz];
108 
109  int Nvt = m_Nvc * m_Nx * m_Ny * m_Nz;
110  vcp1_tp = new double[Nvt];
111  vcp2_tp = new double[Nvt];
112  vcp1_tm = new double[Nvt];
113  vcp2_tm = new double[Nvt];
114 }
115 
116 
117 //====================================================================
119 {
120  delete[] vcp1_xp;
121  delete[] vcp2_xp;
122  delete[] vcp1_xm;
123  delete[] vcp2_xm;
124 
125  delete[] vcp1_yp;
126  delete[] vcp2_yp;
127  delete[] vcp1_ym;
128  delete[] vcp2_ym;
129 
130  delete[] vcp1_zp;
131  delete[] vcp2_zp;
132  delete[] vcp1_zm;
133  delete[] vcp2_zm;
134 
135  delete[] vcp1_tp;
136  delete[] vcp2_tp;
137  delete[] vcp1_tm;
138  delete[] vcp2_tm;
139 }
140 
141 
142 //====================================================================
144 {
145 #pragma omp barrier
146  int ith = ThreadManager::get_thread_id();
147  string vlevel;
148  if (!params.fetch_string("verbose_level", vlevel)) {
149  if (ith == 0) m_vl = vout.set_verbose_level(vlevel);
150  }
151 #pragma omp barrier
152 
153  double mq;
154  std::vector<int> bc;
155 
156  int err = 0;
157  err += params.fetch_double("quark_mass", mq);
158  err += params.fetch_int_vector("boundary_condition", bc);
159 
160  if (err) {
161  vout.crucial(m_vl, "%s: fetch error, input parameter not found.\n",
162  class_name.c_str());
163  abort();
164  }
165 
166  set_parameters(mq, bc);
167 }
168 
169 
170 //====================================================================
171 void Fopr_Staggered::set_parameters(const double mq,
172  const std::vector<int> bc)
173 {
174  assert(bc.size() == m_Ndim);
175 
176  int err = 0;
177  // currently no error check is needed
178  if (err) {
179  vout.crucial(m_vl, "%s: parameter range check failed.\n",
180  class_name.c_str());
181  exit(EXIT_FAILURE);
182  }
183 
184 #pragma omp barrier
185  int ith = ThreadManager::get_thread_id();
186  if (ith == 0) {
187  m_mq = mq;
188  for (int mu = 0; mu < m_Ndim; ++mu) {
189  m_boundary[mu] = bc[mu];
190  }
191  }
192 #pragma omp barrier
193 
194  vout.general(m_vl, "%s: input parameters\n", class_name.c_str());
195  vout.general(m_vl, " mq = %8.4f\n", m_mq);
196  for (int mu = 0; mu < m_Ndim; ++mu) {
197  vout.general(m_vl, " boundary[%d] = %2d\n", mu, m_boundary[mu]);
198  }
199 }
200 
201 
202 //====================================================================
204 {
205  params.set_double("quark_mass", m_mq);
206  params.set_int_vector("boundary_condition", m_boundary);
207  params.set_string("verbose_level", vout.get_verbose_level(m_vl));
208 }
209 
210 
211 //====================================================================
213 {
214  int Nt = CommonParameters::Nt();
215  int Nz = CommonParameters::Nz();
216  int Ny = CommonParameters::Ny();
217  int Nx = CommonParameters::Nx();
218  int Nvol = CommonParameters::Nvol();
219 
220  Index_lex idx_lex;
221 
222  int ipex = Communicator::ipe(0);
223  int ipey = Communicator::ipe(1);
224  int ipez = Communicator::ipe(2);
225  int ipet = Communicator::ipe(3);
226 
227  for (int t = 0; t < Nt; ++t) {
228  int t2 = t + ipet * Nt;
229  for (int z = 0; z < Nz; ++z) {
230  int z2 = z + ipez * Nz;
231  for (int y = 0; y < Ny; ++y) {
232  int y2 = y + ipey * Ny;
233  for (int x = 0; x < Nx; ++x) {
234  int x2 = x + ipex * Nx;
235  int is = idx_lex.site(x, y, z, t);
236 
237  m_stg_phase.set(0, is, 0, 1.0);
238  m_stg_phase.set(0, is, 1, 1.0);
239  m_stg_phase.set(0, is, 2, 1.0);
240  m_stg_phase.set(0, is, 3, 1.0);
241 
242  m_parity.set(0, is, 0, 1.0);
243 
244  if (((x2 + y2 + z2 + t2) % 2) == 1) {
245  m_parity.set(0, is, 0, -1.0);
246  }
247 
248  if ((x2 % 2) == 1) {
249  m_stg_phase.set(0, is, 1, -1.0);
250  }
251  if (((x2 + y2) % 2) == 1) {
252  m_stg_phase.set(0, is, 2, -1.0);
253  }
254  if (((x2 + y2 + z2) % 2) == 1) {
255  m_stg_phase.set(0, is, 3, -1.0);
256  }
257 
258  /*
259  // Fortran style
260  if (( x2 + 1) % 2 == 1){
261  m_stg_phase.set(0, is, 1, -1.0);
262  }
263  if (((x2 + y2 + 2) % 2) == 1){
264  m_stg_phase.set(0, is, 2, -1.0);
265  }
266  if (((x2 + y2 + z2 + 3) % 2) == 1){
267  m_stg_phase.set(0, is, 3, -1.0);
268  }
269  */
270  }
271  }
272  }
273  }
274 }
275 
276 
277 //====================================================================
279 {
280 #pragma omp barrier
281 
282  int Nin = v.nin();
283  int Nex = v.nex();
284 
285  assert(v.nvol() == m_Nvol);
286 
287  int ith, nth, is, ns;
288  set_threadtask(ith, nth, is, ns, m_Nvol);
289 
290  for (int ex = 0; ex < Nex; ++ex) {
291  for (int site = is; site < ns; ++site) {
292  for (int in = 0; in < Nin; ++in) {
293  double vt = m_stg_phase.cmp(0, site, mu) * v.cmp(in, site, ex);
294  v.set(in, site, ex, vt);
295  }
296  }
297  }
298 #pragma omp barrier
299 
300 }
301 
302 
303 //====================================================================
305 {
306  int nth = ThreadManager::get_num_threads();
307 
308  vout.detailed(m_vl, "%s: set_config is called: num_threads = %d\n",
309  class_name.c_str(), nth);
310 
311  if (nth > 1) {
312  set_config_impl(U);
313  } else {
314  set_config_omp(U);
315  }
316 
317  vout.detailed(m_vl, "%s: set_config finished\n", class_name.c_str());
318 }
319 
320 
321 //====================================================================
323 {
324 #pragma omp parallel
325  {
326  set_config_impl(U);
327  }
328 }
329 
330 
331 //====================================================================
333 {
334  int ith, nth, is, ns;
335  set_threadtask(ith, nth, is, ns, m_Nvol);
336 
337 #pragma omp barrier
338 
339  for (int mu = 0; mu < m_Ndim; ++mu) {
340  for (int site = is; site < ns; ++site) {
341  double ph = m_stg_phase.cmp(0, site, mu);
342  for (int cc = 0; cc < m_Ndf; ++cc) {
343  double ut = ph * U->cmp(cc, site, mu);
344  m_U.set(cc, site, mu, ut);
345  }
346  }
347  }
348 #pragma omp barrier
349 }
350 
351 
352 //====================================================================
353 void Fopr_Staggered::set_mode(std::string mode)
354 {
355 #pragma omp barrier
356  int ith = ThreadManager::get_thread_id();
357  if (ith == 0) m_mode = mode;
358 #pragma omp barrier
359 }
360 
361 
362 //====================================================================
363 void Fopr_Staggered::mult(Field& v, const Field& w)
364 {
365  if (m_mode == "D") {
366  D(v, w);
367  } else if (m_mode == "Ddag") {
368  Ddag(v, w);
369  } else if (m_mode == "DdagD") {
370  DdagD(v, w);
371  } else if (m_mode == "H") {
372  H(v, w);
373  } else {
374  vout.crucial(m_vl, "%s: mode undeifined.\n", class_name.c_str());
375  exit(EXIT_FAILURE);
376  }
377 }
378 
379 
380 //====================================================================
382 {
383  if (m_mode == "D") {
384  Ddag(v, w);
385  } else if (m_mode == "Ddag") {
386  D(v, w);
387  } else if (m_mode == "DdagD") {
388  DdagD(v, w);
389  } else if (m_mode == "H") {
390  H(v, w);
391  } else {
392  vout.crucial(m_vl, "%s: mode undeifined.\n", class_name.c_str());
393  exit(EXIT_FAILURE);
394  }
395 }
396 
397 
398 //====================================================================
399 void Fopr_Staggered::H(Field& v, const Field& w)
400 {
401  D(v, w);
402  mult_gm5(v);
403 }
404 
405 
406 //====================================================================
408 {
409  // H(m_v1, w);
410  // H(v, m_v1);
411  D(m_v1, w);
412  Ddag(v, m_v1);
413 }
414 
415 
416 //====================================================================
417 void Fopr_Staggered::D(Field& v, const Field& w)
418 {
419  assert(w.check_size(m_Nvc, m_Nvol, 1));
420  assert(v.check_size(m_Nvc, m_Nvol, 1));
421 
422 #pragma omp barrier
423 
424  m_v2.set(0.0);
425 #pragma omp barrier
426 
427  mult_xp(m_v2, w);
428  mult_xm(m_v2, w);
429 
430  mult_yp(m_v2, w);
431  mult_ym(m_v2, w);
432 
433  mult_zp(m_v2, w);
434  mult_zm(m_v2, w);
435 
436  mult_tp(m_v2, w);
437  mult_tm(m_v2, w);
438 
439  // hopping normalization
440  // copy(v, m_v2);
441  // aypx(0.5/m_mq, v, w);
442 
443  // mass normalization
444  copy(v, m_v2);
445  scal(v, 0.5);
446  axpy(v, m_mq, w);
447 #pragma omp barrier
448 }
449 
450 
451 //====================================================================
452 void Fopr_Staggered::Ddag(Field& v, const Field& w)
453 {
454  assert(w.check_size(m_Nvc, m_Nvol, 1));
455  assert(v.check_size(m_Nvc, m_Nvol, 1));
456 
457 #pragma omp barrier
458 
459  m_v2.set(0.0);
460 #pragma omp barrier
461 
462  mult_xp(m_v2, w);
463  mult_xm(m_v2, w);
464 
465  mult_yp(m_v2, w);
466  mult_ym(m_v2, w);
467 
468  mult_zp(m_v2, w);
469  mult_zm(m_v2, w);
470 
471  mult_tp(m_v2, w);
472  mult_tm(m_v2, w);
473 
474  // hopping normalization
475  // copy(v, m_v2);
476  // aypx(-0.5/m_mq, v, w);
477 
478  // mass normalization
479  copy(v, m_v2);
480  scal(v, -0.5);
481  axpy(v, m_mq, w);
482 #pragma omp barrier
483 }
484 
485 
486 //====================================================================
488 {
489  int Nin = w.nin();
490  int Nvol = w.nvol();
491  int Nex = w.nex();
492  assert(Nvol == m_Nvol);
493  assert(v.check_size(Nin, Nvol, Nex));
494 
495  int ith, nth, is, ns;
496  set_threadtask(ith, nth, is, ns, m_Nvol);
497 
498 #pragma omp barrier
499 
500  for (int ex = 0; ex < Nex; ++ex) {
501  for (int site = is; site < ns; ++site) {
502  double ph = m_parity.cmp(0, site, 0);
503  for (int in = 0; in < Nin; ++in) {
504  double vt = ph * w.cmp(in, site, ex);
505  v.set(in, site, ex, vt);
506  }
507  }
508  }
509 
510 #pragma omp barrier
511 }
512 
513 
514 //====================================================================
516 {
517  int Nin = v.nin();
518  int Nvol = v.nvol();
519  int Nex = v.nex();
520  assert(Nvol == m_Nvol);
521 
522  int ith, nth, is, ns;
523  set_threadtask(ith, nth, is, ns, m_Nvol);
524 
525 #pragma omp barrier
526 
527  for (int ex = 0; ex < Nex; ++ex) {
528  for (int site = is; site < ns; ++site) {
529  double ph = m_parity.cmp(0, site, 0);
530  for (int in = 0; in < Nin; ++in) {
531  double vt = ph * v.cmp(in, site, ex);
532  v.set(in, site, ex, vt);
533  }
534  }
535  }
536 
537 #pragma omp barrier
538 }
539 
540 
541 //====================================================================
543 {
544  int idir = 0;
545 
546  double bc2 = 1.0;
547  if (Communicator::ipe(idir) == 0) bc2 = double(m_boundary[idir]);
548 
549  double *vp = v.ptr(0);
550  const double *wp = w.ptr(0);
551  const double *up = m_U.ptr(m_Ndf * m_Nvol * idir);
552 
553  int ith, nth, is, ns;
554  set_threadtask(ith, nth, is, ns, m_Nvol);
555 
556 #pragma omp barrier
557 
558  for (int site = is; site < ns; ++site) {
559  int ix = site % m_Nx;
560  int iyzt = site / m_Nx;
561  if (ix == 0) {
562  for (int ivc = 0; ivc < m_Nvc; ++ivc) {
563  vcp1_xp[ivc + m_Nvc * iyzt] = bc2 * wp[ivc + m_Nvc * site];
564  }
565  }
566  }
567 
568 #pragma omp barrier
569 #pragma omp master
570  {
571  int Nv = m_Nvc * m_Ny * m_Nz * m_Nt;
572  Communicator::exchange(Nv, vcp2_xp, vcp1_xp, 0, 1, 1);
573  }
574 #pragma omp barrier
575 
576  for (int site = is; site < ns; ++site) {
577  int ix = site % m_Nx;
578  int iyzt = site / m_Nx;
579  int nei = ix + 1 + m_Nx * iyzt;
580 
581  if (ix < m_Nx - 1) {
582  for (int ic = 0; ic < m_Nc; ++ic) {
583  int ic2 = ic * m_Nvc;
584  double wtr, wti;
585  wtr = mult_uv_r(&up[ic2 + m_Ndf * site], &wp[m_Nvc * nei], m_Nc);
586  wti = mult_uv_i(&up[ic2 + m_Ndf * site], &wp[m_Nvc * nei], m_Nc);
587  vp[2 * ic + m_Nvc * site] += wtr;
588  vp[2 * ic + 1 + m_Nvc * site] += wti;
589  }
590  } else {
591  for (int ic = 0; ic < m_Nc; ++ic) {
592  int ic2 = ic * m_Nvc;
593  double wtr, wti;
594  wtr = mult_uv_r(&up[ic2 + m_Ndf * site], &vcp2_xp[m_Nvc * iyzt], m_Nc);
595  wti = mult_uv_i(&up[ic2 + m_Ndf * site], &vcp2_xp[m_Nvc * iyzt], m_Nc);
596  vp[2 * ic + m_Nvc * site] += wtr;
597  vp[2 * ic + 1 + m_Nvc * site] += wti;
598  }
599  }
600  }
601 
602 #pragma omp barrier
603 }
604 
605 
606 //====================================================================
608 {
609  int idir = 0;
610 
611  double bc2 = 1.0;
612  if (Communicator::ipe(idir) == 0) bc2 = double(m_boundary[idir]);
613 
614  double *vp = v.ptr(0);
615  const double *wp = w.ptr(0);
616  const double *up = m_U.ptr(m_Ndf * m_Nvol * idir);
617 
618  int ith, nth, is, ns;
619  set_threadtask(ith, nth, is, ns, m_Nvol);
620 
621 #pragma omp barrier
622 
623  for (int site = is; site < ns; ++site) {
624  int ix = site % m_Nx;
625  int iyzt = site / m_Nx;
626  if (ix == m_Nx - 1) {
627  for (int ic = 0; ic < m_Nc; ++ic) {
628  int ic2 = 2 * ic;
629  double wtr, wti;
630  wtr = mult_udagv_r(&up[ic2 + m_Ndf * site], &wp[m_Nvc * site], m_Nc);
631  wti = mult_udagv_i(&up[ic2 + m_Ndf * site], &wp[m_Nvc * site], m_Nc);
632  vcp1_xm[2 * ic + m_Nvc * iyzt] = wtr;
633  vcp1_xm[2 * ic + 1 + m_Nvc * iyzt] = wti;
634  }
635  }
636  }
637 
638 #pragma omp barrier
639 #pragma omp master
640  {
641  int Nv = m_Nvc * m_Ny * m_Nz * m_Nt;
642  Communicator::exchange(Nv, vcp2_xm, vcp1_xm, 0, -1, 2);
643  }
644 #pragma omp barrier
645 
646  for (int site = is; site < ns; ++site) {
647  int ix = site % m_Nx;
648  int iyzt = site / m_Nx;
649  int nei = ix - 1 + m_Nx * iyzt;
650 
651  if (ix > 0) {
652  for (int ic = 0; ic < m_Nc; ++ic) {
653  int ic2 = 2 * ic;
654  double wtr, wti;
655  wtr = mult_udagv_r(&up[ic2 + m_Ndf * nei], &wp[m_Nvc * nei], m_Nc);
656  wti = mult_udagv_i(&up[ic2 + m_Ndf * nei], &wp[m_Nvc * nei], m_Nc);
657  vp[2 * ic + m_Nvc * site] -= wtr;
658  vp[2 * ic + 1 + m_Nvc * site] -= wti;
659  }
660  } else {
661  for (int ivc = 0; ivc < m_Nvc; ++ivc) {
662  vp[ivc + m_Nvc * site] -= bc2 * vcp2_xm[ivc + m_Nvc * iyzt];
663  }
664  }
665  }
666 
667 #pragma omp barrier
668 }
669 
670 
671 //====================================================================
673 {
674  int idir = 1;
675 
676  double bc2 = 1.0;
677  if (Communicator::ipe(idir) == 0) bc2 = double(m_boundary[idir]);
678 
679  double *vp = v.ptr(0);
680  const double *wp = w.ptr(0);
681  const double *up = m_U.ptr(m_Ndf * m_Nvol * idir);
682 
683  int ith, nth, is, ns;
684  set_threadtask(ith, nth, is, ns, m_Nvol);
685 
686 #pragma omp barrier
687 
688  for (int site = is; site < ns; ++site) {
689  int ix = site % m_Nx;
690  int iyzt = site / m_Nx;
691  int iy = iyzt % m_Ny;
692  int izt = iyzt / m_Ny;
693  int ixzt = ix + m_Nx * izt;
694  if (iy == 0) {
695  for (int ivc = 0; ivc < m_Nvc; ++ivc) {
696  vcp1_yp[ivc + m_Nvc * ixzt] = bc2 * wp[ivc + m_Nvc * site];
697  }
698  }
699  }
700 
701 #pragma omp barrier
702 #pragma omp master
703  {
704  int Nv = m_Nvc * m_Nx * m_Nz * m_Nt;
705  Communicator::exchange(Nv, vcp2_yp, vcp1_yp, 1, 1, 3);
706  }
707 #pragma omp barrier
708 
709  for (int site = is; site < ns; ++site) {
710  int ix = site % m_Nx;
711  int iyzt = site / m_Nx;
712  int iy = iyzt % m_Ny;
713  int izt = iyzt / m_Ny;
714  int ixzt = ix + m_Nx * izt;
715  int nei = ix + m_Nx * (iy + 1 + m_Ny * izt);
716 
717  if (iy < m_Ny - 1) {
718  for (int ic = 0; ic < m_Nc; ++ic) {
719  int ic2 = ic * m_Nvc;
720  double wtr, wti;
721  wtr = mult_uv_r(&up[ic2 + m_Ndf * site], &wp[m_Nvc * nei], m_Nc);
722  wti = mult_uv_i(&up[ic2 + m_Ndf * site], &wp[m_Nvc * nei], m_Nc);
723  vp[2 * ic + m_Nvc * site] += wtr;
724  vp[2 * ic + 1 + m_Nvc * site] += wti;
725  }
726  } else {
727  for (int ic = 0; ic < m_Nc; ++ic) {
728  int ic2 = ic * m_Nvc;
729  double wtr, wti;
730  wtr = mult_uv_r(&up[ic2 + m_Ndf * site], &vcp2_yp[m_Nvc * ixzt], m_Nc);
731  wti = mult_uv_i(&up[ic2 + m_Ndf * site], &vcp2_yp[m_Nvc * ixzt], m_Nc);
732  vp[2 * ic + m_Nvc * site] += wtr;
733  vp[2 * ic + 1 + m_Nvc * site] += wti;
734  }
735  }
736  }
737 
738 #pragma omp barrier
739 }
740 
741 
742 //====================================================================
744 {
745  int idir = 1;
746 
747  double bc2 = 1.0;
748  if (Communicator::ipe(idir) == 0) bc2 = double(m_boundary[idir]);
749 
750  double *vp = v.ptr(0);
751  const double *wp = w.ptr(0);
752  const double *up = m_U.ptr(m_Ndf * m_Nvol * idir);
753 
754  int ith, nth, is, ns;
755  set_threadtask(ith, nth, is, ns, m_Nvol);
756 
757 #pragma omp barrier
758 
759  for (int site = is; site < ns; ++site) {
760  int ix = site % m_Nx;
761  int iyzt = site / m_Nx;
762  int iy = iyzt % m_Ny;
763  int izt = iyzt / m_Ny;
764  int ixzt = ix + m_Nx * izt;
765  if (iy == m_Ny - 1) {
766  for (int ic = 0; ic < m_Nc; ++ic) {
767  int ic2 = 2 * ic;
768  double wtr, wti;
769  wtr = mult_udagv_r(&up[ic2 + m_Ndf * site], &wp[m_Nvc * site], m_Nc);
770  wti = mult_udagv_i(&up[ic2 + m_Ndf * site], &wp[m_Nvc * site], m_Nc);
771  vcp1_ym[2 * ic + m_Nvc * ixzt] = wtr;
772  vcp1_ym[2 * ic + 1 + m_Nvc * ixzt] = wti;
773  }
774  }
775  }
776 
777 #pragma omp barrier
778 #pragma omp master
779  {
780  int Nv = m_Nvc * m_Nx * m_Nz * m_Nt;
781  Communicator::exchange(Nv, vcp2_ym, vcp1_ym, 1, -1, 4);
782  }
783 #pragma omp barrier
784 
785  for (int site = is; site < ns; ++site) {
786  int ix = site % m_Nx;
787  int iyzt = site / m_Nx;
788  int iy = iyzt % m_Ny;
789  int izt = iyzt / m_Ny;
790  int ixzt = ix + m_Nx * izt;
791  int nei = ix + m_Nx * (iy - 1 + m_Ny * izt);
792 
793  if (iy > 0) {
794  for (int ic = 0; ic < m_Nc; ++ic) {
795  int ic2 = 2 * ic;
796  double wtr, wti;
797  wtr = mult_udagv_r(&up[ic2 + m_Ndf * nei], &wp[m_Nvc * nei], m_Nc);
798  wti = mult_udagv_i(&up[ic2 + m_Ndf * nei], &wp[m_Nvc * nei], m_Nc);
799  vp[2 * ic + m_Nvc * site] -= wtr;
800  vp[2 * ic + 1 + m_Nvc * site] -= wti;
801  }
802  } else {
803  for (int ivc = 0; ivc < m_Nvc; ++ivc) {
804  vp[ivc + m_Nvc * site] -= bc2 * vcp2_ym[ivc + m_Nvc * ixzt];
805  }
806  }
807  }
808 
809 #pragma omp barrier
810 }
811 
812 
813 //====================================================================
815 {
816  int idir = 2;
817 
818  double bc2 = 1.0;
819  if (Communicator::ipe(idir) == 0) bc2 = double(m_boundary[idir]);
820 
821  double *vp = v.ptr(0);
822  const double *wp = w.ptr(0);
823  const double *up = m_U.ptr(m_Ndf * m_Nvol * idir);
824 
825  int ith, nth, is, ns;
826  set_threadtask(ith, nth, is, ns, m_Nvol);
827 
828  int Nxy = m_Nx * m_Ny;
829 
830 #pragma omp barrier
831 
832  for (int site = is; site < ns; ++site) {
833  int ixy = site % Nxy;
834  int izt = site / Nxy;
835  int iz = izt % m_Nz;
836  int it = izt / m_Nz;
837  int ixyt = ixy + Nxy * it;
838  if (iz == 0) {
839  for (int ivc = 0; ivc < m_Nvc; ++ivc) {
840  vcp1_zp[ivc + m_Nvc * ixyt] = bc2 * wp[ivc + m_Nvc * site];
841  }
842  }
843  }
844 
845 #pragma omp barrier
846 #pragma omp master
847  {
848  int Nv = m_Nvc * m_Nx * m_Ny * m_Nt;
849  Communicator::exchange(Nv, vcp2_zp, vcp1_zp, 2, 1, 5);
850  }
851 #pragma omp barrier
852 
853  for (int site = is; site < ns; ++site) {
854  int ixy = site % Nxy;
855  int izt = site / Nxy;
856  int iz = izt % m_Nz;
857  int it = izt / m_Nz;
858  int ixyt = ixy + Nxy * it;
859  int nei = ixy + Nxy * (iz + 1 + m_Nz * it);
860 
861  if (iz < m_Nz - 1) {
862  for (int ic = 0; ic < m_Nc; ++ic) {
863  int ic2 = ic * m_Nvc;
864  double wtr, wti;
865  wtr = mult_uv_r(&up[ic2 + m_Ndf * site], &wp[m_Nvc * nei], m_Nc);
866  wti = mult_uv_i(&up[ic2 + m_Ndf * site], &wp[m_Nvc * nei], m_Nc);
867  vp[2 * ic + m_Nvc * site] += wtr;
868  vp[2 * ic + 1 + m_Nvc * site] += wti;
869  }
870  } else {
871  for (int ic = 0; ic < m_Nc; ++ic) {
872  int ic2 = ic * m_Nvc;
873  double wtr, wti;
874  wtr = mult_uv_r(&up[ic2 + m_Ndf * site], &vcp2_zp[m_Nvc * ixyt], m_Nc);
875  wti = mult_uv_i(&up[ic2 + m_Ndf * site], &vcp2_zp[m_Nvc * ixyt], m_Nc);
876  vp[2 * ic + m_Nvc * site] += wtr;
877  vp[2 * ic + 1 + m_Nvc * site] += wti;
878  }
879  }
880  }
881 
882 #pragma omp barrier
883 }
884 
885 
886 //====================================================================
888 {
889  int idir = 2;
890 
891  double bc2 = 1.0;
892  if (Communicator::ipe(idir) == 0) bc2 = double(m_boundary[idir]);
893 
894  double *vp = v.ptr(0);
895  const double *wp = w.ptr(0);
896  const double *up = m_U.ptr(m_Ndf * m_Nvol * idir);
897 
898  int ith, nth, is, ns;
899  set_threadtask(ith, nth, is, ns, m_Nvol);
900 
901  int Nxy = m_Nx * m_Ny;
902 
903 #pragma omp barrier
904 
905  for (int site = is; site < ns; ++site) {
906  int ixy = site % Nxy;
907  int izt = site / Nxy;
908  int iz = izt % m_Nz;
909  int it = izt / m_Nz;
910  int ixyt = ixy + Nxy * it;
911  if (iz == m_Nz - 1) {
912  for (int ic = 0; ic < m_Nc; ++ic) {
913  int ic2 = 2 * ic;
914  double wtr, wti;
915  wtr = mult_udagv_r(&up[ic2 + m_Ndf * site], &wp[m_Nvc * site], m_Nc);
916  wti = mult_udagv_i(&up[ic2 + m_Ndf * site], &wp[m_Nvc * site], m_Nc);
917  vcp1_zm[2 * ic + m_Nvc * ixyt] = wtr;
918  vcp1_zm[2 * ic + 1 + m_Nvc * ixyt] = wti;
919  }
920  }
921  }
922 
923 #pragma omp barrier
924 #pragma omp master
925  {
926  int Nv = m_Nvc * m_Nx * m_Ny * m_Nt;
927  Communicator::exchange(Nv, vcp2_zm, vcp1_zm, 2, -1, 6);
928  }
929 #pragma omp barrier
930 
931  for (int site = is; site < ns; ++site) {
932  int ixy = site % Nxy;
933  int izt = site / Nxy;
934  int iz = izt % m_Nz;
935  int it = izt / m_Nz;
936  int ixyt = ixy + Nxy * it;
937  int nei = ixy + Nxy * (iz - 1 + m_Nz * it);
938 
939  if (iz > 0) {
940  for (int ic = 0; ic < m_Nc; ++ic) {
941  int ic2 = 2 * ic;
942  double wtr, wti;
943  wtr = mult_udagv_r(&up[ic2 + m_Ndf * nei], &wp[m_Nvc * nei], m_Nc);
944  wti = mult_udagv_i(&up[ic2 + m_Ndf * nei], &wp[m_Nvc * nei], m_Nc);
945  vp[2 * ic + m_Nvc * site] -= wtr;
946  vp[2 * ic + 1 + m_Nvc * site] -= wti;
947  }
948  } else {
949  for (int ivc = 0; ivc < m_Nvc; ++ivc) {
950  vp[ivc + m_Nvc * site] -= bc2 * vcp2_zm[ivc + m_Nvc * ixyt];
951  }
952  }
953  }
954 
955 #pragma omp barrier
956 }
957 
958 
959 //====================================================================
961 {
962  int idir = 3;
963 
964  double bc2 = 1.0;
965  if (Communicator::ipe(idir) == 0) bc2 = double(m_boundary[idir]);
966 
967  double *vp = v.ptr(0);
968  const double *wp = w.ptr(0);
969  const double *up = m_U.ptr(m_Ndf * m_Nvol * idir);
970 
971  int ith, nth, is, ns;
972  set_threadtask(ith, nth, is, ns, m_Nvol);
973 
974  int Nxyz = m_Nx * m_Ny * m_Nz;
975 
976 #pragma omp barrier
977 
978  for (int site = is; site < ns; ++site) {
979  int ixyz = site % Nxyz;
980  int it = site / Nxyz;
981  if (it == 0) {
982  for (int ivc = 0; ivc < m_Nvc; ++ivc) {
983  vcp1_tp[ivc + m_Nvc * ixyz] = bc2 * wp[ivc + m_Nvc * site];
984  }
985  }
986  }
987 
988 #pragma omp barrier
989 #pragma omp master
990  {
991  int Nv = m_Nvc * m_Nx * m_Ny * m_Nz;
992  Communicator::exchange(Nv, vcp2_tp, vcp1_tp, 3, 1, 7);
993  }
994 #pragma omp barrier
995 
996  for (int site = is; site < ns; ++site) {
997  int ixyz = site % Nxyz;
998  int it = site / Nxyz;
999  int nei = ixyz + Nxyz * (it + 1);
1000 
1001  if (it < m_Nt - 1) {
1002  for (int ic = 0; ic < m_Nc; ++ic) {
1003  int ic2 = ic * m_Nvc;
1004  double wtr, wti;
1005  wtr = mult_uv_r(&up[ic2 + m_Ndf * site], &wp[m_Nvc * nei], m_Nc);
1006  wti = mult_uv_i(&up[ic2 + m_Ndf * site], &wp[m_Nvc * nei], m_Nc);
1007  vp[2 * ic + m_Nvc * site] += wtr;
1008  vp[2 * ic + 1 + m_Nvc * site] += wti;
1009  }
1010  } else {
1011  for (int ic = 0; ic < m_Nc; ++ic) {
1012  int ic2 = ic * m_Nvc;
1013  double wtr, wti;
1014  wtr = mult_uv_r(&up[ic2 + m_Ndf * site], &vcp2_tp[m_Nvc * ixyz], m_Nc);
1015  wti = mult_uv_i(&up[ic2 + m_Ndf * site], &vcp2_tp[m_Nvc * ixyz], m_Nc);
1016  vp[2 * ic + m_Nvc * site] += wtr;
1017  vp[2 * ic + 1 + m_Nvc * site] += wti;
1018  }
1019  }
1020  }
1021 
1022 #pragma omp barrier
1023 }
1024 
1025 
1026 //====================================================================
1028 {
1029  int idir = 3;
1030 
1031  double bc2 = 1.0;
1032  if (Communicator::ipe(idir) == 0) bc2 = double(m_boundary[idir]);
1033 
1034  double *vp = v.ptr(0);
1035  const double *wp = w.ptr(0);
1036  const double *up = m_U.ptr(m_Ndf * m_Nvol * idir);
1037 
1038  int ith, nth, is, ns;
1039  set_threadtask(ith, nth, is, ns, m_Nvol);
1040 
1041  int Nxyz = m_Nx * m_Ny * m_Nz;
1042 
1043 #pragma omp barrier
1044 
1045  for (int site = is; site < ns; ++site) {
1046  int ixyz = site % Nxyz;
1047  int it = site / Nxyz;
1048  if (it == m_Nt - 1) {
1049  for (int ic = 0; ic < m_Nc; ++ic) {
1050  int ic2 = 2 * ic;
1051  double wtr, wti;
1052  wtr = mult_udagv_r(&up[ic2 + m_Ndf * site], &wp[m_Nvc * site], m_Nc);
1053  wti = mult_udagv_i(&up[ic2 + m_Ndf * site], &wp[m_Nvc * site], m_Nc);
1054  vcp1_tm[2 * ic + m_Nvc * ixyz] = wtr;
1055  vcp1_tm[2 * ic + 1 + m_Nvc * ixyz] = wti;
1056  }
1057  }
1058  }
1059 
1060 #pragma omp barrier
1061 #pragma omp master
1062  {
1063  int Nv = m_Nvc * m_Nx * m_Ny * m_Nz;
1064  Communicator::exchange(Nv, vcp2_tm, vcp1_tm, 3, -1, 8);
1065  }
1066 #pragma omp barrier
1067 
1068  for (int site = is; site < ns; ++site) {
1069  int ixyz = site % Nxyz;
1070  int it = site / Nxyz;
1071  int nei = ixyz + Nxyz * (it - 1);
1072 
1073  if (it > 0) {
1074  for (int ic = 0; ic < m_Nc; ++ic) {
1075  int ic2 = 2 * ic;
1076  double wtr, wti;
1077  wtr = mult_udagv_r(&up[ic2 + m_Ndf * nei], &wp[m_Nvc * nei], m_Nc);
1078  wti = mult_udagv_i(&up[ic2 + m_Ndf * nei], &wp[m_Nvc * nei], m_Nc);
1079  vp[2 * ic + m_Nvc * site] -= wtr;
1080  vp[2 * ic + 1 + m_Nvc * site] -= wti;
1081  }
1082  } else {
1083  for (int ivc = 0; ivc < m_Nvc; ++ivc) {
1084  vp[ivc + m_Nvc * site] -= bc2 * vcp2_tm[ivc + m_Nvc * ixyz];
1085  }
1086  }
1087  }
1088 
1089 #pragma omp barrier
1090 }
1091 
1092 
1093 //====================================================================
1094 double Fopr_Staggered::flop_count(const std::string mode)
1095 {
1096  // the following flop counting assumes mass normalization.
1097 
1098  int Nvol = m_Nvol;
1099  int NPE = CommonParameters::NPE();
1100 
1101  int flop_site = m_Nvc * (3 + 2 * m_Ndim * 2 * m_Nvc);
1102 
1103  double flop_vol = double(Nvol) * double(NPE);
1104 
1105  double gflop = double(flop_site) * flop_vol * 1.0e-9;
1106 
1107  if ((mode == "DdagD") || (mode == "DDdag")) {
1108  gflop *= 2.0;
1109  }
1110 
1111  return gflop;
1112 }
1113 
1114 
1115 //============================================================END=====
CommonParameters::Ny
static int Ny()
Definition: commonParameters.h:106
Fopr_Staggered::m_v2
Field m_v2
working field
Definition: fopr_Staggered.h:53
Fopr_Staggered::vcp1_xm
double * vcp1_xm
Definition: fopr_Staggered.h:56
CommonParameters::Nz
static int Nz()
Definition: commonParameters.h:107
Fopr_Staggered::get_parameters
void get_parameters(Parameters &params) const
gets parameters by a Parameter object: to be implemented in a subclass.
Definition: fopr_Staggered.cpp:203
Fopr_Staggered::m_mq
double m_mq
quark mass.
Definition: fopr_Staggered.h:36
Fopr_Staggered::mult_xm
void mult_xm(Field &, const Field &)
Definition: fopr_Staggered.cpp:607
Fopr_Staggered::vcp1_zm
double * vcp1_zm
Definition: fopr_Staggered.h:58
fopr_thread-inc.h
Fopr_Staggered::set_parameters
void set_parameters(const Parameters &params)
sets parameters by a Parameter object: to be implemented in a subclass.
Definition: fopr_Staggered.cpp:143
Parameters::set_string
void set_string(const string &key, const string &value)
Definition: parameters.cpp:39
Fopr_Staggered::init
void init()
initial setup.
Definition: fopr_Staggered.cpp:51
Index_lex
Lexical site index.
Definition: index_lex.h:34
fopr_Wilson_impl_SU_N-inc.h
fopr_Wilson_impl_SU3-inc.h
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
Fopr_Staggered::H
void H(Field &, const Field &)
Definition: fopr_Staggered.cpp:399
Field::set
void set(const int jin, const int site, const int jex, double v)
Definition: field.h:175
Parameters
Class for parameters.
Definition: parameters.h:46
iy
int iy
Definition: mult_Wilson_xyz_openacc-inc.h:239
ixy
int ixy
Definition: mult_Domainwall_eo_xyz_openacc-inc.h:513
fopr_Staggered.h
Fopr_Staggered::m_mode
std::string m_mode
mult mode
Definition: fopr_Staggered.h:40
izt
int izt
Definition: mult_Domainwall_eo_xyz_openacc-inc.h:262
Fopr_Staggered::set_mode
void set_mode(std::string mode)
setting the mode of multiplication if necessary. Default implementation here is just to avoid irrelev...
Definition: fopr_Staggered.cpp:353
Parameters::set_double
void set_double(const string &key, const double value)
Definition: parameters.cpp:33
Bridge::BridgeIO::decrease_indent
void decrease_indent()
Definition: bridgeIO.cpp:518
Fopr_Staggered::mult_dag
void mult_dag(Field &, const Field &)
hermitian conjugate of mult.
Definition: fopr_Staggered.cpp:381
Fopr_Staggered::vcp2_zp
double * vcp2_zp
Definition: fopr_Staggered.h:58
Fopr_Staggered::vcp2_ym
double * vcp2_ym
Definition: fopr_Staggered.h:57
Fopr_Staggered::mult_xp
void mult_xp(Field &, const Field &)
Definition: fopr_Staggered.cpp:542
Bridge::BridgeIO::increase_indent
void increase_indent()
Definition: bridgeIO.cpp:508
Bridge::BridgeIO::detailed
void detailed(const char *format,...)
Definition: bridgeIO.cpp:281
Field::nex
int nex() const
Definition: field.h:128
Fopr_Staggered::vcp1_xp
double * vcp1_xp
communication buffer
Definition: fopr_Staggered.h:56
Fopr_Staggered::mult_zm
void mult_zm(Field &, const Field &)
Definition: fopr_Staggered.cpp:887
Fopr_Staggered::m_Nvol
int m_Nvol
Definition: fopr_Staggered.h:45
Fopr_Staggered::vcp2_xp
double * vcp2_xp
Definition: fopr_Staggered.h:56
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
CommonParameters::Nvol
static int Nvol()
Definition: commonParameters.h:109
Fopr_Staggered::m_Ndim
int m_Ndim
Definition: fopr_Staggered.h:45
Fopr_Staggered::set_config_impl
void set_config_impl(Field *U)
Definition: fopr_Staggered.cpp:332
axpy
void axpy(Field &y, const double a, const Field &x)
axpy(y, a, x): y := a * x + y
Definition: field.cpp:381
Fopr_Staggered::m_Nx
int m_Nx
Definition: fopr_Staggered.h:44
Fopr_Staggered::mult
void mult(Field &, const Field &)
multiplies fermion operator to a given field.
Definition: fopr_Staggered.cpp:363
Fopr_Staggered::vcp1_ym
double * vcp1_ym
Definition: fopr_Staggered.h:57
Field::nin
int nin() const
Definition: field.h:126
Fopr_Staggered::mult_tp
void mult_tp(Field &, const Field &)
Definition: fopr_Staggered.cpp:960
Fopr_Staggered::setup
void setup()
Definition: fopr_Staggered.cpp:67
Fopr_Staggered::m_Nt
int m_Nt
Definition: fopr_Staggered.h:44
Fopr_Staggered::m_stg_phase
Field m_stg_phase
staggered phase
Definition: fopr_Staggered.h:47
copy
void copy(Field &y, const Field &x)
copy(y, x): y = x
Definition: field.cpp:213
Fopr_Staggered::vcp2_zm
double * vcp2_zm
Definition: fopr_Staggered.h:58
Fopr_Staggered::flop_count
double flop_count()
returns the number of floating point operations.
Definition: fopr_Staggered.h:107
iyzt
int iyzt
Definition: mult_Domainwall_eo_xyz_openacc-inc.h:14
Fopr_Staggered::m_Nvc
int m_Nvc
Definition: fopr_Staggered.h:43
Fopr_Staggered::set_config_omp
void set_config_omp(Field *U)
Definition: fopr_Staggered.cpp:322
CommonParameters::Nx
static int Nx()
Definition: commonParameters.h:105
ix
int ix
Definition: mult_Wilson_xyz_openacc-inc.h:16
Fopr_Staggered::DdagD
void DdagD(Field &, const Field &)
Definition: fopr_Staggered.cpp:407
idir
idir
Definition: mult_Domainwall_eo_xyz_openacc-inc.h:264
Fopr_Staggered::set_config
void set_config(Field *U)
sets the gauge configuration.
Definition: fopr_Staggered.cpp:304
CommonParameters::Nc
static int Nc()
Definition: commonParameters.h:115
Fopr_Staggered::mult_zp
void mult_zp(Field &, const Field &)
Definition: fopr_Staggered.cpp:814
Fopr_Staggered::m_Ny
int m_Ny
Definition: fopr_Staggered.h:44
Fopr_Staggered::vcp1_yp
double * vcp1_yp
Definition: fopr_Staggered.h:57
bc2
int bc2
Definition: mult_Domainwall_eo_t_dirac_openacc-inc.h:62
Fopr_Staggered::set_staggered_phase
void set_staggered_phase()
Definition: fopr_Staggered.cpp:212
CommonParameters::Nt
static int Nt()
Definition: commonParameters.h:108
Parameters::fetch_int_vector
int fetch_int_vector(const string &key, vector< int > &value) const
Definition: parameters.cpp:429
wtr
real_t wtr
Definition: mult_Staggered_uvdn1_openacc-inc.h:10
wti
real_t wti
Definition: mult_Staggered_uvdn1_openacc-inc.h:10
Fopr_Staggered::Ddag
void Ddag(Field &, const Field &)
Definition: fopr_Staggered.cpp:452
Fopr_Staggered::m_Ndf
int m_Ndf
Definition: fopr_Staggered.h:43
Field_G::reset
void reset(const int Nvol, const int Nex)
Definition: field_G.h:79
Fopr_Staggered::mult_gm5
void mult_gm5(Field &, const Field &)
multiplies gamma_5 matrix.
Definition: fopr_Staggered.cpp:487
Element_type::REAL
@ REAL
Definition: bridge_defs.h:43
Field::nvol
int nvol() const
Definition: field.h:127
it
int it
Definition: mult_Wilson_xyz_openacc-inc.h:461
index_lex.h
Fopr_Staggered::m_U
Field_G m_U
gauge field multiplied by staggered phase.
Definition: fopr_Staggered.h:50
CommonParameters::NPE
static int NPE()
Definition: commonParameters.h:101
Index_lex::site
int site(const int &x, const int &y, const int &z, const int &t) const
Definition: index_lex.h:55
Fopr_Staggered::m_Nc
int m_Nc
Definition: fopr_Staggered.h:43
Fopr_Staggered::vcp2_tp
double * vcp2_tp
Definition: fopr_Staggered.h:59
Field::reset
void reset(const int Nin, const int Nvol, const int Nex, const element_type cmpl=Element_type::COMPLEX)
Definition: field.h:95
Parameters::set_int_vector
void set_int_vector(const string &key, const vector< int > &value)
Definition: parameters.cpp:45
Fopr_Staggered::vcp1_zp
double * vcp1_zp
Definition: fopr_Staggered.h:58
Field::cmp
double cmp(const int jin, const int site, const int jex) const
Definition: field.h:143
Field::ptr
const double * ptr(const int jin, const int site, const int jex) const
Definition: field.h:153
CommonParameters::Vlevel
static Bridge::VerboseLevel Vlevel()
Definition: commonParameters.h:122
Fopr_Staggered::m_parity
Field m_parity
site parity field
Definition: fopr_Staggered.h:48
fopr_Wilson_impl_SU2-inc.h
Bridge::BridgeIO::set_verbose_level
static VerboseLevel set_verbose_level(const std::string &str)
Definition: bridgeIO.cpp:195
Fopr_Staggered::D
void D(Field &, const Field &)
Definition: fopr_Staggered.cpp:417
Fopr_Staggered::m_boundary
std::vector< int > m_boundary
boundary conditions.
Definition: fopr_Staggered.h:37
Fopr_Staggered::vcp2_yp
double * vcp2_yp
Definition: fopr_Staggered.h:57
Fopr_Staggered::vcp2_tm
double * vcp2_tm
Definition: fopr_Staggered.h:59
Fopr_Staggered::tidyup
void tidyup()
final clean-up.
Definition: fopr_Staggered.cpp:118
iz
int iz
Definition: mult_Wilson_xyz_openacc-inc.h:462
Fopr_Staggered::vcp1_tm
double * vcp1_tm
Definition: fopr_Staggered.h:59
scal
void scal(Field &x, const double a)
scal(x, a): x = a * x
Definition: field.cpp:262
Communicator::ipe
static int ipe(const int dir)
logical coordinate of current proc.
Definition: communicator.cpp:105
Fopr_Staggered::vcp2_xm
double * vcp2_xm
Definition: fopr_Staggered.h:56
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
Fopr_Staggered::mult_ym
void mult_ym(Field &, const Field &)
Definition: fopr_Staggered.cpp:743
Fopr_Staggered::mult_staggered_phase
void mult_staggered_phase(Field &, int mu)
Definition: fopr_Staggered.cpp:278
ixyz
int ixyz
Definition: mult_Domainwall_eo_t_dirac_openacc-inc.h:13
Fopr_Staggered::m_vl
Bridge::VerboseLevel m_vl
verbose level
Definition: fopr_Staggered.h:38
Bridge::BridgeIO::crucial
void crucial(const char *format,...)
Definition: bridgeIO.cpp:242
Fopr_Staggered::m_v1
Field m_v1
working field
Definition: fopr_Staggered.h:52
Fopr_Staggered::vcp1_tp
double * vcp1_tp
Definition: fopr_Staggered.h:59
Field
Container of Field-type object.
Definition: field.h:46
Communicator::exchange
static int exchange(int count, dcomplex *recv_buf, dcomplex *send_buf, int idir, int ipm, int tag)
receive array of dcomplex from upstream specified by idir and ipm, and send array to downstream.
Definition: communicator.cpp:207
ThreadManager::get_thread_id
static int get_thread_id()
returns thread id.
Definition: threadManager.cpp:253
Fopr_Staggered::class_name
static const std::string class_name
Definition: fopr_Staggered.h:32
Bridge::BridgeIO::general
void general(const char *format,...)
Definition: bridgeIO.cpp:262
Fopr_Staggered::mult_tm
void mult_tm(Field &, const Field &)
Definition: fopr_Staggered.cpp:1027
Fopr_Staggered::m_Nz
int m_Nz
Definition: fopr_Staggered.h:44
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
Fopr_Staggered::mult_yp
void mult_yp(Field &, const Field &)
Definition: fopr_Staggered.cpp:672