41 * MTF,A,IAD_ELEM,FR_ELEM,MODE,SLVNDTAG,TAGPENE,ITAB,
54 USE spmd_comm_world_mod,
ONLY : spmd_comm_world
55#include "implicit_f.inc"
76 INTEGER IPARI(NPARI,*),IAD_ELEM(2,*),FR_ELEM(*),
77 * SLVNDTAG(*),TAGPENE(*),(*),MODE
82 TYPE(intbuf_struct_) INTBUF_TAB(*)
83 TYPE(H3D_DATABASE) :: H3D_DATA
88 INTEGER STATUS(MPI_STATUS_SIZE),
89 * REQ_SI(NSPMD),REQ_RI(NSPMD)
90 INTEGER P,LENSD,LENRV,IADS(NSPMD+1),IADR(NSPMD+1),IERROR,
91 * SIZ,LOC_PROC,MSGTYP,IDEB(NINTER), MSGOFF, MSGOFF2
92 INTEGER NIN,NTY,INACTI
93 INTEGER J,L,NB,NN,K,N,NOD,LEN,ALEN,ND,FLG
95 *
DIMENSION(:),
ALLOCATABLE :: bbufs, bbufr
125 inacti =ipari(22,nin)
126 IF((nty==7.and.ipari(34,nin)==-2.and.inacti==7).OR.
127 . (nty==22.and.ipari(34,nin)==-2.and.inacti==7))
THEN
128 lensd = lensd +
nsnfi(nin)%P(p)*alen
129 lenrv = lenrv +
nsnsi(nin)%P(p)*alen
133 iadr(nspmd+1)=lenrv+1
136 ALLOCATE(bbufs(lensd),stat=ierror)
138 CALL ancmsg(msgid=20,anmode=aninfo)
145 ALLOCATE(bbufr(lenrv),stat=ierror)
147 CALL ancmsg(msgid=20,anmode=aninfo)
156 IF (p/= loc_proc)
THEN
159 inacti =ipari(22,nin)
160 IF((nty==7.and.ipari(34,nin)==-2.and.inacti==7).OR.
161 . (nty==22.and.ipari(34,nin)==-2.and.inacti==7))
THEN
168 bbufs(l+2)=
mtfi_n(nin)%P(1,nn+ideb(nin))
169 bbufs(l+3)=
mtfi_n(nin)%P(2,nn+ideb(nin))
170 bbufs(l+4)=
mtfi_n(nin)%P(3,nn+ideb(nin))
173 ideb(nin)=ideb(nin)+nb
177 bbufs(l )=
mtfi_v(nin)%P(1,nn+ideb(nin))
178 bbufs(l+1)=
mtfi_v(nin)%P(2,nn+ideb(nin))
179 bbufs(l+2)=
mtfi_v(nin)%P(3,nn+ideb(nin))
185 ideb(nin)=ideb(nin)+nb
188 bbufs(l )=
mtfi_a(nin)%P(1,nn+ideb(nin))
189 bbufs(l+1)=
mtfi_a(nin)%P(2,nn+ideb(nin))
190 bbufs(l+2)=
mtfi_a(nin)%P(3,nn+ideb(nin))
191 bbufs(l+3)=
mtfi_a(nin)%P(4,nn+ideb(nin))
192 bbufs(l+4)=
mtfi_a(nin)%P(5,nn+ideb(nin))
193 bbufs(l+5)=
mtfi_a(nin)%P(6,nn+ideb(nin))
194 bbufs(l+6)=
mtfi_a(nin)%P(7,nn+ideb(nin))
197 ideb(nin)=ideb(nin)+nb
206 . bbufs(iads(p)),siz,real ,it_spmd(p),msgtyp,
207 . spmd_comm_world,req_si(p),ierror )
216 siz=iadr(p+1)-iadr(p)
221 CALL mpi_recv( bbufr(iadr(p)),siz,real,it_spmd(p),msgtyp,
222 * spmd_comm_world,status,ierror )
225 inacti =ipari(22,nin)
227 IF((nty==7.and.ipari(34,nin)==-2.and.inacti==7).OR.
228 . (nty==22.and.ipari(34,nin)==-2.and.inacti
THEN
232 IF(nty==7.OR.nty==10.OR.nty==
THEN
235 nd =
nsvsi(nin)%P(ideb(nin)+k)
236 nod=intbuf_tab(nin)%NSV(nd)
238 IF(bbufr(iadr(p)+l+1) > mtf(11,nod))
THEN
239 mtf(11,nod) = bbufr(iadr(p)+l+1)
243 mtf(12,nod) = mtf(12,nod)+bbufr(iadr(p)+l+2)
244 mtf(13,nod) = mtf(13,nod)+bbufr(iadr(p)+l+3)
245 mtf(14,nod) = mtf(14,nod)+bbufr(iadr(p)+l+4)
250 nd =
nsvsi(nin)%P(ideb(nin)+k)
251 nod=intbuf_tab(nin)%NSV(nd)
254 mtf(2,nod) = mtf(2,nod)+bbufr(iadr(p)+l+1)
255 mtf(3,nod) = mtf(3,nod)+bbufr(iadr(p)+l+2)
264 nd =
nsvsi(nin)%P(ideb(nin)+k)
265 nod=intbuf_tab(nin)%NSV(nd)
266 IF(bbufr(iadr(p)+l+6) /= 0)
THEN
267 a(1,nod) = bbufr(iadr(p)+l)
268 a(2,nod) = bbufr(iadr(p)+l+1)
269 a(3,nod) = bbufr(iadr(p)+l+2)
270 IF(anim_v(4)+outp_v(4)+h3d_data%N_VECT_CONT>0.AND.
271 . ((tt>=tanim .AND. tt<=tanim_stop).OR.tt>=toutp.OR.(tt>=h3d_data%TH3D.AND.tt<=h3d_data%TH3D_STOP).OR.
272 . (manim>=4.AND.manim<=15)))
THEN
274 fcont(1,nod) = fcont(1,nod)+bbufr(iadr(p)+l+3)
275 fcont(2,nod) = fcont(2,nod)+bbufr(iadr(p)+l+4)
276 fcont(3,nod) = fcont(3,nod)+bbufr(iadr(p)+l+5)
287 ideb(nin)=ideb(nin)+nb
298 siz=iads(p+1)-iads(p)
301 CALL mpi_wait(req_si(p),status,ierror)
305 IF (
ALLOCATED(bbufs))
DEALLOCATE(bbufs)
306 IF (
ALLOCATED(bbufr))
DEALLOCATE(bbufr)
320 lenrv = (iad_elem(1,nspmd+1)-iad_elem(1,1))*len
322 ALLOCATE(bbufs(lenrv))
323 ALLOCATE(bbufr(lenrv))
328 siz = (iad_elem(1,p+1)-iad_elem(1,p))*len
332 s bbufr(l),siz,real,it_spmd(p),msgtyp,
333 g spmd_comm_world,req_ri(p),ierror)
344 DO j=iad_elem(1,p),iad_elem(1,p+1)-1
348 bbufs(l+1)=mtf(11,nod)
349 bbufs(l+2)=mtf(12,nod)
350 bbufs(l+3)=mtf(13,nod)
351 bbufs(l+4)=mtf(14,nod)
355 bbufs(l+1)=mtf(2,nod)
356 bbufs(l+2)=mtf(3,nod)
367 bbufs(l+3)=slvndtag(nod)
379 IF(iad_elem(1,p+1)-iad_elem(1,p)>0)
THEN
381 siz = iads(1+p)-iads(p)
384 s bbufs(l),siz,real,it_spmd(p),msgtyp,
385 g spmd_comm_world,req_si(p),ierror)
391 nb = iad_elem(1,p+1)-iad_elem(1,p)
393 CALL mpi_wait(req_ri(p),status,ierror)
395 DO j=iad_elem(1,p),iad_elem(1,p+1)-1
398 mtf(10,nod) = mtf(10,nod)+bbufr(l)
399 IF(bbufr(l+1) > abs(mtf(11,nod)))
THEN
400 mtf(11,nod) = bbufr(l+1)
402 ELSEIF(bbufr(l+1) == abs(mtf(11,nod)) .and.
405 mtf(11,nod) = abs(bbufr(l+1)*(1-em6))
407 mtf(12,nod) = mtf(12,nod)+bbufr(l+2)
408 mtf(13,nod) = mtf(13,nod)+bbufr(l+3)
409 mtf(14,nod) = mtf(14,nod)+bbufr(l+4)
412 mtf(1,nod)=mtf(1,nod)+bbufr(l)
413 mtf(2,nod)=mtf(2,nod)+bbufr(l+1)
414 mtf(3,nod)=mtf(3,nod)+bbufr(l+2)
436 siz=iads(p+1)-iads(p)
438 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)