41
42
43
46 USE intbufdef_mod
47
48
49
50 USE spmd_comm_world_mod, ONLY : spmd_comm_world
51#include "implicit_f.inc"
52
53
54#include "spmd.inc"
55
56
57
58#include "assert.inc"
59#include "param_c.inc"
60#include "com04_c.inc"
61#include "task_c.inc"
62#include "com01_c.inc"
63
64
65
66 INTEGER IPARI(NPARI,*),IAD_ELEM(2,*),FR_ELEM(*),
67 * ITAB(*),INTLIST(*),NBINTC,FLAG
68 integer
69 * iad_i25(nbintc+1,nspmd), sfr_i25,fr_i25(sfr_i25)
70
71 TYPE(INTBUF_STRUCT_) INTBUF_TAB(*)
72
73
74
75#ifdef MPI
76 INTEGER STATUS(MPI_STATUS_SIZE)
77 INTEGER ,LENSD,LENRV,IERROR,
78 * SIZ,LOC_PROC,MSGTYP,IDEB(NINTER),IDB,PROC,
79 * MSGOFF,MSGOFF2,MSGOFF3,MSGOFF4,MSGOFF5
80 INTEGER I,J,L,NB,NL,NN,K,N,NOD,MODE,LEN,ALEN,ND,FLG,NIN,NTY,
81 * NSN,SN,SSIZ,NBI,
82 * SURF,SURFR,SUBTRIAR,KLEAVE,KLEAVE_R,PROC_R,I_STOK,IT,CT,MS,
83 * NI,ILEN,RLEN,LI,LR
84
86 * time_s_1, time_s_2, time_sr_1, time_sr_2
88 * DIMENSION(:), ALLOCATABLE :: bbufs, bbufr,rrecbuf
90 * DIMENSION(:,:), ALLOCATABLE :: rsendbuf
91
92
93 INTEGER, DIMENSION(:,:), ALLOCATABLE :: ISENDBUF
94 INTEGER, DIMENSION(:), ALLOCATABLE :: IRECBUF
95 INTEGER, DIMENSION(:), ALLOCATABLE :: SNIDX
96 INTEGER, DIMENSION(:), ALLOCATABLE :: ITRI,INDTRI,ISCANDR
97 INTEGER, DIMENSION(:), ALLOCATABLE:: REQ_SI,REQ_RI,REQ_S,IADS
98 INTEGER, DIMENSION(:), ALLOCATABLE:: REQ_S2,REQ_R,REQ_R2,IADR
99
100 DATA msgoff/156/
101 DATA msgoff2/157/
102 DATA msgoff3/158/
103 DATA msgoff4/159/
104 DATA msgoff5/160/
105
106 SAVE iads,iadr,bbufs,bbufr,req_s,req_s2,
107 * req_si,req_r,req_r2,
108 * rrecbuf,irecbuf,rsendbuf,isendbuf,
109 * ilen,rlen,len,lensd,lenrv
110
111 loc_proc = ispmd+1
112
113
114
115 IF(flag==1)THEN
116
117 assert(.NOT.(ALLOCATED(req_si)))
118 assert(.NOT.(ALLOCATED(req_ri)))
119 assert(.NOT.(ALLOCATED(req_s)))
120 assert(.NOT.(ALLOCATED(req_s2)))
121 assert(.NOT.(ALLOCATED(req_r)))
122 assert(.NOT.(ALLOCATED(req_r2)))
123 assert(.NOT.(ALLOCATED(iadr)))
124 assert(.NOT.(ALLOCATED(iads)))
125
126 ALLOCATE(req_si(nspmd))
127 ALLOCATE(req_ri(nspmd))
128 ALLOCATE(req_s(nspmd))
129 ALLOCATE(req_s2(nspmd))
130 ALLOCATE(req_r(nspmd))
131 ALLOCATE(req_r2(nspmd))
132 ALLOCATE(iadr(nspmd+1))
133 ALLOCATE(iads(nspmd+1))
134
135
136
137
138
139
140
141
142
143
144
145
146 loc_proc = ispmd+1
147 iads(1:nspmd+1) = 0
148 iadr(1:nspmd+1) = 0
149 lensd = 0
150 lenrv = 0
151
152 alen=6
153
154
155
156 DO p=1,nspmd
157 iadr(p)=lenrv+1
158 DO ni=1,nbintc
159 nin = intlist(ni)
160 nty=ipari(7,nin)
161 IF(nty==25)THEN
162 lensd = lensd +
nsnfi(nin)%P(p)*alen
163 lenrv = lenrv +
nsnsi(nin)%P(p)*alen
164 ENDIF
165 ENDDO
166 ENDDO
167 iadr(nspmd+1)=lenrv+1
168
169
170 IF(lensd>0)THEN
171 ALLOCATE(bbufs(lensd),stat=ierror)
172 IF(ierror/=0) THEN
173 CALL ancmsg(msgid=20,anmode=aninfo)
175 ENDIF
176 ENDIF
177
178
179
180 IF(lenrv>0)THEN
181 ALLOCATE(bbufr(lenrv),stat=ierror)
182 IF(ierror/=0) THEN
183 CALL ancmsg(msgid=20,anmode=aninfo)
185 ENDIF
186 ENDIF
187
188 DO p=1, nspmd
189 siz=iadr(p+1)-iadr(p)
190 IF (siz > 0) THEN
191 msgtyp = msgoff2
192 CALL mpi_irecv( bbufr(iadr(p)),siz,real,it_spmd(p),msgtyp,
193 * spmd_comm_world,req_r(p),ierror )
194 ENDIF
195 ENDDO
196
197
198
199 l=1
200 ideb=0
201 DO p=1, nspmd
202 iads(p)=l
203 IF (p/= loc_proc) THEN
204 DO ni=1,nbintc
205 nin = intlist(ni)
206 nty =ipari(7,nin)
207 IF(nty==25) THEN
209 DO nn=1,nb
210 bbufs(l) =
irtlm_fi(nin)%P(1,nn+ideb(nin))
211 bbufs(l+1) =
irtlm_fi(nin)%P(2,nn+ideb(nin))
212 bbufs(l+2) =
irtlm_fi(nin)%P(3,nn+ideb(nin))
213 bbufs(l+3) =
irtlm_fi(nin)%P(4,nn+ideb(nin))
214 bbufs(l+4) =
time_sfi(nin)%P(2*(nn+ideb(nin)-1)+1)
215 bbufs(l+5) =
time_sfi(nin)%P(2*(nn+ideb(nin)-1)+2)
216 l=l+alen
217 ENDDO
218 ideb(nin)=ideb(nin)+nb
219 ENDIF
220 ENDDO
221 siz = l-iads(p)
222 IF(siz>0)THEN
223 msgtyp = msgoff2
225 . bbufs(iads(p)),siz,real ,it_spmd(p),msgtyp,
226 . spmd_comm_world,req_si(p),ierror )
227 ENDIF
228 ENDIF
229 ENDDO
230
231
232 RETURN
233 ENDIF
234
235
236
237
238 IF(flag==2)THEN
239
240 alen=6
241
242
243 l=0
244 ideb = 0
245
246 DO p=1, nspmd
247 l=0
248 siz=iadr(p+1)-iadr(p)
249 IF (siz > 0) THEN
250 msgtyp = msgoff2
251
252
253 CALL mpi_wait(req_r(p),status,ierror)
254
255 DO ni=1,nbintc
256 nin = intlist(ni)
257 nty =ipari(7,nin)
258
259 IF(nty==25)THEN
260
262 IF (nb > 0)THEN
263
264 DO k=1,nb
265 nd =
nsvsi(nin)%P(ideb(nin)+k)
266
267
268 sn = intbuf_tab(nin)%NSV(nd)
269 time_s_1 = intbuf_tab(nin)%TIME_S(2*(nd-1)+1)
270 time_s_2 = intbuf_tab(nin)%TIME_S(2*(nd-1)+2)
271 surf = intbuf_tab(nin)%IRTLM(4*(nd-1)+1)
272 kleave = intbuf_tab(nin)%IRTLM(4*(nd-1)+3)
273 surfr = nint(bbufr(iadr(p)+l))
274 subtriar = nint(bbufr(iadr(p)+l+1))
275 kleave_r = nint(bbufr(iadr(p)+l+2))
276 proc_r = nint(bbufr(iadr(p)+l+3))
277 time_sr_1 = bbufr(iadr(p)+l+4)
278 time_sr_2 = bbufr(iadr(p)+l+5)
279
280 IF(kleave == -1)THEN
281
282 ELSEIF(kleave_r == -1)THEN
283
284
285 intbuf_tab(nin)%IRTLM(4*(nd-1)+1) = 0
286 intbuf_tab(nin)%IRTLM(4*(nd-1)+2) = 0
287 intbuf_tab(nin)%IRTLM(4*(nd-1)+3) = -1
288 intbuf_tab(nin)%IRTLM(4*(nd-1)+4) = proc_r
289
290 ELSEIF (surf > 0)THEN
291
292 IF(time_s_1 == ep20)THEN
293
294 IF(surfr > 0 .AND. time_sr_1 /= ep20)THEN
295
296
297
298
299
300
301
302
303
304
305 intbuf_tab(nin)%IRTLM(4*(nd-1)+1) = surfr
306 intbuf_tab(nin)%IRTLM(4*(nd-1)+2) = subtriar
307 intbuf_tab(nin)%IRTLM(4*(nd-1)+3) = kleave_r
308 intbuf_tab(nin)%IRTLM(4*(nd-1)+4) = proc_r
309 intbuf_tab(nin)%TIME_S(2*(nd-1)+1) = time_sr_1
310 intbuf_tab(nin)%TIME_S(2*(nd-1)+2) = time_sr_2
311
312
313
314
315
316
317
318
319
320
321
322
323 END IF
324
325 ELSE
326
327 IF(surfr > 0 .AND. time_sr_1 /= ep20 .AND. time_sr_2 /= ep20)THEN
328
329 IF(time_s_2 == time_sr_2)THEN
330 IF(surfr > surf)THEN
331 intbuf_tab(nin)%IRTLM(4*(nd-1)+1) = surfr
332 intbuf_tab(nin)%IRTLM(4*(nd-1)+2) = subtriar
333 intbuf_tab(nin)%IRTLM(4*(nd-1)+3) = kleave_r
334 intbuf_tab(nin)%IRTLM(4*(nd-1)+4) = proc_r
335
336
337 END IF
338 ELSEIF(time_s_2 > time_sr_2)THEN
339 intbuf_tab(nin)%IRTLM(4*(nd-1)+1) = surfr
340 intbuf_tab(nin)%IRTLM(4*(nd-1)+2) = subtriar
341 intbuf_tab(nin)%IRTLM(4*(nd-1)+3) = kleave_r
342 intbuf_tab(nin)%IRTLM(4*(nd-1)+4) = proc_r
343
344 intbuf_tab(nin)%TIME_S(2*(nd-1)+2) = time_sr_2
345 END IF
346
347 END IF
348 END IF
349 ELSE
350 IF(surfr < 0)THEN
351 IF(time_s_1 == time_sr_1)THEN
352 IF(-surfr > -surf)THEN
353 intbuf_tab(nin)%IRTLM(4*(nd-1)+1) = surfr
354 intbuf_tab(nin)%IRTLM(4*(nd-1)+2) = subtriar
355 intbuf_tab(nin)%IRTLM(4*(nd-1)+3) = kleave_r
356 intbuf_tab(nin)%IRTLM(4*(nd-1)+4) = proc_r
357
358 END IF
359 ELSEIF(time_sr_1 > time_s_1)THEN
360 intbuf_tab(nin)%IRTLM(4*(nd-1)+1) = surfr
361 intbuf_tab(nin)%IRTLM(4*(nd-1)+2) = subtriar
362 intbuf_tab(nin)%IRTLM(4*(nd-1)+3) = kleave_r
363 intbuf_tab(nin)%IRTLM(4*(nd-1)+4) = proc_r
364 intbuf_tab(nin)%TIME_S(2*(nd-1)+1) = time_sr_1
365 END IF
366 END IF
367 END IF
368
369 l=l+alen
370
371
372 ENDDO
373 ENDIF
374 ideb(nin)=ideb(nin)+nb
375 ENDIF
376 ENDDO
377 ENDIF
378 l=l+siz
379 ENDDO
380
381
382 DO p = 1, nspmd
383 IF (p==nspmd)THEN
384 siz=lensd-iads(p)
385 ELSE
386 siz=iads(p+1)-iads(p
387 ENDIF
388 IF(siz>0) THEN
389 CALL mpi_wait(req_si(p),status,ierror)
390 ENDIF
391 ENDDO
392
393 IF (ALLOCATED(bbufs)) DEALLOCATE(bbufs)
394 IF (ALLOCATED(bbufr)) DEALLOCATE(bbufr)
395
396
397
398
399 iads(1:nspmd+1)=0
400
401 DO i=1,nspmd
402 assert(iad_i25(1,i) >= 0)
403 iads(i)=iad_i25(1,i)
404 ENDDO
405 iads(nspmd+1)=sfr_i25+1
406
407
408
409 ilen=5
410 rlen=2
411 assert(sfr_i25 >= 0)
412 ALLOCATE(isendbuf(ilen,sfr_i25))
413 ALLOCATE(irecbuf(ilen*sfr_i25))
414 ALLOCATE(rsendbuf(rlen,sfr_i25))
415 ALLOCATE(rrecbuf(rlen*sfr_i25))
416
417
418 DO p=1,nspmd
419 siz = iads(p+1)-iads(p)
420 assert(siz >= 0)
421 IF(siz/=0)THEN
422 li = (iads(p)-1)*ilen+1
423 lr = (iads(p)-1)*rlen+1
424 msgtyp = msgoff3
425 len = siz*ilen
426
428 s irecbuf(li),len,mpi_integer,it_spmd(p),msgtyp,
429 g spmd_comm_world,req_r(p),ierror)
430
431 msgtyp = msgoff4
432 len = siz*rlen
433
435 s rrecbuf(lr),len,real,it_spmd(p),msgtyp,
436 g spmd_comm_world,req_r2(p),ierror)
437
438 ENDIF
439 ENDDO
440
441 nb = 1
442 DO p = 1, nspmd
443 DO ni=1,nbintc
444 nin=intlist(ni)
445 nty = ipari(7,nin)
446 nsn = ipari(5,nin)
447 IF(nty==25) THEN
448
449 DO i=iad_i25(ni,p),iad_i25(ni+1,p)-1
450
451 nd = fr_i25(i)
452 assert(nd > 0)
453 assert(nd <= nsn)
454 sn = intbuf_tab(nin)%NSV(nd)
455
456 isendbuf(1,nb) = itab(sn)
457 isendbuf(2,nb) = intbuf_tab(nin)%IRTLM(4*(nd-1)+1)
458 isendbuf(3,nb) = intbuf_tab(nin)%IRTLM(4*(nd-1)+2)
459 isendbuf(4,nb) = intbuf_tab(nin)%IRTLM(4*(nd-1)+3)
460 isendbuf(5,nb) = intbuf_tab(nin)%IRTLM(4*(nd-1)+4)
461 rsendbuf(1,nb) = intbuf_tab(nin)%TIME_S(2*(nd-1)+1)
462 rsendbuf(2,nb) = intbuf_tab(nin)%TIME_S(2*(nd-1)+2)
463 nb=nb+1
464 ENDDO
465 ENDIF
466 ENDDO
467 ENDDO
468
469
470
471
472 DO p=1,nspmd
473 siz = iads(p+1) - iads(p)
474 IF (siz >0)THEN
475 msgtyp = msgoff3
476 l = iads(p)
478 s isendbuf(1,l),siz*ilen,mpi_integer,it_spmd(p),msgtyp,
479 g spmd_comm_world,req_s(p),ierror)
480
481
482 msgtyp = msgoff4
484 s rsendbuf(1,l),siz*rlen,real,it_spmd(p),msgtyp,
485 g spmd_comm_world,req_s2(p),ierror)
486
487 ENDIF
488 ENDDO
489
490
491 RETURN
492 ENDIF
493
494
495
496
497 IF(flag==3)THEN
498
499 ilen = 5
500 rlen = 2
501
502 DO p=1,nspmd
503 siz = iads(p+1)-iads(p)
504 IF(siz/=0)THEN
505 idb = iads(p)
506 CALL mpi_wait(req_r(p),status,ierror)
507
508
509 CALL mpi_wait(req_r2(p),status,ierror)
510
511
512
513
514 DO ni=1,nbintc
515 nin = intlist(ni)
516
517 nty = ipari(7,nin)
518 nsn = ipari(5,nin)
519 IF (nty == 25)THEN
520
521 DO k=iad_i25(ni,p),iad_i25(ni+1,p)-1
522 nd = fr_i25(k)
523 sn = intbuf_tab(nin)%NSV(nd)
524
525 time_s_1 = intbuf_tab(nin)%TIME_S(2*(nd-1)+1)
526 time_s_2 = intbuf_tab(nin)%TIME_S(2*(nd-1)+2)
527 surf = intbuf_tab(nin)%IRTLM(4*(nd-1)+1)
528 kleave = intbuf_tab(nin)%IRTLM(4*(nd-1)+3)
529 surfr = irecbuf((idb-1)*ilen+2)
530 subtriar = irecbuf((idb-1)*ilen+3)
531 kleave_r = irecbuf((idb-1)*ilen+4)
532 proc_r = irecbuf((idb-1)*ilen+5)
533 time_sr_1 = rrecbuf((idb-1)*rlen+1)
534 time_sr_2 = rrecbuf((idb-1)*rlen+2)
535
536
537 IF(kleave == -1)THEN
538
539 ELSEIF(kleave_r == -1)THEN
540
541
542 intbuf_tab(nin)%IRTLM(4*(nd-1)+1) = 0
543 intbuf_tab(nin)%IRTLM(4*(nd-1)+2) = 0
544 intbuf_tab(nin)%IRTLM(4*(nd-1)+3) = -1
545 intbuf_tab(nin)%IRTLM(4*(nd-1)+4) = proc_r
546
547 ELSEIF (surf > 0)THEN
548
549 IF(time_s_1 == ep20)THEN
550
551 IF(surfr > 0 .AND. time_sr_1 /= ep20)THEN
552
553
554
555
556
557
558
559
560
561
562 intbuf_tab(nin)%IRTLM(4*(nd-1)+1) = surfr
563 intbuf_tab(nin)%IRTLM(4*(nd-1)+2) = subtriar
564 intbuf_tab(nin)%IRTLM(4*(nd-1)+3) = kleave_r
565 intbuf_tab(nin)%IRTLM(4*(nd-1)+4) = proc_r
566 intbuf_tab(nin)%TIME_S(2*(nd-1)+1) = time_sr_1
567 intbuf_tab(nin)%TIME_S(2*(nd-1)+2) = time_sr_2
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583 END IF
584
585 ELSE
586
587 IF(surfr > 0 .AND. time_sr_1 /= ep20 .AND. time_sr_2 /= ep20)THEN
588
589 IF(time_s_2 == time_sr_2)THEN
590 IF(surfr > surf)THEN
591 intbuf_tab(nin)%IRTLM(4*(nd-1)+1) = surfr
592 intbuf_tab(nin)%IRTLM(4*(nd-1)+2) = subtriar
593 intbuf_tab(nin)%IRTLM(4*(nd-1)+3) = kleave_r
594 intbuf_tab(nin)%IRTLM(4*(nd-1)+4) = proc_r
595
596
597 END IF
598 ELSEIF(abs(time_s_2) > abs(time_sr_2))THEN
599 intbuf_tab(nin)%IRTLM(4*(nd-1)+1) = surfr
600 intbuf_tab(nin)%IRTLM(4*(nd-1)+2) = subtriar
601 intbuf_tab(nin)%IRTLM(4*(nd-1)+3) = kleave_r
602 intbuf_tab(nin)%IRTLM(4*(nd-1)+4) = proc_r
603
604 intbuf_tab(nin)%TIME_S(2*(nd-1)+2) = time_sr_2
605 END IF
606 END IF
607
608 END IF
609
610 ELSE
611
612 IF(surfr < 0)THEN
613 IF(time_s_1 == time_sr_1)THEN
614 IF(-surfr > -surf)THEN
615 intbuf_tab(nin)%IRTLM(4*(nd-1)+1) = surfr
616 intbuf_tab(nin)%IRTLM(4*(nd-1)+2) = subtriar
617 intbuf_tab(nin)%IRTLM(4*(nd-1)+3) = kleave_r
618 intbuf_tab(nin)%IRTLM(4*(nd-1)+4) = proc_r
619
620 END IF
621 ELSEIF(time_sr_1 > time_s_1)THEN
622 intbuf_tab(nin)%IRTLM(4*(nd-1)+1) = surfr
623 intbuf_tab(nin)%IRTLM(4*(nd-1)+2) = subtriar
624 intbuf_tab(nin)%IRTLM(4*(nd-1)+3) = kleave_r
625 intbuf_tab(nin)%IRTLM(4*(nd-1)+4) = proc_r
626 intbuf_tab(nin)%TIME_S(2*(nd-1)+1) = time_sr_1
627 END IF
628 END IF
629
630 END IF
631
632
633
634 idb=idb+1
635 ENDDO
636 ENDIF
637 ENDDO
638 ENDIF
639 ENDDO
640
641
642 DO p=1,nspmd
643 siz = iads(p+1)-iads(p)
644 IF(siz/=0)THEN
645 CALL mpi_wait(req_s(p),status,ierror)
646 CALL mpi_wait(req_s2(p),status,ierror)
647 ENDIF
648 ENDDO
649
650 IF(ALLOCATED(isendbuf))DEALLOCATE(isendbuf)
651 IF(ALLOCATED(irecbuf))DEALLOCATE(irecbuf)
652 IF(ALLOCATED(rsendbuf))DEALLOCATE(rsendbuf)
653 IF(ALLOCATED(rrecbuf))DEALLOCATE(rrecbuf)
654
655
656
657
658 loc_proc = ispmd+1
659 iads = 0
660 iadr = 0
661 lensd = 0
662 lenrv = 0
663
664 alen=6
665
666 DO p=1,nspmd
667 iadr(p)=lenrv+1
668 DO ni=1,nbintc
669 nin = intlist(ni)
670 nty=ipari(7,nin)
671 IF(nty==25) THEN
672 lensd = lensd +
nsnsi(nin)%P(p)*alen
673 lenrv = lenrv +
nsnfi(nin)%P(p)*alen
674 ENDIF
675 ENDDO
676 ENDDO
677 iadr(nspmd+1)=lenrv+1
678
679 IF(lensd>0)THEN
680 ALLOCATE(bbufs(lensd),stat=ierror)
681 IF(ierror/=0) THEN
682 CALL ancmsg(msgid=20,anmode=aninfo)
684 ENDIF
685 ENDIF
686
687
688 IF(lenrv>0)THEN
689 ALLOCATE(bbufr(lenrv),stat=ierror)
690 IF(ierror/=0) THEN
691 CALL ancmsg(msgid=20,anmode=aninfo)
693 ENDIF
694 ENDIF
695
696
697 DO p=1, nspmd
698 siz=iadr(p+1)-iadr(p)
699 IF (siz > 0) THEN
700 msgtyp = msgoff5
701 CALL mpi_irecv( bbufr(iadr(p)),siz,real,it_spmd(p),msgtyp,
702 * spmd_comm_world,req_r(p),ierror )
703 ENDIF
704 ENDDO
705
706
707 l=1
708 ideb = 0
709 DO p=1, nspmd
710 iads(p)=l
711 IF (p/= loc_proc) THEN
712 DO ni=1,nbintc
713 nin = intlist(ni)
714 nty =ipari(7,nin)
715 IF(nty==25)THEN
717
718 DO nn=1,nb
719 nd =
nsvsi(nin)%P(ideb(nin)+nn)
720 nod=intbuf_tab(nin)%NSV(nd)
721
722 bbufs(l )=intbuf_tab(nin)%IRTLM(4*(nd-1)+1)
723 bbufs(l+1)=intbuf_tab(nin)%IRTLM(4*(nd-1)+2)
724 bbufs(l+2)=intbuf_tab(nin)%IRTLM(4*(nd-1)+3)
725 bbufs(l+3)=intbuf_tab(nin)%IRTLM(4*(nd-1)+4)
726 bbufs(l+4)=intbuf_tab(nin)%TIME_S(2*(nd-1)+1)
727 bbufs(l+5)=intbuf_tab(nin)%TIME_S(2*(nd-1)+2)
728 l = l + alen
729 ENDDO
730 ideb(nin)=ideb(nin)+nb
731 ENDIF
732 ENDDO
733
734 siz = l-iads(p)
735 IF(siz>0)THEN
736 msgtyp = msgoff5
737
739 . bbufs(iads(p)),siz,real ,it_spmd(p),msgtyp,
740 . spmd_comm_world,req_si(p),ierror )
741 ENDIF
742 ENDIF
743 ENDDO
744 iads(nspmd+1)=l
745
746 RETURN
747 ENDIF
748
749
750
751
752 IF(flag==4)THEN
753
754 alen=6
755
756 l=0
757 ideb = 0
758
759 DO p=1, nspmd
760 l=0
761 siz=iadr(p+1)-iadr(p)
762 IF (siz > 0) THEN
763
764 CALL mpi_wait(req_r(p),status,ierror)
765 DO ni=1,nbintc
766 nin=intlist(ni)
767 nty =ipari(7,nin)
768
769 IF(nty==25) THEN
771
772 IF (nb > 0)THEN
773 DO k=1,nb
774
775
776 irtlm_fi(nin)%P(1,ideb(nin)+k)=bbufr(iadr(p)+l)
777 irtlm_fi(nin)%P(2,ideb(nin)+k)=bbufr(iadr(p)+l+1)
778 irtlm_fi(nin)%P(3,ideb(nin)+k)=bbufr(iadr(p)+l+2)
779 irtlm_fi(nin)%P(4,ideb(nin)+k)=bbufr(iadr(p)+l+3)
780 time_sfi(nin)%P(2*(ideb(nin)+k-1)+1) =bbufr(iadr(p)+l+4)
781 time_sfi(nin)%P(2*(ideb(nin)+k-1)+2) =bbufr(iadr(p)+l+5)
782 l=l+alen
783 ENDDO
784 ENDIF
785 ideb(nin)=ideb(nin)+nb
786 ENDIF
787 ENDDO
788 ENDIF
789 ENDDO
790
791
792 DO p = 1, nspmd
793 IF (p==nspmd)THEN
794 siz=lensd-iads(p)
795 ELSE
796 siz=iads(p+1)-iads(p)
797 ENDIF
798 IF(siz>0) THEN
799 CALL mpi_wait(req_si(p),status,ierror)
800 ENDIF
801 ENDDO
802
803
804
805 IF(ALLOCATED(bbufs)) DEALLOCATE(bbufs)
806 IF(ALLOCATED(bbufr)) DEALLOCATE(bbufr)
807 IF(ALLOCATED( req_si )) DEALLOCATE(req_si)
808 IF(ALLOCATED( req_ri )) DEALLOCATE(req_ri)
809 IF(ALLOCATED( req_s )) DEALLOCATE(req_s)
810 IF(ALLOCATED( req_s2 )) DEALLOCATE(req_s2)
811 IF(ALLOCATED( req_r )) DEALLOCATE(req_r)
812 IF(ALLOCATED( req_r2 )) DEALLOCATE(req_r2)
813 IF(ALLOCATED( iadr )) DEALLOCATE(iadr)
814 IF(ALLOCATED( iads )) DEALLOCATE(iads)
815
816 ENDIF
817#endif
818 RETURN
subroutine mpi_isend(buf, cnt, datatype, dest, tag, comm, ireq, ierr)
subroutine mpi_wait(ireq, status, ierr)
subroutine mpi_irecv(buf, cnt, datatype, source, tag, comm, ireq, ierr)
type(real_pointer), dimension(:), allocatable time_sfi
type(int_pointer2), dimension(:), allocatable irtlm_fi
type(int_pointer), dimension(:), allocatable nsvsi
type(int_pointer), dimension(:), allocatable nsnsi
type(int_pointer), dimension(:), allocatable nsnfi
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)