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 "param_c.inc"
59#include "com04_c.inc"
60#include "task_c.inc"
61#include "com01_c.inc"
62#include "spmd_c.inc"
63#include "impl1_c.inc"
64
65
66
67 INTEGER IPARI(NPARI,*),IAD_ELEM(2,*),FR_ELEM(*),
68 * ITAB(*),INTLIST(*),NBINTC,FLAG,I24MAXNSNE,INT24E2EUSE
69 integer
70 * iad_i24(nbintc+1,*), sfr_i24,fr_i24(*)
71
72 TYPE(INTBUF_STRUCT_) INTBUF_TAB(*)
73
74
75
76#ifdef MPI
77 INTEGER STATUS(MPI_STATUS_SIZE),
78 * REQ_SI(PARASIZ),REQ_S(PARASIZ),
79 * REQ_S2(PARASIZ),REQ_R(PARASIZ),REQ_R2(PARASIZ)
80 INTEGER P,LENSD,LENRV,IADS(PARASIZ+1),IADR(PARASIZ+1),IERROR,
81 * SIZ,LOC_PROC,MSGTYP,IDEB(NINTER),IDB,
82 * MSGOFF,MSGOFF2,MSGOFF3,MSGOFF4,MSGOFF5
83 INTEGER I, L, NB, NN, K, N, NOD, LEN, ALEN, ND, NIN, NTY,
84 * NSN,SN,NSI,IEDG4,
85 * SURF,SURFR,I_STOK,MS,NSNR,
86 * NI,ILEN,RLEN,LI,LR,IGSTI
87
89 * send_pmax(ninter),time_s,time_sr
91 * DIMENSION(:), ALLOCATABLE :: bbufs, bbufr,rrecbuf
93 * DIMENSION(:,:), ALLOCATABLE :: rsendbuf
94
95
96 INTEGER, DIMENSION(:,:), ALLOCATABLE :: ISENDBUF
97 INTEGER, DIMENSION(:), ALLOCATABLE :: IRECBUF
98
99 INTEGER, DIMENSION(:), ALLOCATABLE :: ISCAND
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 alen=10
112 loc_proc = ispmd+1
113 send_pmax(1:ninter)=0
114
115
116 ilen = 4
117 rlen = 8
118
119 IF(nspmd == 1)RETURN
120
121
122
123
124 IF(flag==1)THEN
125
126
127
128
129 ALLOCATE(iscand(numnod+i24maxnsne))
130 iscand(1:numnod+i24maxnsne)=0
131 DO ni=1,nbintc
132 nin = intlist(ni)
133 nty = ipari( 7,nin)
134 nsn = ipari( 5,nin)
135 nsnr = ipari( 24,nin)
136 iedg4 = ipari(59,nin)
137 IF(nty==24)THEN
138 i_stok = intbuf_tab(nin)%I_STOK(1)
139 DO i=1,i_stok
140 n = intbuf_tab(nin)%CAND_N(i)
141 IF(n<=nsn)THEN
142 sn = intbuf_tab(nin)%NSV(n)
143 iscand(sn)=1
144 ms = intbuf_tab(nin)%CAND_E(i)
145 ENDIF
146 ENDDO
147 DO i=1,nsn
148 n = intbuf_tab(nin)%NSV(i)
149 IF (iscand(n)==0)THEN
150 intbuf_tab(nin)%TIME_S(i) = zero
151 intbuf_tab(nin)%IRTLM(2*(i-1)+1) = 0
152 iscand(n)=0
153 ENDIF
154 ENDDO
155 IF(iedg4 >0)THEN
156 DO i=1,nsnr
160 ENDIF
161 ENDDO
162 ENDIF
163 ENDIF
164 ENDDO
165
166
167
168
169
170
171
172
173
174
175
176
177 loc_proc = ispmd+1
178 iads(1:nspmd+1) = 0
179 iadr(1:nspmd+1) = 0
180 lensd = 0
181 lenrv = 0
182
183 alen=10
184
185
186
187 DO p=1,nspmd
188 iadr(p)=lenrv+1
189 DO ni=1,nbintc
190 nin = intlist(ni)
191 nty=ipari(7,nin)
192 IF(nty==24)THEN
193 lensd = lensd +
nsnfi(nin)%P(p)*alen
194 lenrv = lenrv +
nsnsi(nin)%P(p)*alen
195 ENDIF
196 ENDDO
197 ENDDO
198 iadr(nspmd+1)=lenrv+1
199
200
201 IF(lensd>0)THEN
202 ALLOCATE(bbufs(lensd),stat=ierror)
203 IF(ierror/=0) THEN
204 CALL ancmsg(msgid=20,anmode=aninfo)
206 ENDIF
207 ENDIF
208
209
210
211 IF(lenrv>0)THEN
212 ALLOCATE(bbufr(lenrv),stat=ierror)
213 IF(ierror/=0) THEN
214 CALL ancmsg(msgid=20,anmode=aninfo)
216 ENDIF
217 ENDIF
218
219 DO p=1, nspmd
220 siz=iadr(p+1)-iadr(p)
221 IF (siz > 0) THEN
222 msgtyp = msgoff2
223 CALL mpi_irecv( bbufr(iadr(p)),siz,real,it_spmd(p),msgtyp,
224 * spmd_comm_world,req_r(p),ierror )
225 ENDIF
226 ENDDO
227
228
229
230 l=1
231 ideb=0
232 DO p=1, nspmd
233 iads(p)=l
234 IF (p/= loc_proc) THEN
235 DO ni=1,nbintc
236 nin = intlist(ni)
237 nty =ipari(7,nin)
238 IF(nty==24) THEN
240 DO nn=1,nb
241 bbufs(l)=
irtlm_fi(nin)%P(1,nn+ideb(nin))
242 bbufs(l+1)=
irtlm_fi(nin)%P(2,nn+ideb(nin))
243 bbufs(l+2)=
time_sfi(nin)%P(nn+ideb(nin))
251 l=l+10
252 ENDDO
253 ideb(nin)=ideb(nin)+nb
254 ENDIF
255 ENDDO
256 siz = l-iads(p)
257 IF(siz>0)THEN
258 msgtyp = msgoff2
260 . bbufs(iads(p)),siz,real ,it_spmd(p),msgtyp,
261 . spmd_comm_world,req_si(p),ierror )
262 ENDIF
263 ENDIF
264 ENDDO
265
266
267 RETURN
268 ENDIF
269
270
271
272
273 IF(flag==2)THEN
274
275
276 l=0
277 ideb = 0
278
279 DO p=1, nspmd
280 l=0
281 siz=iadr(p+1)-iadr(p)
282 IF (siz > 0) THEN
283 msgtyp = msgoff2
284
285
286 CALL mpi_wait(req_r(p),status,ierror)
287
288 DO ni=1,nbintc
289 nin = intlist(ni)
290 nty =ipari(7,nin)
291
292 IF(nty==24)THEN
293
295 IF (nb > 0)THEN
296
297 DO k=1,nb
298 nd =
nsvsi(nin)%P(ideb(nin)+k)
299
300
301 sn = intbuf_tab(nin)%NSV(nd)
302 time_s = intbuf_tab(nin)%TIME_S(nd)
303 surf = intbuf_tab(nin)%IRTLM(2*(nd-1)+1)
304 surfr = bbufr(iadr(p)+l)
305 time_sr = bbufr(iadr(p)+l+2)
306
307 IF (bbufr(iadr(p)+l)==0
308 * .AND.bbufr(iadr(p)+l+2)==zero) THEN
309
310
311 ELSEIF (intbuf_tab(nin)%IRTLM(2*(nd-1)+1) == 0
312 * .AND. intbuf_tab(nin)%TIME_S(nd) ==zero)THEN
313
314 intbuf_tab(nin)%IRTLM(2*(nd-1)+1) = bbufr(iadr(p)+l)
315 intbuf_tab(nin)%IRTLM(2*(nd-1)+2) = bbufr(iadr(p)+l+1)
316 intbuf_tab(nin)%TIME_S(nd) = bbufr(iadr(p)+l+2)
317
318 ELSEIF (time_s==-ep20 .AND. surf == 0)THEN
319 intbuf_tab(nin)%IRTLM(2*(nd-1)+1) = 0
320 intbuf_tab(nin)%IRTLM(2*(nd-1)+2) = 0
321 intbuf_tab(nin)%TIME_S(nd) = -ep20
322
323 ELSEIF (time_sr==-ep20 .AND. surfr == 0)THEN
324 intbuf_tab(nin)%IRTLM(2*(nd-1)+1) = 0
325 intbuf_tab(nin)%IRTLM(2*(nd-1)+2) = 0
326 intbuf_tab(nin)%TIME_S(nd) = -ep20
327 ELSEIF (time_s==-ep20 .AND. surf == 0)THEN
328
329 ELSEIF( surfr > 0 .AND. time_sr==-ep20 .AND.
330 * surf > 0 .AND. time_s==-ep20 )THEN
331
332
333 IF (surfr > surf)THEN
334 intbuf_tab(nin)%IRTLM(2*(nd-1)+1) = bbufr(iadr(p)+l)
335 intbuf_tab(nin)%IRTLM(2*(nd-1)+2) = bbufr(iadr(p)+l+1)
336 intbuf_tab(nin)%TIME_S(nd) = bbufr(iadr(p)+l+2)
337 ENDIF
338 ELSEIF(surfr > 0 .AND. time_sr==-ep20)THEN
339 intbuf_tab(nin)%IRTLM(2*(nd-1)+1) = bbufr(iadr(p)+l)
340 intbuf_tab(nin)%IRTLM(2*(nd-1)+2) = bbufr(iadr(p)+l+1)
341 intbuf_tab(nin)%TIME_S(nd) = -ep20
342
343 ELSEIF(surf > 0 .AND. time_s==-ep20)THEN
344
345 ELSEIF(surfr < 0)THEN
346 IF (time_sr == time_s) THEN
347 IF (abs(surfr) > abs(surf))THEN
348 intbuf_tab(nin)%IRTLM(2*(nd-1)+1) = bbufr(iadr(p)+l)
349 intbuf_tab(nin)%IRTLM(2*(nd-1)+2)=
350 * bbufr(iadr(p)+l+1)
351 intbuf_tab(nin)%TIME_S(nd) = bbufr(iadr(p)+l+2)
352 ENDIF
353 ELSEIF (time_s <= time_sr ) THEN
354 intbuf_tab(nin)%IRTLM(2*(nd-1)+1) =
355 * bbufr(iadr(p)+l)
356 intbuf_tab(nin)%IRTLM(2*(nd-1)+2)= int(bbufr(iadr(p)+l+1))
357 intbuf_tab(nin)%TIME_S(nd) = bbufr(iadr(p)+l+2)
358 ENDIF
359 ENDIF
360
361
362 IF(abs(bbufr(iadr(p)+l+3)) >
363 * abs(intbuf_tab(nin)%SECND_FR(6*(nd-1)+1)))
364 * intbuf_tab(nin)%SECND_FR(6*(nd-1)+1) = bbufr(iadr(p)+l+3)
365
366 IF(abs(bbufr(iadr(p)+l+4)) >
367 * abs(intbuf_tab(nin)%SECND_FR(6*(nd-1)+2)))
368 * intbuf_tab(nin)%SECND_FR(6*(nd-1)+2) = bbufr(iadr(p)+l+4)
369
370 IF(abs(bbufr(iadr(p)+l+5)) >
371 * abs(intbuf_tab(nin)%SECND_FR(6*(nd-1)+3)))
372 * intbuf_tab(nin)%SECND_FR(6*(nd-1)+3) = bbufr(iadr(p)+l+5)
373
374
375 IF(bbufr(iadr(p)+l+3)==-intbuf_tab(nin)%SECND_FR(6*(nd-1)+1) )
376 * intbuf_tab(nin)%SECND_FR(6*(nd-1)+1) = abs(bbufr(iadr(p)+l+3))
377
378 IF(bbufr(iadr(p)+l+4)==-intbuf_tab(nin)%SECND_FR(6*(nd-1)+2) )
379 * intbuf_tab(nin)%SECND_FR(6*(nd-1)+2) = abs(bbufr(iadr(p)+l+4))
380
381 IF(bbufr(iadr(p)+l+5)==-intbuf_tab(nin)%SECND_FR(6*(nd-1)+3) )
382 * intbuf_tab(nin)%SECND_FR(6*(nd-1)+3) = abs(bbufr(iadr(p)+l+5))
383
384
385
386
387
388
389 intbuf_tab(nin)%PENE_OLD(5*(nd-1)+1)=
max(intbuf_tab(nin)%PENE_OLD(5*(nd-1)+1),
390 * bbufr(iadr(p)+l+6) )
391 intbuf_tab(nin)%PENE_OLD(5*(nd-1)+3)=
392 *
max(intbuf_tab(nin)%PENE_OLD(5*(nd-1)+3),
393 * bbufr(iadr(p)+l+8) )
394
395 intbuf_tab(nin)%PENE_OLD(5*(nd-1)+5)=
396 *
max(intbuf_tab(nin)%PENE_OLD(5*(nd-1)+5),
397 * bbufr(iadr(p)+l+9) )
398
399
400
401
402
403 intbuf_tab(nin)%STIF_OLD(2*(nd-1)+1)=
max(intbuf_tab(nin)%STIF_OLD(2*(nd-1)+1),
404 * bbufr(iadr(p)+l+7) )
405
406 l=l+10
407 ENDDO
408 ENDIF
409 ENDIF
410 ideb(nin)=ideb(nin)+nb
411 ENDDO
412 ENDIF
413 l=l+siz
414 ENDDO
415
416
417 DO p = 1, nspmd
418 IF (p==nspmd)THEN
419 siz=lensd-iads(p)
420 ELSE
421 siz=iads(p+1)-iads(p)
422 ENDIF
423 IF(siz>0) THEN
424 CALL mpi_wait(req_si(p),status,ierror)
425 ENDIF
426 ENDDO
427
428 IF (ALLOCATED(bbufs)) DEALLOCATE(bbufs)
429 IF (ALLOCATED(bbufr)) DEALLOCATE(bbufr)
430
431
432
433
434
435
436
437
438
439
440
441
442
443 IF(int24e2euse == 1)THEN
444 DO ni=1,nbintc
445 nin = intlist(ni)
446 nty = ipari(7,nin)
447 iedg4 = ipari(59,nin)
448 IF(nty==24 .AND. iedg4 > 0)THEN
449 nsn = ipari(5,nin)
450 DO sn=1,nsn
451
452 intbuf_tab(nin)%ISPT2(sn)=0
453 nsi = intbuf_tab(nin)%ISEGPT(sn)
454 nd=intbuf_tab(nin)%NSV(sn)
455 IF(nsi > 0)THEN
456 IF(intbuf_tab(nin)%IRTLM(2*(nsi-1)+1) /= 0)THEN
457 intbuf_tab(nin)%ISPT2(sn) = 0
458 ELSE
459 intbuf_tab(nin)%ISPT2(sn) = 1
460 ENDIF
461 ELSEIF(nsi<0)THEN
462 intbuf_tab(nin)%ISPT2(sn) = 1
463 ENDIF
464 ENDDO
465 ENDIF
466 ENDDO
467 ENDIF
468
469
470
471
472 len=3
473 iads(1:nspmd+1)=0
474
475 DO i=1,nspmd
476 iads(i)=iad_i24(1,i)
477 ENDDO
478 iads(nspmd+1)=sfr_i24+1
479
480 ilen=4
481 rlen=8
482 ALLOCATE(isendbuf(4,sfr_i24))
483 ALLOCATE(irecbuf(ilen*sfr_i24))
484 ALLOCATE(rsendbuf(8,sfr_i24))
485 ALLOCATE(rrecbuf(rlen*sfr_i24))
486
487
488 DO p=1,nspmd
489 siz = iads(p+1)-iads(p)
490 IF(siz/=0)THEN
491 li = (iads(p)-1)*ilen+1
492 lr = (iads(p)-1)*rlen+1
493 msgtyp = msgoff3
494 len = siz*4
496 s irecbuf(li),len,mpi_integer,it_spmd(p),msgtyp,
497 g spmd_comm_world,req_r(p),ierror)
498
499 msgtyp = msgoff4
500 len = siz*8
502 s rrecbuf(lr),len,real,it_spmd(p),msgtyp,
503 g spmd_comm_world,req_r2(p),ierror)
504
505 ENDIF
506 ENDDO
507
508 nb = 1
509 DO p = 1, nspmd
510 DO ni=1,nbintc
511 nin=intlist(ni)
512 nty = ipari(7,nin)
513 nsn = ipari(5,nin)
514 iedg4 = ipari(59,nin)
515 IF(nty==24) THEN
516
517 DO i=iad_i24(ni,p),iad_i24(ni+1,p)-1
518
519 nd = fr_i24(i)
520 sn = intbuf_tab(nin)%NSV(nd)
521
522 isendbuf(1,nb)=itab(sn)
523 isendbuf(2,nb)=intbuf_tab(nin)%IRTLM(2*(nd-1)+1)
524 isendbuf(3,nb)=intbuf_tab(nin)%IRTLM(2*(nd-1)+2)
525 IF(iedg4 > 0) THEN
526 isendbuf(4,nb)= intbuf_tab(nin)%ISPT2(nd)
527 ELSE
528 isendbuf(4,nb)=0
529 ENDIF
530 rsendbuf(1,nb) = intbuf_tab(nin)%TIME_S(nd)
531 rsendbuf(2,nb) = intbuf_tab(nin)%SECND_FR(6*(nd-1)+1)
532 rsendbuf(3,nb) = intbuf_tab(nin)%SECND_FR(6*(nd-1)+2)
533 rsendbuf(4,nb) = intbuf_tab(nin)%SECND_FR(6*(nd-1)+3)
534 rsendbuf(5,nb) = intbuf_tab(nin)%PENE_OLD(5*(nd-1)+1)
535 rsendbuf(6,nb) = intbuf_tab(nin)%PENE_OLD(5*(nd-1)+3)
536 rsendbuf(8,nb) = intbuf_tab(nin)%PENE_OLD(5*(nd-1)+5)
537 rsendbuf(7,nb) = intbuf_tab(nin)%STIF_OLD(2*(nd-1)+1)
538 nb=nb+1
539 ENDDO
540 ENDIF
541 ENDDO
542 ENDDO
543
544
545
546
547 DO p=1,nspmd
548 siz = iads(p+1) - iads(p)
549 IF (siz >0)THEN
550 msgtyp = msgoff3
551 l = iads(p)
553 s isendbuf(1,l),siz*4,mpi_integer,it_spmd(p),msgtyp,
554 g spmd_comm_world,req_s(p),ierror)
555
556 msgtyp = msgoff4
558 s rsendbuf(1,l),siz*8,real,it_spmd(p),msgtyp,
559 g spmd_comm_world,req_s2(p),ierror)
560 ENDIF
561 ENDDO
562
563 i24com3 = 1
564
565 RETURN
566 ENDIF
567
568
569
570
571 IF(flag==3)THEN
572
573 IF(i24com3==0)RETURN
574
575
576 DO p=1,nspmd
577 siz = iads(p+1)-iads(p)
578 IF(siz/=0)THEN
579 idb = iads(p)
580 CALL mpi_wait(req_r(p),status,ierror)
581
582 CALL mpi_wait(req_r2(p),status,ierror)
583
584
585
586 DO ni=1,nbintc
587 nin = intlist(ni)
588
589 nty = ipari(7,nin)
590 nsn = ipari(5,nin)
591 iedg4 = ipari(59,nin)
592 IF (nty == 24)THEN
593
594 DO k=iad_i24(ni,p),iad_i24(ni+1,p)-1
595 sn = fr_i24(k)
596 time_s = intbuf_tab(nin)%TIME_S(sn)
597 surf = intbuf_tab(nin)%IRTLM(2*(sn-1)+1)
598 surfr = irecbuf(2+(idb-1)*ilen)
599 time_sr = rrecbuf(1+(idb-1)*rlen)
600 IF (time_sr==0 .AND. surfr==0)THEN
601
602
603 ELSEIF (time_s==0 .AND.surf==0)THEN
604
605 intbuf_tab(nin)%TIME_S(sn) = time_sr
606 intbuf_tab(nin)%IRTLM(2*(sn-1)+1) = irecbuf(2+(idb-1)*ilen)
607 intbuf_tab(nin)%IRTLM(2*(sn-1)+2) = irecbuf(3+(idb-1)*ilen)
608
609
610
611 ELSEIF( time_s == -ep20 .AND. surf == 0)THEN
612
613
614 ELSEIF( surfr == 0 .AND. time_sr == -ep20)THEN
615 intbuf_tab(nin)%TIME_S(sn) = -ep20
616 intbuf_tab(nin)%IRTLM(2*(sn-1)+1) = irecbuf(2+(idb-1)*ilen)
617 intbuf_tab(nin)%IRTLM(2*(sn-1)+2) = irecbuf(3+(idb-1)*ilen)
618
619 ELSEIF( surfr > 0 .AND. time_sr==-ep20 .AND.
620 * surf > 0 .AND. time_s==-ep20)THEN
621
622
623 IF (surfr > surf)THEN
624 intbuf_tab(nin)%IRTLM(2*(sn-1)+1) = irecbuf(2+(idb-1)*ilen)
625 intbuf_tab(nin)%IRTLM(2*(sn-1)+2) =
626 * irecbuf(3+(idb-1)*ilen)
627 intbuf_tab(nin)%TIME_S(sn) = -ep20
628 intbuf_tab(nin)%PENE_OLD(5*(sn-1)+1)=rrecbuf(5+(idb-1)*rlen)
629 intbuf_tab(nin)%STIF_OLD(2*(sn-1)+1)=rrecbuf(7+(idb-1)*rlen)
630 ENDIF
631
632 ELSEIF( surf > 0 .AND. time_s == -ep20)THEN
633
634
635 ELSEIF( surfr > 0 .AND. time_sr == -ep20)THEN
636 intbuf_tab(nin)%TIME_S(sn) = -ep20
637 intbuf_tab(nin)%IRTLM(2*(sn-1)+1) = irecbuf(2+(idb-1)*ilen)
638 intbuf_tab(nin)%IRTLM(2*(sn-1)+2) = irecbuf(3+(idb-1)*ilen)
639
640 ELSEIF( surfr < 0 )THEN
641 IF (time_sr == time_s) THEN
642 IF (abs(surfr) > abs(surf))THEN
643 intbuf_tab(nin)%TIME_S(sn) = time_sr
644 intbuf_tab(nin)%IRTLM(2*(sn-1)+1) =
645 * irecbuf(2+(idb-1)*ilen)
646 intbuf_tab(nin)%IRTLM(2*(sn-1)+2) =
647 * irecbuf(3+(idb-1)*ilen)
648 ENDIF
649 ELSEIF (time_s <= time_sr ) THEN
650 intbuf_tab(nin)%TIME_S(sn) = time_sr
651 intbuf_tab(nin)%IRTLM(2*(sn-1)+1) =
652 * irecbuf(2+(idb-1)*ilen)
653 intbuf_tab(nin)%IRTLM(2*(sn-1)+2) =
654 * irecbuf(3+(idb-1)*ilen)
655 ENDIF
656 ENDIF
657
658
659 IF (abs(rrecbuf(2+(idb-1)*rlen)) >
660 * (abs(intbuf_tab(nin)%SECND_FR(6*(sn-1)+1)) ) )
661 * intbuf_tab(nin)%SECND_FR(6*(sn-1)+1) = rrecbuf(2+(idb
662
663 IF (abs(rrecbuf(3+(idb-1)*rlen)) >
664 * abs(intbuf_tab(nin)%SECND_FR(6*(sn-1)+2)) )
665 * intbuf_tab(nin)%SECND_FR(6*(sn-1)+2) = rrecbuf(3+(idb-1)*rlen)
666
667 IF (abs(rrecbuf(4+(idb-1)*rlen)) >
668 * abs(intbuf_tab(nin)%SECND_FR(6*(sn-1)+3)) )
669 * intbuf_tab(nin)%SECND_FR(6*(sn-1)+3) = rrecbuf(4+(idb-1)*rlen)
670
671
672 IF (rrecbuf(2+(idb-1)*rlen)==-intbuf_tab(nin
673 * intbuf_tab(nin)%SECND_FR(6*(sn-1)+1)=
674 * abs(rrecbuf(2+(idb-1)*rlen))
675
676 IF (rrecbuf(3+(idb-1)*rlen)==-intbuf_tab(nin)%SECND_FR(6*(sn-1)+2) )
677 * intbuf_tab(nin)%SECND_FR(6*(sn-1)+2)=
678 * abs(rrecbuf(3+(idb-1)*rlen
679
680 IF (rrecbuf(4+(idb-1)*rlen)==-intbuf_tab(nin)%SECND_FR(6*(sn-1)+3) )
681 * intbuf_tab(nin)%SECND_FR(6*(sn-1)+
682 * abs(rrecbuf(4+(idb-1)*rlen
683
684
685 intbuf_tab(nin)%PENE_OLD(5*(sn-1)+1)=
max(intbuf_tab(nin)%PENE_OLD(5*(sn-1)+1),
686 *
687 intbuf_tab(nin)%PENE_OLD(5*(sn-1)+3)=
max(intbuf_tab(nin)%PENE_OLD(5*(sn-1)+3),
688 * rrecbuf(6+(idb-1)*rlen) )
689
690
691 intbuf_tab(nin)%PENE_OLD(5*(sn-1)+5)=
max(intbuf_tab(nin)%PENE_OLD(5*(sn-1)+5),
692 * rrecbuf(8+(idb-1)*rlen) )
693
694
695
696
697
698 intbuf_tab(nin)%STIF_OLD(2*(sn-1)+1)=
max(intbuf_tab(nin)%STIF_OLD(2*(sn-1)+1),
699 * rrecbuf(7+(idb-1)*rlen) )
700
701
702 IF(iedg4 > 0)THEN
703 nd=intbuf_tab(nin)%NSV(sn)
704 intbuf_tab(nin)%ISPT2(sn) =
max( intbuf_tab(nin)%ISPT2(sn), irecbuf(4+(idb-1)*ilen))
705 ENDIF
706 idb=idb+1
707 ENDDO
708 ENDIF
709 ENDDO
710 ENDIF
711 ENDDO
712
713
714 DO p=1,nspmd
715 siz = iads(p+1)-iads(p)
716 IF(siz/=0)THEN
717 CALL mpi_wait(req_s(p),status,ierror)
718 CALL mpi_wait(req_s2(p),status,ierror)
719 ENDIF
720 ENDDO
721
722
723
724 DO ni=1,nbintc
725 nin = intlist(ni)
726 nty = ipari( 7,nin)
727 nsn = ipari( 5,nin)
728 nsnr = ipari( 24,nin)
729 iedg4 = ipari(59,nin)
730 IF(nty==24)THEN
731 DO sn=1,nsn
732 IF(intbuf_tab(nin)%IRTLM(2*(sn-1)+1)==0)
733 * intbuf_tab(nin)%PENE_OLD(5*(sn-1)+5)=zero
734 ENDDO
735 ENDIF
736 ENDDO
737
738 IF(ALLOCATED(isendbuf))DEALLOCATE(isendbuf)
739 IF(ALLOCATED(irecbuf))DEALLOCATE(irecbuf)
740 IF(ALLOCATED(rsendbuf))DEALLOCATE(rsendbuf)
741 IF(ALLOCATED(rrecbuf))DEALLOCATE(rrecbuf)
742
743
744
745
746 len=6
747 loc_proc = ispmd+1
748 iads = 0
749 iadr = 0
750 lensd = 0
751 lenrv = 0
752
753 alen=11
754
755 DO p=1,nspmd
756 iadr(p)=lenrv+1
757 DO nin=1,ninter
758 nty=ipari(7,nin)
759 IF(nty==24) THEN
760 lensd = lensd +
nsnsi(nin)%P(p)*alen
761 lenrv = lenrv +
nsnfi(nin)%P(p)*alen
762 ENDIF
763 ENDDO
764 ENDDO
765 iadr(nspmd+1)=lenrv+1
766
767 IF(lensd>0)THEN
768 ALLOCATE(bbufs(lensd),stat=ierror)
769 IF(ierror/=0) THEN
770 CALL ancmsg(msgid=20,anmode=aninfo)
772 ENDIF
773 ENDIF
774
775
776 IF(lenrv>0)THEN
777 ALLOCATE(bbufr(lenrv),stat=ierror)
778 IF(ierror/=0) THEN
779 CALL ancmsg(msgid=20,anmode=aninfo)
781 ENDIF
782 ENDIF
783
784
785 DO p=1, nspmd
786 siz=iadr(p+1)-iadr(p)
787 IF (siz > 0) THEN
788 msgtyp = msgoff5
789 CALL mpi_irecv( bbufr(iadr(p)),siz,real,it_spmd(p),msgtyp,
790 * spmd_comm_world,req_r(p),ierror )
791 ENDIF
792 ENDDO
793
794
795 l=1
796 ideb = 0
797 DO p=1, nspmd
798 iads(p)=l
799 IF (p/= loc_proc) THEN
800 DO ni=1,nbintc
801 nin = intlist(ni)
802 nty =ipari(7,nin)
803 IF(nty==24)THEN
804 iedg4 = ipari(59,nin)
806
807 DO nn=1,nb
808 nd =
nsvsi(nin)%P(ideb(nin)+nn)
809 nod=intbuf_tab(nin)%NSV(nd)
810 bbufs(l )=intbuf_tab(nin)%IRTLM(2*(nd-1)+1)
811 bbufs(l+1)=intbuf_tab(nin)%IRTLM(2*(nd-1)+2)
812 bbufs(l+2)=intbuf_tab(nin)%TIME_S(nd)
813 bbufs(l+3)=intbuf_tab(nin)%SECND_FR(6*(nd-1)+1)
814 bbufs(l+4)=intbuf_tab(nin)%SECND_FR(6*(nd-1)+2)
815 bbufs(l+5)=intbuf_tab(nin)%SECND_FR(6*(nd-1)+3)
816 bbufs(l+6)=intbuf_tab(nin)%PENE_OLD(5*(nd-1)+1)
817 bbufs(l+7)=intbuf_tab(nin)%PENE_OLD(5*(nd-1)+3)
818 bbufs(l+9)=intbuf_tab(nin)%PENE_OLD(5*(nd-1)+5)
819 bbufs(l+8)=intbuf_tab(nin)%STIF_OLD(2*(nd-1)+1)
820 IF(iedg4 > 0)THEN
821 bbufs(l+10)=intbuf_tab(nin)%ISPT2(nd)
822 ELSE
823 bbufs(l+10)=0
824 ENDIF
825 l = l + 11
826 ENDDO
827 ENDIF
828 ideb(nin)=ideb(nin)+nb
829 ENDDO
830
831 siz = l-iads(p)
832 IF(siz>0)THEN
833 msgtyp = msgoff5
834
836 . bbufs(iads(p)),siz,real ,it_spmd(p),msgtyp,
837 . spmd_comm_world,req_si(p),ierror )
838 ENDIF
839 ENDIF
840 ENDDO
841 iads(nspmd+1)=l
842
843 i24com3 = 0
844
845
846 i24com4 = 1
847 RETURN
848 ENDIF
849
850
851
852
853 IF(flag==4)THEN
854 IF(i24com4==0)RETURN
855
856
857 l=0
858 ideb = 0
859
860 DO p=1, nspmd
861 l=0
862 siz=iadr(p+1)-iadr(p)
863 IF (siz > 0) THEN
864
865 CALL mpi_wait(req_r(p),status,ierror)
866 DO ni=1,nbintc
867 nin=intlist(ni)
868 nty = ipari(7,nin)
869 igsti = ipari(34,nin)
870
871 IF(nty==24) THEN
872 iedg4 = ipari(59,nin)
874
875 IF (nb > 0)THEN
876 IF(impl_s>0.AND.igsti==6)THEN
877
878 DO k=1,nb
879 irtlm_fi(nin)%P(1,ideb(nin)+k)=bbufr(iadr(p)+l)
880 irtlm_fi(nin)%P(2,ideb(nin)+k)=bbufr(iadr(p)+l+1)
881 time_sfi(nin)%P(ideb(nin)+k)=bbufr(iadr(p)+l+2)
882
883
887 secnd_frfi(nin)%P(4,ideb(nin)+k)=bbufr(iadr(p)+l+3)
888 secnd_frfi(nin)%P(5,ideb(nin)+k)=bbufr(iadr(p)+l+4)
889 secnd_frfi(nin)%P(6,ideb(nin)+k)=bbufr(iadr(p)+l+5)
891 pene_oldfi(nin)%P(2,ideb(nin)+k)=bbufr(iadr(p)+l+6)
892 pene_oldfi(nin)%P(3,ideb(nin)+k)=bbufr(iadr(p)+l+7)
893 pene_oldfi(nin)%P(5,ideb(nin)+k)=bbufr(iadr(p)+l+9)
894 stif_oldfi(nin)%P(2,ideb(nin)+k)=bbufr(iadr(p)+l+8)
895 IF(iedg4 > 0)THEN
896 ispt2_fi(nin)%P(ideb(nin)+k)=bbufr(iadr(p)+l+10)
897 ENDIF
898 l=l+11
899 ENDDO
900 ELSE
901 DO k=1,nb
902 irtlm_fi(nin)%P(1,ideb(nin)+k)=bbufr(iadr(p)+l)
903 irtlm_fi(nin)%P(2,ideb(nin)+k)=bbufr(iadr(p)+l+1)
904 time_sfi(nin)%P(ideb(nin)+k)=bbufr(iadr(p)+l+2)
905
906
910 secnd_frfi(nin)%P(4,ideb(nin)+k)=bbufr(iadr(p)+l+3)
911 secnd_frfi(nin)%P(5,ideb(nin)+k)=bbufr(iadr(p)+l+4)
912 secnd_frfi(nin)%P(6,ideb(nin)+k)=bbufr(iadr(p)+l+5)
914 pene_oldfi(nin)%P(2,ideb(nin)+k)=bbufr(iadr(p)+l+6)
915 pene_oldfi(nin)%P(3,ideb(nin)+k)=bbufr(iadr(p)+l+7)
916 pene_oldfi(nin)%P(5,ideb(nin)+k)=bbufr(iadr(p)+l+9)
918 stif_oldfi(nin)%P(2,ideb(nin)+k)=bbufr(iadr(p)+l+8)
919 IF(iedg4 > 0)THEN
920 ispt2_fi(nin)%P(ideb(nin)+k)=bbufr(iadr(p)+l+10)
921 ENDIF
922 l=l+11
923 ENDDO
925 ENDIF
926 ENDIF
927 ideb(nin)=ideb(nin)+nb
928 ENDDO
929 ENDIF
930 ENDDO
931
932
933 DO p = 1, nspmd
934 IF (p==nspmd)THEN
935 siz=lensd-iads(p)
936 ELSE
937 siz=iads(p+1)-iads(p)
938 ENDIF
939 IF(siz>0) THEN
940 CALL mpi_wait(req_si(p),status,ierror)
941 ENDIF
942 ENDDO
943
944
945 IF (ALLOCATED(bbufs)) DEALLOCATE(bbufs)
946 IF (ALLOCATED(bbufr)) DEALLOCATE(bbufr)
947
948
949 i24com4=0
950 ENDIF
951#endif
952 RETURN
if(complex_arithmetic) id
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(int_pointer), dimension(:), allocatable ispt2_fi
type(real_pointer2), dimension(:), allocatable stif_oldfi
type(real_pointer2), dimension(:), allocatable secnd_frfi
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 isedge_fi
type(real_pointer2), dimension(:), allocatable pene_oldfi
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)