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 TYPE(output_),
intent(inout) :: OUTPUT
77 INTEGER IPARI(NPARI,*),IAD_ELEM(2,*),FR_ELEM(*),
78 * slvndtag(*),tagpene(*),itab(*),mode
81 . mtf(14,*),a(3,*),fcont(3,*)
83 TYPE(intbuf_struct_) INTBUF_TAB(*)
84 TYPE(H3D_DATABASE) :: H3D_DATA
89 INTEGER STATUS(MPI_STATUS_SIZE),
90 * REQ_SI(NSPMD),REQ_RI(NSPMD)
91 INTEGER P,LENSD,LENRV,IADS(NSPMD+1),IADR(NSPMD+1),IERROR,
92 * SIZ,LOC_PROC,MSGTYP,IDEB(NINTER), MSGOFF, MSGOFF2
93 INTEGER NIN,NTY,INACTI
94 INTEGER ,L,NB,NN,K,NOD,LEN,ALEN,ND,FLG
96 *
DIMENSION(:),
ALLOCATABLE :: bbufs, bbufr
126 inacti =ipari(22,nin)
127 IF((nty==7.and.ipari(34,nin)==-2.and.inacti==7).OR.
128 . (nty==22.and.ipari(34,nin)==-2.and.inacti==7))
THEN
129 lensd = lensd +
nsnfi(nin)%P(p)*alen
130 lenrv = lenrv +
nsnsi(nin)%P(p)*alen
134 iadr(nspmd+1)=lenrv+1
137 ALLOCATE(bbufs(lensd),stat=ierror)
139 CALL ancmsg(msgid=20,anmode=aninfo)
146 ALLOCATE(bbufr(lenrv),stat=ierror)
148 CALL ancmsg(msgid=20,anmode=aninfo)
157 IF (p/= loc_proc)
THEN
160 inacti =ipari(22,nin)
161 IF((nty==7.and.ipari(34,nin)==-2.and.inacti==7).OR.
162 . (nty==22.and.ipari(34,nin)==-2.and.inacti==7))
THEN
169 bbufs(l+2)=
mtfi_n(nin)%P(1,nn+ideb(nin))
170 bbufs(l+3)=
mtfi_n(nin)%P(2,nn+ideb(nin))
171 bbufs(l+4)=
mtfi_n(nin)%P(3,nn+ideb(nin))
174 ideb(nin)=ideb(nin)+nb
178 bbufs(l )=
mtfi_v(nin)%P(1,nn+ideb(nin))
179 bbufs(l+1)=
mtfi_v(nin)%P(2,nn+ideb(nin))
180 bbufs(l+2)=
mtfi_v(nin)%P(3,nn+ideb(nin))
186 ideb(nin)=ideb(nin)+nb
189 bbufs(l )=
mtfi_a(nin)%P(1,nn+ideb(nin))
190 bbufs(l+1)=
mtfi_a(nin)%P(2,nn+ideb(nin))
191 bbufs(l+2)=
mtfi_a(nin)%P(3,nn+ideb(nin))
192 bbufs(l+3)=
mtfi_a(nin)%P(4,nn+ideb(nin))
193 bbufs(l+4)=
mtfi_a(nin)%P(5,nn+ideb(nin))
194 bbufs(l+5)=
mtfi_a(nin)%P(6,nn+ideb(nin))
195 bbufs(l+6)=
mtfi_a(nin)%P(7,nn+ideb(nin))
198 ideb(nin)=ideb(nin)+nb
207 . bbufs(iads(p)),siz,real ,it_spmd(p),msgtyp,
208 . spmd_comm_world,req_si(p),ierror )
217 siz=iadr(p+1)-iadr(p)
222 CALL mpi_recv( bbufr(iadr(p)),siz,real,it_spmd(p),msgtyp,
223 * spmd_comm_world,status,ierror )
226 inacti =ipari(22,nin)
228 IF((nty==7.and.ipari(34,nin)==-2.and.inacti==7).OR.
233 IF(nty==7.OR.nty==10.OR.nty==22)
THEN
236 nd =
nsvsi(nin)%P(ideb(nin)+k)
237 nod=intbuf_tab(nin)%NSV(nd)
238 mtf(10,nod) = mtf(10,nod)+ bbufr(iadr(p)+l)
239 IF(bbufr(iadr(p)+l+1) > mtf(11,nod))
THEN
240 mtf(11,nod) = bbufr(iadr(p)+l+1)
244 mtf(12,nod) = mtf(12,nod)+bbufr(iadr(p)+l+2)
245 mtf(13,nod) = mtf(13,nod)+bbufr(iadr(p)+l+3)
246 mtf(14,nod) = mtf(14,nod)+bbufr(iadr(p)+l+4)
251 nd =
nsvsi(nin)%P(ideb(nin)+k)
252 nod=intbuf_tab(nin)%NSV(nd)
254 mtf(1,nod) = mtf(1,nod)+bbufr(iadr(p)+l)
255 mtf(2,nod) = mtf(2,nod)+bbufr(iadr(p)+l+1)
256 mtf(3,nod) = mtf(3,nod)+bbufr(iadr(p)+l+2)
265 nd =
nsvsi(nin)%P(ideb(nin)+k)
266 nod=intbuf_tab(nin)%NSV(nd)
267 IF(bbufr(iadr(p)+l+6) /= 0)
THEN
268 a(1,nod) = bbufr(iadr(p)+l)
269 a(2,nod) = bbufr(iadr(p)+l+1)
270 a(3,nod) = bbufr(iadr(p)+l+2)
271 IF(anim_v(4)+outp_v(4)+h3d_data%N_VECT_CONT>0.AND.
272 . ((tt>=output%TANIM .AND. tt<=output%TANIM_STOP).OR.tt>=toutp.OR.
273 . (tt>=h3d_data%TH3D.AND.tt<=h3d_data%TH3D_STOP).OR.
274 . (manim>=4.AND.manim<=15)))
THEN
276 fcont(1,nod) = fcont(1,nod)+bbufr(iadr(p)+l+3)
277 fcont(2,nod) = fcont(2,nod)+bbufr(iadr(p)+l+4)
278 fcont(3,nod) = fcont(3,nod)+bbufr(iadr(p)+l+5)
289 ideb(nin)=ideb(nin)+nb
300 siz=iads(p+1)-iads(p)
303 CALL mpi_wait(req_si(p),status,ierror)
307 IF (
ALLOCATED(bbufs))
DEALLOCATE(bbufs)
308 IF (
ALLOCATED(bbufr))
DEALLOCATE(bbufr)
322 lenrv = (iad_elem(1,nspmd+1)-iad_elem(1,1))*len
324 ALLOCATE(bbufs(lenrv))
325 ALLOCATE(bbufr(lenrv))
330 siz = (iad_elem(1,p+1)-iad_elem(1,p))*len
334 s bbufr(l),siz,real,it_spmd(p),msgtyp,
335 g spmd_comm_world,req_ri(p),ierror)
346 DO j=iad_elem(1,p),iad_elem(1,p+1)-1
350 bbufs(l+1)=mtf(11,nod)
351 bbufs(l+2)=mtf(12,nod)
352 bbufs(l+3)=mtf(13,nod)
353 bbufs(l+4)=mtf(14,nod)
357 bbufs(l+1)=mtf(2,nod)
358 bbufs(l+2)=mtf(3,nod)
369 bbufs(l+3)=slvndtag(nod)
381 IF(iad_elem(1,p+1)-iad_elem(1,p)>0)
THEN
383 siz = iads(1+p)-iads(p)
386 s bbufs(l),siz,real,it_spmd(p),msgtyp,
387 g spmd_comm_world,req_si(p),ierror)
393 nb = iad_elem(1,p+1)-iad_elem(1,p)
395 CALL mpi_wait(req_ri(p),status,ierror)
397 DO j=iad_elem(1,p),iad_elem(1,p+1)-1
400 mtf(10,nod) = mtf(10,nod)+bbufr(l)
401 IF(bbufr(l+1) > abs(mtf(11,nod)))
THEN
402 mtf(11,nod) = bbufr(l+1)
404 ELSEIF(bbufr(l+1) == abs(mtf(11,nod)) .and.
407 mtf(11,nod) = abs(bbufr(l+1)*(1-em6))
409 mtf(12,nod) = mtf(12,nod)+bbufr(l+2)
410 mtf(13,nod) = mtf(13,nod)+bbufr(l+3)
411 mtf(14,nod) = mtf(14,nod)+bbufr(l+4)
414 mtf(1,nod)=mtf(1,nod)+bbufr(l)
415 mtf(2,nod)=mtf(2,nod)+bbufr(l+1)
416 mtf(3,nod)=mtf(3,nod)+bbufr(l+2)
438 siz=iads(p+1)-iads(p)
440 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)