49 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
50#include "implicit_f.inc"
64 INTEGER,
INTENT(IN) :: NBINTC
65 INTEGER,
DIMENSION(NPARI,*),
INTENT(IN) :: IPARI
66 INTEGER,
DIMENSION(NUMNOD),
INTENT(IN) :: (NUMNOD)
67 INTEGER,
DIMENSION(*),
INTENT(IN) :: INTLIST(
68TYPE(intbuf_struct_),
DIMENSION(NINTER) :: INTBUF_TAB
72! * NBINTC * integ. * 1 * in * number of interf. (/=2)
81 INTEGER STATUS(MPI_STATUS_SIZE),
82 * REQ_SI(PARASIZ),REQ_RI(PARASIZ),REQ_S(PARASIZ),
83 * REQ_S2(PARASIZ),(PARASIZ),REQ_R2(PARASIZ)
84 INTEGER P,LENSD,LENRV,IADS(PARASIZ+1),IADR(PARASIZ+1),,
85 * SIZ,LOC_PROC,MSGTYP,IDEBS(NINTER),IDEBR(NINTER),IDB,PROC,
86 * MSGOFF,MSGOFF2,LENSD_0,LENRV_0
87 INTEGER IADINT(NINTER,NSPMD)
89 INTEGER I,J,L,NB,NL,NN,K,N,LEN,ND,FLG,NIN,NTY,
91 * IT,LEN_NSNSI,NSNR,NI,NP,ALEN,NOD,NOD1,NOD2,
92 * SIZE_LOC, I_STOK,INACTI,,ITIED,NRTS
94 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ,TAB_LOC
95 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IBUFS, IBUFR
97 TYPE(int_pointer),
DIMENSION(:),
ALLOCATABLE :: TAG_LOC,TAB_NSVSI
125 ALLOCATE(tab_send(ninter*nspmd), stat=ierror)
127 CALL ancmsg(msgid=20,anmode=aninfo)
130 ALLOCATE(tab_loc(ninter*nspmd), stat=ierror)
132 CALL ancmsg(msgid=20,anmode=aninfo)
135 tab_loc(1:ninter*nspmd) = 0
150 IF(nty==7.OR.nty==10.OR.nty==20.OR.nty==24.OR.nty==25.OR.nty==11)
THEN
151 lensd_0 = lensd_0 +
nsnfi(nin)%P(p)*alen
152 tab_loc(nin+ninter*(p-1)) = tab_loc(nin+ninter*(p-1)) +
nsnfi(nin)%P(p)
156 iads(nspmd+1)=lensd_0+1
160 . tab_send(1),ninter,mpi_integer,
161 . spmd_comm_world,ierror)
170 iadr(p) = lenrv_0 + 1
174 IF(nty==7.OR.nty==10.OR.nty==20.OR.nty==24.OR.nty==25.OR.nty==11)
THEN
175 lenrv_0 = lenrv_0 + tab_send(nin+ninter*(p-1))*alen
179 iadr(nspmd+1) = lenrv_0 + 1
183 ALLOCATE(ibufs(lensd_0),stat=ierror)
185 CALL ancmsg(msgid=20,anmode=aninfo)
192 ALLOCATE(ibufr(lenrv_0),stat=ierror)
194 CALL ancmsg(msgid=20,anmode=aninfo)
197 ALLOCATE(tab_nsvsi(ninter),stat=ierror)
199 CALL ancmsg(msgid=20,anmode=aninfo)
206 IF(nty==7.OR.nty==10.OR.nty==20.OR.nty==24.OR.nty==25.OR.nty==11)
THEN
210 lenrv_0 = lenrv_0 + tab_send(nin+ninter*(p-1))
212 ALLOCATE(tab_nsvsi(nin)%P(lenrv_0), stat=ierror)
214 CALL ancmsg(msgid=20,anmode=aninfo)
217 tab_nsvsi(nin)%P(1:lenrv_0) = 0
224 siz=iadr(p+1)-iadr(p)
227 CALL mpi_irecv( ibufr(iadr(p)),siz,mpi_integer,it_spmd(p),msgtyp,
228 . spmd_comm_world,req_r(p),ierror )
237 IF (p/= loc_proc)
THEN
241 IF(nty==7.OR.nty==10.OR.nty==20.OR.nty==24.OR.nty==25.OR.nty==11)
THEN
245 ibufs(l) =
nsvfi(nin)%P(idebs(nin)+nn)
248 idebs(nin)=idebs(nin)+nb
255 CALL mpi_isend( ibufs(iads(p)),siz,mpi_integer,it_spmd(p),msgtyp,
256 . spmd_comm_world,req_si(p),ierror )
267 siz=iadr(p+1)-iadr(p)
271 CALL mpi_wait(req_r(p),status,ierror)
275 IF(nty==7.OR.nty==10.OR.nty==20.OR.nty==24.OR.nty==25.OR.nty==11)
THEN
276 nb = tab_send(nin+ninter*(p-1))
279 tab_nsvsi(nin)%P(idebr(nin)+k) = ibufr(iadr(p)+l)
282 idebr(nin)=idebr(nin)+nb
296 siz=iads(p+1)-iads(p)
299 CALL mpi_wait(req_si(p),status,ierror)
312 IF(
ALLOCATED(ibufs))
DEALLOCATE(ibufs)
313 IF(
ALLOCATED(ibufr))
DEALLOCATE(ibufr)
325 IF(nty==7.OR.nty==10.OR.nty==20.OR.nty==24.OR.nty==25.OR.nty==11)
THEN
326 lensd = lensd + tab_send(nin+ninter*(p-1))*alen
327 lenrv = lenrv +
nsnfi(nin)%P(p)*alen
331 iads(nspmd+1)=lensd+1
332 iadr(nspmd+1)=lenrv+1
336 ALLOCATE(ibufs(lensd),stat=ierror)
338 CALL ancmsg(msgid=20,anmode=aninfo)
345 ALLOCATE(ibufr(lenrv),stat=ierror)
347 CALL ancmsg(msgid=20,anmode=aninfo)
354 siz=iadr(p+1)-iadr(p)
357 CALL mpi_irecv( ibufr(iadr(p)),siz,mpi_integer,it_spmd(p),msgtyp,
358 . spmd_comm_world,req_r(p),ierror )
367 IF (p/= loc_proc)
THEN
371 IF(nty==7.OR.nty==10.OR.nty==20.OR.nty==24.OR.nty==25)
THEN
372 nb = tab_send(nin+ninter*(p-1))
375 nd = tab_nsvsi(nin)%P(idebs(nin)+nn)
376 nod = intbuf_tab(nin)%NSV(nd)
380 idebs(nin)=idebs(nin)+nb
382 ELSEIF (nty == 11)
THEN
383 nb = tab_send(nin+ninter*(p-1))
386 nd = tab_nsvsi(nin)%P(idebs(nin)+nn)
387 nod1 = intbuf_tab(nin)%IRECTS(2*(nd-1)+1)
388 nod2 = intbuf_tab(nin)%IRECTS(2*(nd-1)+2)
389 IF(tag(nod1)==1 .OR.tag(nod2)==1)
THEN
396 idebs(nin)=idebs(nin)+nb
403 CALL mpi_isend( ibufs(iads(p)),siz,mpi_integer,it_spmd(p),msgtyp,
404 . spmd_comm_world,req_si(p),ierror )
411 ALLOCATE( tag_loc(ninter) )
415 IF(nty==7.OR.nty==10.OR.nty==20.OR.nty==24.OR.nty==25.OR.nty==11)
THEN
417 ALLOCATE(tag_loc(nin)%P(nsnr), stat=ierror)
419 CALL ancmsg(msgid=20,anmode=aninfo)
422 tag_loc(nin)%P(1:nsnr) = 0
431 siz=iadr(p+1)-iadr(p)
435 CALL mpi_wait(req_r(p),status,ierror)
440 IF(nty==7.OR.nty==10.OR.nty==20.OR.nty==24.OR.nty==25.OR.nty==11)
THEN
445 tag_loc(nin)%P(nd) = - ibufr(iadr(p)+l)
448 idebr(nin) = idebr(nin) + nb
460 siz=iads(p+1)-iads(p)
463 CALL mpi_wait(req_si(p),status,ierror)
473 i_stok = intbuf_tab(nin)%I_STOK(1)
474 inacti = ipari(22,nin)
476 itied = ipari(85,nin)
478 IF(nty==7.OR.nty==10.OR.nty==20.OR.nty==24.OR.nty==25.OR.nty==11)
THEN
480 . nsnr,nsn,nty,inacti,ifq,itied,nrts)
482 intbuf_tab(nin)%I_STOK(1) = i_stok
485 IF(
ALLOCATED(ibufs))
DEALLOCATE(ibufs)
486 IF(
ALLOCATED(ibufr))
DEALLOCATE(ibufr)
487 IF(
ALLOCATED(tab_nsvsi))
DEALLOCATE(tab_nsvsi)
488 IF(
ALLOCATED(tab_loc))
DEALLOCATE(tab_loc)
489 IF(
ALLOCATED(tab_send))
DEALLOCATE(tab_send)
490 DEALLOCATE( tag_loc )
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)