9 template<
typename AFIELD>
11 "ShiftAField_lex<AFIELD>";
13 template<
typename AFIELD>
17 std::vector<int> bc(Ndim);
18 for(
int mu = 0; mu < Ndim; ++mu) bc[mu] = 1;
25 template<
typename AFIELD>
33 vout.
general(m_vl,
"%s: being constructed.\n", class_name.c_str());
42 m_Nvol = m_Nx * m_Ny * m_Nz * m_Nt;
51 if(bc.size() != m_Ndim){
52 vout.
crucial(m_vl,
"%s: incorrect size of boundary condition\n",
57 m_boundary.resize(m_Ndim);
59 for(
int mu = 0; mu < m_Ndim; ++mu){
60 m_boundary[mu] = bc[mu];
61 vout.
general(m_vl,
" boundary[%d] = %2d\n", mu, m_boundary[mu]);
65 for(
int mu = 0; mu < m_Ndim; ++mu){
68 do_comm_any += do_comm[mu];
69 vout.
general(m_vl,
" do_comm[%d] = %d\n", mu, do_comm[mu]);
72 for (
int mu = 0; mu < m_Ndim; ++mu) {
79 m_bc2[mu] = m_boundary[mu];
83 m_Nbdsize.resize(m_Ndim);
84 m_Nbdsize[0] = m_Nin * ceil_nwp(m_Ny * m_Nz * m_Nt);
85 m_Nbdsize[1] = m_Nin * ceil_nwp(m_Nx * m_Nz * m_Nt);
86 m_Nbdsize[2] = m_Nin * ceil_nwp(m_Nx * m_Ny * m_Nt);
87 m_Nbdsize[3] = m_Nin * ceil_nwp(m_Nx * m_Ny * m_Nz);
91 vout.
general(m_vl,
"%s: construction finished.\n", class_name.c_str());
96 template<
typename AFIELD>
100 for(
int mu = 0; mu < m_Ndim; ++mu){
122 template<
typename AFIELD>
125 chsend_up.resize(m_Ndim);
126 chrecv_up.resize(m_Ndim);
127 chsend_dn.resize(m_Ndim);
128 chrecv_dn.resize(m_Ndim);
130 for(
int mu = 0; mu < m_Ndim; ++mu){
132 int Nvsize = m_Nbdsize[mu] *
sizeof(
real_t);
134 chsend_dn[mu].send_init(Nvsize, mu, -1);
135 chsend_up[mu].send_init(Nvsize, mu, 1);
137 chrecv_up[mu].recv_init(Nvsize, mu, 1);
138 chrecv_dn[mu].recv_init(Nvsize, mu, -1);
140 void* buf_up = (
void*)chsend_dn[mu].ptr();
141 chrecv_up[mu].recv_init(Nvsize, mu, 1, buf_up);
142 void* buf_dn = (
void*)chsend_up[mu].ptr();
143 chrecv_dn[mu].recv_init(Nvsize, mu, -1, buf_dn);
145 if(do_comm[mu] == 1){
146 chset_send.append(chsend_up[mu]);
147 chset_send.append(chsend_dn[mu]);
148 chset_recv.append(chrecv_up[mu]);
149 chset_recv.append(chrecv_dn[mu]);
172 template<
typename AFIELD>
182 for(
int ex = 0; ex < Nex; ++ex){
184 real_t* vp = v.
ptr(index.idx(0, m_Nin, 0, ex));
185 real_t* wp =
const_cast<AFIELD*
>(&w)->ptr(index.idx(0, m_Nin, 0, ex));
196 vout.
crucial(m_vl,
"Error at %s: wrong parameter\n",
206 template<
typename AFIELD>
208 const AFIELD& w,
const int ex2,
220 real_t* vp = v.
ptr(index.idx(0, m_Nin, 0, ex1));
221 real_t* wp =
const_cast<AFIELD*
>(&w)->ptr(index.idx(0, m_Nin, 0, ex2));
232 vout.
crucial(m_vl,
"Error at %s: wrong parameter\n",
240 template<
typename AFIELD>
250 for(
int ex = 0; ex < Nex; ++ex){
252 real_t* vp = v.
ptr(index.idx(0, m_Nin, 0, ex));
253 real_t* wp =
const_cast<AFIELD*
>(&w)->ptr(index.idx(0, m_Nin, 0, ex));
257 }
else if (mu == 1) {
259 }
else if (mu == 2) {
261 }
else if (mu == 3) {
264 vout.
crucial(m_vl,
"Error at %s: wrong parameter\n",
274 template<
typename AFIELD>
276 const AFIELD& w,
const int ex2,
288 real_t* vp = v.
ptr(index.idx(0, m_Nin, 0, ex1));
289 real_t* wp =
const_cast<AFIELD*
>(&w)->ptr(index.idx(0, m_Nin, 0, ex2));
293 }
else if (mu == 1) {
295 }
else if (mu == 2) {
297 }
else if (mu == 3) {
300 vout.
crucial(m_vl,
"Error at %s: wrong parameter\n",
308 template<
typename AFIELD>
320 if(do_comm[
idir] > 0){
323 chrecv_up[
idir].start();
324 chsend_dn[
idir].start();
329 if(do_comm[
idir] > 0){
330 chsend_dn[
idir].wait();
331 chrecv_up[
idir].wait();
342 template<
typename AFIELD>
354 if(do_comm[
idir] > 0){
357 chrecv_dn[
idir].start();
358 chsend_up[
idir].start();
363 if(do_comm[
idir] > 0){
364 chsend_up[
idir].wait();
365 chrecv_dn[
idir].wait();
376 template<
typename AFIELD>
388 if(do_comm[
idir] > 0){
391 chrecv_up[
idir].start();
392 chsend_dn[
idir].start();
397 if(do_comm[
idir] > 0){
398 chsend_dn[
idir].wait();
399 chrecv_up[
idir].wait();
410 template<
typename AFIELD>
423 if(do_comm[
idir] > 0){
426 chrecv_dn[
idir].start();
427 chsend_up[
idir].start();
432 if(do_comm[
idir] > 0){
433 chsend_up[
idir].wait();
434 chrecv_dn[
idir].wait();
445 template<
typename AFIELD>
457 if(do_comm[
idir] > 0){
460 chrecv_up[
idir].start();
461 chsend_dn[
idir].start();
466 if(do_comm[
idir] > 0){
467 chsend_dn[
idir].wait();
468 chrecv_up[
idir].wait();
479 template<
typename AFIELD>
491 if(do_comm[
idir] > 0){
494 chrecv_dn[
idir].start();
495 chsend_up[
idir].start();
500 if(do_comm[
idir] > 0){
501 chsend_up[
idir].wait();
502 chrecv_dn[
idir].wait();
513 template<
typename AFIELD>
525 if(do_comm[
idir] > 0){
528 chrecv_up[
idir].start();
529 chsend_dn[
idir].start();
534 if(do_comm[
idir] > 0){
535 chsend_dn[
idir].wait();
536 chrecv_up[
idir].wait();
547 template<
typename AFIELD>
559 if(do_comm[
idir] > 0){
562 chrecv_dn[
idir].start();
563 chsend_up[
idir].start();
568 if(do_comm[
idir] > 0){
569 chsend_up[
idir].wait();
570 chrecv_dn[
idir].wait();