39 1 IPARI ,ISLEN7 ,IRLEN7 ,IFLAG ,INTBUF_TAB,
53! | nb1| x1 | | x1 | x1 | y1 |... | znb | nb2 | ...
69 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
70#include
"implicit_f.inc"
85 INTEGER,
INTENT(in) :: IFLAG, ISLEN7, IRLEN7
86 INTEGER,
DIMENSION(NPARI,*),
INTENT(in) :: IPARI
88 TYPE(intbuf_struct_) INTBUF_TAB(*)
89 TYPE(MULTI_FVM_STRUCT),
INTENT(INOUT) :: MULTI_FVM
96 INTEGER :: L,II,IJ,LL,LL0,N,NI
97 INTEGER :: ADD,NB,LEN,LENI,SIZ,IDEB
98 INTEGER :: NIN,NTY,NB_INT18
99 INTEGER :: IERROR,IALLOCS, IALLOCR
100 INTEGER :: MSGTYP,MSGOFF
101 INTEGER,
DIMENSION(MPI_STATUS_SIZE) :: STATUS
102 INTEGER,
DIMENSION(NINTER) :: DEBUT,DEBUTE
103 INTEGER,
DIMENSION(PARASIZ) :: REQ_SI,REQ_RI
104 INTEGER,
DIMENSION(PARASIZ+1) :: ADDS,ADDR
107 REAL(kind=8),dimension(:),
ALLOCATABLE :: bbufs, bbufr
108 SAVE adds,addr,req_si,req_ri,iallocs,iallocr,bbufs,bbufr
113 nb_int18 = multi_fvm%NUMBER_INT18
125 DO ii=1,multi_fvm%NUMBER_INT18
126 nin = multi_fvm%INT18_LIST(ii)
133 +
ALLOCATE(bbufs(iallocs+nb_int18*nspmd*2),stat=ierror)
135 CALL ancmsg(msgid=20,anmode=aninfo)
143 +
ALLOCATE(bbufr(iallocr+nb_int18*nspmd*2),stat=ierror)
145 CALL ancmsg(msgid=20,anmode=aninfo)
158 DO ii=1,multi_fvm%NUMBER_INT18
159 nin = multi_fvm%INT18_LIST(ii)
171 CALL mpi_irecv( bbufr(add),siz,mpi_double_precision,
172 . it_spmd(p),msgtyp,spmd_comm_world,req_ri(p),ierror )
176 addr(nspmd+1) = addr(nspmd)+siz
186 DO ii=1,multi_fvm%NUMBER_INT18
187 nin = multi_fvm%INT18_LIST(ii)
197 IF(
nsvfi(nin)%P(ideb+n)<0)
THEN
199 bbufs(l) = -
nsvfi(nin)%P(ideb+n)
203 bbufs(l+6+ij) = multi_fvm%R_AFI(nin)%R_FORCE_INT(2,ij,ideb+n)
204 bbufs(l+12+ij) = multi_fvm%R_AFI(nin)%R_FORCE_INT(3,ij,ideb+n)
207 multi_fvm%R_AFI(nin)%R_FORCE_INT(1,ij,ideb+n) = 0
208 multi_fvm%R_AFI(nin)%R_FORCE_INT(2,ij,ideb+n) = 0
209 multi_fvm%R_AFI(nin)%R_FORCE_INT(3,ij,ideb+n) = 0
214 bbufs(ll) = (l-ll0)/leni
215 debut(nin) = debut(nin) + nb
222 CALL mpi_isend( bbufs(add),siz,mpi_double_precision,it_spmd(p),
223 . msgtyp,spmd_comm_world,req_si(p),ierror )
227 adds(nspmd+1)=adds(nspmd)+siz
236 IF(addr(p+1)-addr(p)>0)
THEN
237 CALL mpi_wait(req_ri(p),status,ierror)
239 DO ii=1,multi_fvm%NUMBER_INT18
240 nin = multi_fvm%INT18_LIST(ii)
242 IF(
nsnsi(nin)%P(p)>0)
THEN
246 ibric = intbuf_tab(nin)%NSV( nint(bbufr(l
247 multi_fvm%FORCE_INT_PON(1,1:6,ibric) =
248 . multi_fvm%FORCE_INT_PON(1,1:6,ibric) + bbufr(l+1:l+6)
249 multi_fvm%FORCE_INT_PON(2,1:6,ibric) =
250 . multi_fvm%FORCE_INT_PON(2,1:6,ibric) + bbufr(l+7:l+12)
251 multi_fvm%FORCE_INT_PON(3,1:6,ibric) =
252 . multi_fvm%FORCE_INT_PON(3,1:6,ibric) + bbufr(l+13:l+18)
270 IF(adds(p+1)-adds(p)>0)
THEN
271 CALL mpi_wait(req_si(p),status,ierror)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)