34 static MPI_Request requests[
COMPDIM * 2 * 2];
36 static int didpostrecvs[
COMPDIM*2]={0};
92 MACP0A1(prim,i,j,k,pl)=-1-pl*100;
95 MACP0A1(prim,i,j,k,pl)=myid-pl*100;
122 for(jj=0;jj<
NDIM;jj++){
151 dualfprintf(
fail_file,
"No such type of MPI bounding: boundvartype=%d\n",boundvartype);
156 int dirstart,dirfinish;
157 if(whichdir==-1 || whichdir==1){ dirstart=
X1UP; dirfinish=
X1DN;}
158 if(whichdir==-2 || whichdir==2){ dirstart=
X2UP; dirfinish=
X2DN;}
159 if(whichdir==-3 || whichdir==3){ dirstart=
X3UP; dirfinish=
X3DN;}
170 if(whichdir==-1 || whichdir==-2 || whichdir==-3){
172 for(dir=dirstart;dir<=dirfinish;dir++){
174 recvonly(dir,boundvartype,
workbc,requests);
180 else if(whichdir==1 || whichdir==2 || whichdir==3){
194 if((boundstage==
STAGEM1)||(boundstage==
STAGE0&&whichdir==1 || boundstage==
STAGE2&&whichdir==2 || boundstage==
STAGE4&&whichdir==3)){
195 for(dir=dirstart;dir<=dirfinish;dir++){
197 if(didpostrecvs[dir]==0){
198 dualfprintf(
fail_file,
"Did not post recv and tried to already pack: dir=%d\n",dir);
201 pack(dir,boundvartype,prim2bound[whichdir],flux2bound[whichdir],vpot2bound[whichdir],
workbc);
204 for(dir=dirstart;dir<=dirfinish;dir++)
if(
dirgenset[boundvartype][dir][DIRIF]) sendonly(dir,boundvartype,
workbc,requests);
206 if((boundstage==
STAGEM1)||(boundstage==
STAGE1&&whichdir==1 || boundstage==
STAGE3&&whichdir==2 || boundstage==
STAGE5&&whichdir==3)){
207 for(dir=dirstart;dir<=dirfinish;dir++)
if(
dirgenset[boundvartype][dir][DIRIF]){
208 recvwait(dir,requests);
211 for(dir=dirstart;dir<=dirfinish;dir++)
if(
dirgenset[boundvartype][dir][DIRIF]) unpack(dir,boundvartype,
workbc,prim2bound[whichdir],flux2bound[whichdir],vpot2bound[whichdir]);
212 for(dir=dirstart;dir<=dirfinish;dir++)
if(
dirgenset[boundvartype][dir][DIRIF]) sendwait(dir,requests);
216 dualfprintf(
fail_file,
"No such whichdir=%d in boundmpi.c\n",whichdir);
227 logfprintf(
"\n\nafter\n\n");
230 logfprintf(
"%d %d %d %d %21.15g\n",i,j,k,pl,
MACP0A1(prim,i,j,k,pl));
245 #define PACKLOOP(i,j,k,istart,istop,jstart,jstop,kstart,kstop,di,dj,dk,pr,num) PLOOPMPI(pr,num) SUPERGENLOOP(i,j,k,istart,istop,jstart,jstop,kstart,kstop,di,dj,dk)
247 #define PACKLOOPORIG(i,j,k,istart,istop,jstart,jstop,kstart,kstop,di,dj,dk,pr,num) PLOOPMPIORIG(pr,num) SUPERGENLOOP(i,j,k,istart,istop,jstart,jstop,kstart,kstop,di,dj,dk)
251 #define PACKBLOCK i,j,k \
252 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRPSTART1] \
253 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRPSTOP1] \
254 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRPSTART2] \
255 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRPSTOP2] \
256 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRPSTART3] \
257 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRPSTOP3] \
258 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRPDIR1] \
259 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRPDIR2] \
260 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRPDIR3] \
262 ,dirgenset[boundvartype][dir][DIRNUMPR]
320 dualfprintf(
fail_file,
"No such pack type\n");
342 dualfprintf(
fail_file,
"No such boundvartype=%d in sendrecv() in boundmpi.c\n",boundvartype);
380 if(MPIFLOWCONTROL==1){
400 ¬hingsend,0,MPI_INT,
404 ¬hingrecv,0,MPI_INT,
405 MPIid[
dirgenset[boundvartype][dir][DIROTHER]],
408 MPI_COMM_GRMHD,MPI_STATUS_IGNORE);
423 void recvwait(
int dir,MPI_Request *requests)
425 MPI_Wait(&requests[dir*2+
REQRECV], &mpichstatus);
430 #define UNPACKBLOCK i,j,k \
431 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRUSTART1] \
432 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRUSTOP1] \
433 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRUSTART2] \
434 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRUSTOP2] \
435 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRUSTART3] \
436 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRUSTOP3] \
437 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRUDIR1] \
438 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRUDIR2] \
439 ,dirloopset[boundvartype][dir][primgridpos[boundvartype][dir][pr]][DIRUDIR3] \
441 ,dirgenset[boundvartype][dir][DIRNUMPR]
488 dualfprintf(
fail_file,
"No such unpack type\n");
497 void sendwait(
int dir,MPI_Request *requests)
499 MPI_Wait(&requests[dir*2+
REQSEND], &mpichstatus);
513 whichdir=-1; bound_mpi_dir(boundstage, finalstep, whichdir, boundvartype, prim, F1, F2, F3, vpot);
514 whichdir=-2; bound_mpi_dir(boundstage, finalstep, whichdir, boundvartype, prim, F1, F2, F3, vpot);
515 whichdir=-3; bound_mpi_dir(boundstage, finalstep, whichdir, boundvartype, prim, F1, F2, F3, vpot);
518 whichdir=1; bound_mpi_dir(boundstage, finalstep, whichdir, boundvartype, prim, F1, F2, F3, vpot);
519 whichdir=2; bound_mpi_dir(boundstage, finalstep, whichdir, boundvartype, prim, F1, F2, F3, vpot);
520 whichdir=3; bound_mpi_dir(boundstage, finalstep, whichdir, boundvartype, prim, F1, F2, F3, vpot);
523 whichdir=-1; bound_mpi_dir(boundstage, finalstep, whichdir, boundvartype, prim, F1, F2, F3, vpot);
524 whichdir=1; bound_mpi_dir(boundstage, finalstep, whichdir, boundvartype, prim, F1, F2, F3, vpot);
525 whichdir=-2; bound_mpi_dir(boundstage, finalstep, whichdir, boundvartype, prim, F1, F2, F3, vpot);
526 whichdir=2; bound_mpi_dir(boundstage, finalstep, whichdir, boundvartype, prim, F1, F2, F3, vpot);
527 whichdir=-3; bound_mpi_dir(boundstage, finalstep, whichdir, boundvartype, prim, F1, F2, F3, vpot);
528 whichdir=3; bound_mpi_dir(boundstage, finalstep, whichdir, boundvartype, prim, F1, F2, F3, vpot);