88 SUBROUTINE mpl_recv_preamb(KMP_TYPER,KCOMMR,KSOURCER,KTAGR,KMP_TYPE,KCOMM,KSOURCE,KTAG,KREQUEST)
89 INTEGER(KIND=JPIM),
INTENT(OUT) :: KMP_TYPER,KCOMMR,KSOURCER,KTAGR
90 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KMP_TYPE,KCOMM,KSOURCE,KTAG
91 INTEGER(KIND=JPIM),
OPTIONAL :: KREQUEST
93 LOGICAL :: LLABORT=.true.
94 INTEGER(KIND=JPIM) :: ITID
96 itid = oml_my_thread()
99 & cdmessage=
'MPL_RECV: MPL NOT INITIALISED ',ldabort=llabort)
101 IF(
PRESENT(kmp_type))
THEN 108 IF( .NOT.
PRESENT(krequest))
THEN 109 CALL mpl_message(cdmessage=
'MPL_RECV:KREQUEST MISSING ',ldabort=llabort)
113 IF(
PRESENT(kcomm))
THEN 119 IF(
PRESENT(ksource))
THEN 120 IF(ksource < 1 .OR. ksource >
mpl_nproc(kcommr))
THEN 121 WRITE(
mpl_errunit,*)
'MPL_RECV: ERROR KSOURCE=',ksource
122 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL KSOURCE ',ldabort=llabort)
126 ksourcer=mpi_any_source
129 IF(
PRESENT(ktag))
THEN 139 SUBROUTINE mpl_recv_tail(KRECV_STATUS,KTYPE,KFROM,KOUNT,KRECVTAG,KERROR,CDSTRING)
142 #ifdef USE_8_BYTE_WORDS 144 mpi_recv => mpi_recv8, mpi_get_count => mpi_get_count8
147 INTEGER(KIND=JPIM),
INTENT(IN) :: KRECV_STATUS(mpi_status_size)
148 INTEGER(KIND=JPIM),
INTENT(IN) :: KTYPE
149 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KERROR,KFROM,KRECVTAG,KOUNT
150 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
152 INTEGER(KIND=JPIM) :: IMP_TYPE,ICOMM,IERROR
153 INTEGER(KIND=JPIM) :: IFROM,IRECVTAG,IRECVCOUNT
154 LOGICAL :: LLABORT=.true.
156 ifrom=krecv_status(mpi_source)+1
157 IF(
PRESENT(kfrom))
THEN 160 CALL mpi_get_count(krecv_status,ktype,irecvcount,ierror)
161 IF(
PRESENT(kount))
THEN 165 irecvtag=krecv_status(mpi_tag)
166 IF(
PRESENT(krecvtag))
THEN 172 IF(
PRESENT(kerror))
THEN 175 IF(ierror /= 0 )
CALL mpl_message(ierror,
'MPL_RECV',cdstring,ldabort=llabort)
182 SUBROUTINE mpl_recv_real4(PBUF,KSOURCE,KTAG,KCOMM,KFROM,KRECVTAG,&
183 &KOUNT,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
186 #ifdef USE_8_BYTE_WORDS 188 mpi_recv => mpi_recv8, mpi_irecv => mpi_irecv8
192 REAL(KIND=JPRM) :: PBUF(:)
193 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KTAG,KCOMM,KMP_TYPE,KSOURCE
194 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KREQUEST,KERROR,KFROM,KRECVTAG,KOUNT
195 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
197 INTEGER(KIND=JPIM) :: IBUFFSIZE,IMP_TYPE,ICOMM,IERROR
198 INTEGER(KIND=JPIM) :: ISOURCE,ITAG
199 INTEGER(KIND=JPIM) :: IRECV_STATUS(mpi_status_size)
200 LOGICAL :: LLABORT=.true.
201 INTEGER(KIND=JPIM) :: ITID
202 REAL(KIND=JPRM) :: ZDUM(1)
203 itid = oml_my_thread()
205 CALL mpl_recv_preamb(imp_type,icomm,isource,itag,kmp_type,kcomm,ksource,ktag,krequest)
207 ibuffsize =
SIZE(pbuf)
210 IF (ibuffsize > 0)
THEN 211 IF( (loc(pbuf(ubound(pbuf,1))) - loc(pbuf(lbound(pbuf,1)))) /= 4_jpib*(ibuffsize - 1) )
THEN 212 CALL mpl_message(cdmessage=
'MPL_RECV: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
217 IF(ibuffsize == 0)
THEN 219 CALL mpi_recv(zdum(1),1,int(mpi_real4),isource,itag,icomm,irecv_status,ierror)
221 CALL mpi_recv(zdum(1),1,int(mpi_real4),isource,itag,icomm,irecv_status,ierror)
223 CALL mpi_irecv(zdum(1),1,int(mpi_real4),isource,itag,icomm, &
226 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
230 CALL mpi_recv(pbuf(1),ibuffsize,int(mpi_real4),isource,itag,icomm,irecv_status,ierror)
232 CALL mpi_recv(pbuf(1),ibuffsize,int(mpi_real4),isource,itag,icomm,irecv_status,ierror)
234 CALL mpi_irecv(pbuf(1),ibuffsize,int(mpi_real4),isource,itag,icomm, &
237 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
242 CALL mpl_recv_tail(irecv_status,int(mpi_real4),kfrom,kount,krecvtag,kerror,cdstring)
251 SUBROUTINE mpl_recv_real8(PBUF,KSOURCE,KTAG,KCOMM,KFROM,KRECVTAG,&
252 &KOUNT,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
254 #ifdef USE_8_BYTE_WORDS 256 mpi_recv => mpi_recv8, mpi_irecv => mpi_irecv8
260 REAL(KIND=JPRD) :: PBUF(:)
261 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KTAG,KCOMM,KMP_TYPE,KSOURCE
262 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KREQUEST,KERROR,KFROM,KRECVTAG,KOUNT
263 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
265 INTEGER(KIND=JPIM) :: IBUFFSIZE,IMP_TYPE,ICOMM,IERROR
266 INTEGER(KIND=JPIM) :: ISOURCE,ITAG
267 INTEGER(KIND=JPIM) :: IRECV_STATUS(mpi_status_size)
268 LOGICAL :: LLABORT=.true.
269 INTEGER(KIND=JPIM) :: ITID
270 REAL(KIND=JPRD) :: ZDUM(1)
271 itid = oml_my_thread()
273 CALL mpl_recv_preamb(imp_type,icomm,isource,itag,kmp_type,kcomm,ksource,ktag,krequest)
275 ibuffsize =
SIZE(pbuf)
277 IF (ibuffsize > 0)
THEN 278 IF( (loc(pbuf(ubound(pbuf,1))) - loc(pbuf(lbound(pbuf,1)))) /= 8_jpib*(ibuffsize - 1) )
THEN 279 CALL mpl_message(cdmessage=
'MPL_RECV: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
284 IF(ibuffsize == 0)
THEN 286 CALL mpi_recv(zdum(1),1,int(mpi_real8),isource,itag,icomm,irecv_status,ierror)
288 CALL mpi_recv(zdum(1),1,int(mpi_real8),isource,itag,icomm,irecv_status,ierror)
290 CALL mpi_irecv(zdum(1),1,int(mpi_real8),isource,itag,icomm, &
293 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
297 CALL mpi_recv(pbuf(1),ibuffsize,int(mpi_real8),isource,itag,icomm,irecv_status,ierror)
299 CALL mpi_recv(pbuf(1),ibuffsize,int(mpi_real8),isource,itag,icomm,irecv_status,ierror)
301 CALL mpi_irecv(pbuf(1),ibuffsize,int(mpi_real8),isource,itag,icomm, &
304 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
309 CALL mpl_recv_tail(irecv_status,int(mpi_real8),kfrom,kount,krecvtag,kerror,cdstring)
318 SUBROUTINE mpl_recv_int(KBUF,KSOURCE,KTAG,KCOMM,KFROM,KRECVTAG,KOUNT,&
319 &KMP_TYPE,KERROR,KREQUEST,CDSTRING)
321 #ifdef USE_8_BYTE_WORDS 323 mpi_recv => mpi_recv8, mpi_irecv => mpi_irecv8
326 INTEGER(KIND=JPIM) :: KBUF(:)
327 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KTAG,KCOMM,KMP_TYPE,KSOURCE
328 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KREQUEST,KERROR,KFROM,KRECVTAG,KOUNT
329 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
331 INTEGER(KIND=JPIM) :: IBUFFSIZE,IMP_TYPE,ICOMM,IERROR
332 INTEGER(KIND=JPIM) :: ISOURCE,ITAG
333 INTEGER(KIND=JPIM) :: IRECV_STATUS(mpi_status_size)
334 LOGICAL :: LLABORT=.true.
335 INTEGER(KIND=JPIM) :: ITID,IDUM(1)
336 itid = oml_my_thread()
338 CALL mpl_recv_preamb(imp_type,icomm,isource,itag,kmp_type,kcomm,ksource,ktag,krequest)
340 ibuffsize =
SIZE(kbuf)
342 IF (ibuffsize > 0)
THEN 343 IF( (loc(kbuf(ubound(kbuf,1)))-loc(kbuf(lbound(kbuf,1)))) /= 4_jpib*(ibuffsize - 1) )
THEN 344 CALL mpl_message(cdmessage=
'MPL_RECV: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
349 IF(ibuffsize == 0)
THEN 351 CALL mpi_recv(idum(1),1,int(mpi_integer),isource,itag,icomm,irecv_status,ierror)
353 CALL mpi_recv(idum(1),1,int(mpi_integer),isource,itag,icomm,irecv_status,ierror)
355 CALL mpi_irecv(idum(1),1,int(mpi_integer),isource,itag,icomm, &
358 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
362 CALL mpi_recv(kbuf(1),ibuffsize,int(mpi_integer),isource,itag,icomm,irecv_status,ierror)
364 CALL mpi_recv(kbuf(1),ibuffsize,int(mpi_integer),isource,itag,icomm,irecv_status,ierror)
366 CALL mpi_irecv(kbuf(1),ibuffsize,int(mpi_integer),isource,itag,icomm, &
369 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
373 CALL mpl_recv_tail(irecv_status,int(mpi_integer),kfrom,kount,krecvtag,kerror,cdstring)
380 SUBROUTINE mpl_recv_int8(KBUF,KSOURCE,KTAG,KCOMM,KFROM,KRECVTAG,KOUNT,&
381 &KMP_TYPE,KERROR,KREQUEST,CDSTRING)
383 #ifdef USE_8_BYTE_WORDS 385 mpi_recv => mpi_recv8, mpi_irecv => mpi_irecv8
388 INTEGER(KIND=JPIB) :: KBUF(:)
389 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KTAG,KCOMM,KMP_TYPE,KSOURCE
390 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KREQUEST,KERROR,KFROM,KRECVTAG,KOUNT
391 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
393 INTEGER(KIND=JPIM) :: IBUFFSIZE,IMP_TYPE,ICOMM,IERROR
394 INTEGER(KIND=JPIM) :: ISOURCE,ITAG
395 INTEGER(KIND=JPIM) :: IRECV_STATUS(mpi_status_size)
396 LOGICAL :: LLABORT=.true.
397 INTEGER(KIND=JPIM) :: ITID
398 INTEGER(KIND=JPIB) :: IDUM(1)
399 itid = oml_my_thread()
401 CALL mpl_recv_preamb(imp_type,icomm,isource,itag,kmp_type,kcomm,ksource,ktag,krequest)
403 ibuffsize =
SIZE(kbuf)
405 IF (ibuffsize > 0)
THEN 406 IF( (loc(kbuf(ubound(kbuf,1)))-loc(kbuf(lbound(kbuf,1)))) /= 8_jpib*(ibuffsize - 1) )
THEN 407 CALL mpl_message(cdmessage=
'MPL_RECV: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
412 IF(ibuffsize == 0 )
THEN 414 CALL mpi_recv(idum(1),1,int(mpi_integer8),isource,itag,icomm,irecv_status,ierror)
416 CALL mpi_recv(idum(1),1,int(mpi_integer8),isource,itag,icomm,irecv_status,ierror)
418 CALL mpi_irecv(idum(1),1,int(mpi_integer8),isource,itag,icomm, &
421 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
425 CALL mpi_recv(kbuf(1),ibuffsize,int(mpi_integer8),isource,itag,icomm,irecv_status,ierror)
427 CALL mpi_recv(kbuf(1),ibuffsize,int(mpi_integer8),isource,itag,icomm,irecv_status,ierror)
429 CALL mpi_irecv(kbuf(1),ibuffsize,int(mpi_integer8),isource,itag,icomm, &
432 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
437 CALL mpl_recv_tail(irecv_status,int(mpi_integer8),kfrom,kount,krecvtag,kerror,cdstring)
446 SUBROUTINE mpl_recv_int2(KBUF,KSOURCE,KTAG,KCOMM,KFROM,KRECVTAG,&
447 &KOUNT,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
449 #ifdef USE_8_BYTE_WORDS 451 mpi_recv => mpi_recv8, mpi_irecv => mpi_irecv8
454 INTEGER(KIND=JPIM) :: KBUF(:,:)
455 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KTAG,KCOMM,KMP_TYPE,KSOURCE
456 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KREQUEST,KERROR,KFROM,KRECVTAG,KOUNT
457 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
459 INTEGER(KIND=JPIM) :: IBUFFSIZE,IMP_TYPE,ICOMM,IERROR
460 INTEGER(KIND=JPIM) :: ISOURCE,ITAG
461 INTEGER(KIND=JPIM) :: IRECV_STATUS(mpi_status_size)
462 LOGICAL :: LLABORT=.true.
463 INTEGER(KIND=JPIM) :: ITID, IDUM(1)
464 itid = oml_my_thread()
466 CALL mpl_recv_preamb(imp_type,icomm,isource,itag,kmp_type,kcomm,ksource,ktag,krequest)
468 ibuffsize =
SIZE(kbuf)
470 IF (ibuffsize > 0)
THEN 471 IF( (loc(kbuf(ubound(kbuf,1),ubound(kbuf,2))) - &
472 & loc(kbuf(lbound(kbuf,1),lbound(kbuf,2)))) /= 4_jpib*(ibuffsize - 1) )
THEN 473 CALL mpl_message(cdmessage=
'MPL_RECV: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
478 IF(ibuffsize == 0 )
THEN 480 CALL mpi_recv(idum(1),1,int(mpi_integer),isource,itag,icomm,irecv_status,ierror)
482 CALL mpi_recv(idum(1),1,int(mpi_integer),isource,itag,icomm,irecv_status,ierror)
484 CALL mpi_irecv(idum(1),1,int(mpi_integer),isource,itag,icomm, &
487 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
491 CALL mpi_recv(kbuf(1,1),ibuffsize,int(mpi_integer),isource,itag,icomm,irecv_status,ierror)
493 CALL mpi_recv(kbuf(1,1),ibuffsize,int(mpi_integer),isource,itag,icomm,irecv_status,ierror)
495 CALL mpi_irecv(kbuf(1,1),ibuffsize,int(mpi_integer),isource,itag,icomm, &
498 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
503 CALL mpl_recv_tail(irecv_status,int(mpi_integer),kfrom,kount,krecvtag,kerror,cdstring)
513 &KOUNT,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
515 #ifdef USE_8_BYTE_WORDS 517 mpi_recv => mpi_recv8, mpi_irecv => mpi_irecv8
520 INTEGER(KIND=JPIM) :: KINT
521 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KTAG,KCOMM,KMP_TYPE,KSOURCE
522 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KREQUEST,KERROR,KFROM,KRECVTAG,KOUNT
523 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
525 INTEGER(KIND=JPIM) :: IBUFFSIZE,IMP_TYPE,ICOMM,IERROR
526 INTEGER(KIND=JPIM) :: ISOURCE,ITAG
527 INTEGER(KIND=JPIM) :: IRECV_STATUS(mpi_status_size)
528 LOGICAL :: LLABORT=.true.
529 INTEGER(KIND=JPIM) :: ITID
530 itid = oml_my_thread()
532 CALL mpl_recv_preamb(imp_type,icomm,isource,itag,kmp_type,kcomm,ksource,ktag,krequest)
537 CALL mpi_recv(kint,ibuffsize,int(mpi_integer),isource,itag,icomm,irecv_status,ierror)
539 CALL mpi_recv(kint,ibuffsize,int(mpi_integer),isource,itag,icomm,irecv_status,ierror)
541 CALL mpi_irecv(kint,ibuffsize,int(mpi_integer),isource,itag,icomm, &
544 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
548 CALL mpl_recv_tail(irecv_status,int(mpi_integer),kfrom,kount,krecvtag,kerror,cdstring)
558 &KOUNT,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
561 #ifdef USE_8_BYTE_WORDS 563 mpi_recv => mpi_recv8, mpi_irecv => mpi_irecv8
567 REAL(KIND=JPRM) :: PREAL4
568 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KTAG,KCOMM,KMP_TYPE,KSOURCE
569 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KREQUEST,KERROR,KFROM,KRECVTAG,KOUNT
570 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
572 INTEGER(KIND=JPIM) :: IBUFFSIZE,IMP_TYPE,ICOMM,IERROR
573 INTEGER(KIND=JPIM) :: ISOURCE,ITAG
574 INTEGER(KIND=JPIM) :: IRECV_STATUS(mpi_status_size)
575 LOGICAL :: LLABORT=.true.
576 INTEGER(KIND=JPIM) :: ITID
577 itid = oml_my_thread()
579 CALL mpl_recv_preamb(imp_type,icomm,isource,itag,kmp_type,kcomm,ksource,ktag,krequest)
584 CALL mpi_recv(preal4,ibuffsize,int(mpi_real4),isource,itag,icomm,irecv_status,ierror)
586 CALL mpi_recv(preal4,ibuffsize,int(mpi_real4),isource,itag,icomm,irecv_status,ierror)
588 CALL mpi_irecv(preal4,ibuffsize,int(mpi_real4),isource,itag,icomm, &
591 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
595 CALL mpl_recv_tail(irecv_status,int(mpi_real4),kfrom,kount,krecvtag,kerror,cdstring)
605 &KOUNT,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
607 #ifdef USE_8_BYTE_WORDS 609 mpi_recv => mpi_recv8, mpi_irecv => mpi_irecv8
612 REAL(KIND=JPRD) :: PREAL8
613 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KTAG,KCOMM,KMP_TYPE,KSOURCE
614 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KREQUEST,KERROR,KFROM,KRECVTAG,KOUNT
615 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
617 INTEGER(KIND=JPIM) :: IBUFFSIZE,IMP_TYPE,ICOMM,IERROR
618 INTEGER(KIND=JPIM) :: ISOURCE,ITAG
619 INTEGER(KIND=JPIM) :: IRECV_STATUS(mpi_status_size)
620 LOGICAL :: LLABORT=.true.
621 INTEGER(KIND=JPIM) :: ITID
622 itid = oml_my_thread()
624 CALL mpl_recv_preamb(imp_type,icomm,isource,itag,kmp_type,kcomm,ksource,ktag,krequest)
629 CALL mpi_recv(preal8,ibuffsize,int(mpi_real8),isource,itag,icomm,irecv_status,ierror)
631 CALL mpi_recv(preal8,ibuffsize,int(mpi_real8),isource,itag,icomm,irecv_status,ierror)
633 CALL mpi_irecv(preal8,ibuffsize,int(mpi_real8),isource,itag,icomm, &
636 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
640 CALL mpl_recv_tail(irecv_status,int(mpi_real8),kfrom,kount,krecvtag,kerror,cdstring)
650 &KOUNT,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
653 #ifdef USE_8_BYTE_WORDS 655 mpi_recv => mpi_recv8, mpi_irecv => mpi_irecv8
659 REAL(KIND=JPRM) :: PBUF(:,:)
660 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KTAG,KCOMM,KMP_TYPE,KSOURCE
661 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KREQUEST,KERROR,KFROM,KRECVTAG,KOUNT
662 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
664 INTEGER(KIND=JPIM) :: IBUFFSIZE,IMP_TYPE,ICOMM,IERROR
665 INTEGER(KIND=JPIM) :: ISOURCE,ITAG
666 INTEGER(KIND=JPIM) :: IRECV_STATUS(mpi_status_size)
667 LOGICAL :: LLABORT=.true.
668 INTEGER(KIND=JPIM) :: ITID
669 REAL(KIND=JPRM) :: ZDUM(1)
670 itid = oml_my_thread()
672 CALL mpl_recv_preamb(imp_type,icomm,isource,itag,kmp_type,kcomm,ksource,ktag,krequest)
674 ibuffsize =
SIZE(pbuf)
676 IF (ibuffsize > 0)
THEN 677 IF( (loc(pbuf(ubound(pbuf,1),ubound(pbuf,2))) - &
678 & loc(pbuf(lbound(pbuf,1),lbound(pbuf,2)))) /= 4_jpib*(ibuffsize - 1) )
THEN 679 CALL mpl_message(cdmessage=
'MPL_RECV: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
684 IF(ibuffsize == 0)
THEN 686 CALL mpi_recv(zdum(1),1,int(mpi_real4),isource,itag,icomm,irecv_status,ierror)
688 CALL mpi_recv(zdum(1),1,int(mpi_real4),isource,itag,icomm,irecv_status,ierror)
690 CALL mpi_irecv(zdum(1),1,int(mpi_real4),isource,itag,icomm, &
693 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
697 CALL mpi_recv(pbuf(1,1),ibuffsize,int(mpi_real4),isource,itag,icomm,irecv_status,ierror)
699 CALL mpi_recv(pbuf(1,1),ibuffsize,int(mpi_real4),isource,itag,icomm,irecv_status,ierror)
701 CALL mpi_irecv(pbuf(1,1),ibuffsize,int(mpi_real4),isource,itag,icomm, &
704 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
709 CALL mpl_recv_tail(irecv_status,int(mpi_real4),kfrom,kount,krecvtag,kerror,cdstring)
717 &KOUNT,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
719 #ifdef USE_8_BYTE_WORDS 721 mpi_recv => mpi_recv8, mpi_irecv => mpi_irecv8
724 REAL(KIND=JPRM) :: PBUF(:,:,:)
725 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KTAG,KCOMM,KMP_TYPE,KSOURCE
726 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KREQUEST,KERROR,KFROM,KRECVTAG,KOUNT
727 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
729 INTEGER(KIND=JPIM) :: IBUFFSIZE,IMP_TYPE,ICOMM,IERROR
730 INTEGER(KIND=JPIM) :: ISOURCE,ITAG
731 INTEGER(KIND=JPIM) :: IRECV_STATUS(mpi_status_size)
732 LOGICAL :: LLABORT=.true.
733 INTEGER(KIND=JPIM) :: ITID
734 itid = oml_my_thread()
736 CALL mpl_recv_preamb(imp_type,icomm,isource,itag,kmp_type,kcomm,ksource,ktag,krequest)
738 ibuffsize =
SIZE(pbuf)
740 IF (ibuffsize > 0)
THEN 741 IF( (loc(pbuf(ubound(pbuf,1),ubound(pbuf,2),ubound(pbuf,3))) - &
742 & loc(pbuf(lbound(pbuf,1),lbound(pbuf,2),lbound(pbuf,3)))) /= 4_jpib*(ibuffsize - 1) )
THEN 743 CALL mpl_message(cdmessage=
'MPL_RECV: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
748 CALL mpi_recv(pbuf,ibuffsize,int(mpi_real4),isource,itag,icomm,irecv_status,ierror)
750 CALL mpi_recv(pbuf,ibuffsize,int(mpi_real4),isource,itag,icomm,irecv_status,ierror)
752 CALL mpi_irecv(pbuf,ibuffsize,int(mpi_real4),isource,itag,icomm, &
755 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
759 CALL mpl_recv_tail(irecv_status,int(mpi_real4),kfrom,kount,krecvtag,kerror,cdstring)
770 &KOUNT,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
772 #ifdef USE_8_BYTE_WORDS 774 mpi_recv => mpi_recv8, mpi_irecv => mpi_irecv8
777 REAL(KIND=JPRD) :: PBUF(:,:)
778 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KTAG,KCOMM,KMP_TYPE,KSOURCE
779 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KREQUEST,KERROR,KFROM,KRECVTAG,KOUNT
780 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
782 INTEGER(KIND=JPIM) :: IBUFFSIZE,IMP_TYPE,ICOMM,IERROR
783 INTEGER(KIND=JPIM) :: ISOURCE,ITAG
784 INTEGER(KIND=JPIM) :: IRECV_STATUS(mpi_status_size)
785 LOGICAL :: LLABORT=.true.
786 INTEGER(KIND=JPIM) :: ITID
787 REAL(KIND=JPRD) :: ZDUM(1)
788 itid = oml_my_thread()
790 CALL mpl_recv_preamb(imp_type,icomm,isource,itag,kmp_type,kcomm,ksource,ktag,krequest)
792 ibuffsize =
SIZE(pbuf)
794 IF (ibuffsize > 0)
THEN 795 IF( (loc(pbuf(ubound(pbuf,1),ubound(pbuf,2))) - &
796 & loc(pbuf(lbound(pbuf,1),lbound(pbuf,2)))) /= 8_jpib*(ibuffsize - 1) )
THEN 797 CALL mpl_message(cdmessage=
'MPL_RECV: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
802 IF(ibuffsize == 0)
THEN 804 CALL mpi_recv(zdum(1),1,int(mpi_real8),isource,itag,icomm,irecv_status,ierror)
806 CALL mpi_recv(zdum(1),1,int(mpi_real8),isource,itag,icomm,irecv_status,ierror)
808 CALL mpi_irecv(zdum(1),1,int(mpi_real8),isource,itag,icomm, &
811 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
815 CALL mpi_recv(pbuf(1,1),ibuffsize,int(mpi_real8),isource,itag,icomm,irecv_status,ierror)
817 CALL mpi_recv(pbuf(1,1),ibuffsize,int(mpi_real8),isource,itag,icomm,irecv_status,ierror)
819 CALL mpi_irecv(pbuf(1,1),ibuffsize,int(mpi_real8),isource,itag,icomm, &
822 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
827 CALL mpl_recv_tail(irecv_status,int(mpi_real8),kfrom,kount,krecvtag,kerror,cdstring)
835 &KOUNT,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
837 #ifdef USE_8_BYTE_WORDS 839 mpi_recv => mpi_recv8, mpi_irecv => mpi_irecv8
842 REAL(KIND=JPRD) :: PBUF(:,:,:)
843 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KTAG,KCOMM,KMP_TYPE,KSOURCE
844 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KREQUEST,KERROR,KFROM,KRECVTAG,KOUNT
845 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
847 INTEGER(KIND=JPIM) :: IBUFFSIZE,IMP_TYPE,ICOMM,IERROR
848 INTEGER(KIND=JPIM) :: ISOURCE,ITAG
849 INTEGER(KIND=JPIM) :: IRECV_STATUS(mpi_status_size)
850 LOGICAL :: LLABORT=.true.
851 INTEGER(KIND=JPIM) :: ITID
852 itid = oml_my_thread()
854 CALL mpl_recv_preamb(imp_type,icomm,isource,itag,kmp_type,kcomm,ksource,ktag,krequest)
856 ibuffsize =
SIZE(pbuf)
858 IF (ibuffsize > 0)
THEN 859 IF( (loc(pbuf(ubound(pbuf,1),ubound(pbuf,2),ubound(pbuf,3))) - &
860 & loc(pbuf(lbound(pbuf,1),lbound(pbuf,2),lbound(pbuf,3)))) /= 8_jpib*(ibuffsize - 1) )
THEN 861 CALL mpl_message(cdmessage=
'MPL_RECV: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
866 CALL mpi_recv(pbuf,ibuffsize,int(mpi_real8),isource,itag,icomm,irecv_status,ierror)
868 CALL mpi_recv(pbuf,ibuffsize,int(mpi_real8),isource,itag,icomm,irecv_status,ierror)
870 CALL mpi_irecv(pbuf,ibuffsize,int(mpi_real8),isource,itag,icomm, &
873 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
877 CALL mpl_recv_tail(irecv_status,int(mpi_real8),kfrom,kount,krecvtag,kerror,cdstring)
887 &KOUNT,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
889 #ifdef USE_8_BYTE_WORDS 891 mpi_recv => mpi_recv8, mpi_irecv => mpi_irecv8
894 CHARACTER*(*) :: CDCHAR
895 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KTAG,KCOMM,KMP_TYPE,KSOURCE
896 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KREQUEST,KERROR,KFROM,KRECVTAG,KOUNT
897 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
899 INTEGER(KIND=JPIM) :: IBUFFSIZE,IMP_TYPE,ICOMM,IERROR
900 INTEGER(KIND=JPIM) :: ISOURCE,ITAG
901 INTEGER(KIND=JPIM) :: IRECV_STATUS(mpi_status_size)
902 LOGICAL :: LLABORT=.true.
903 INTEGER(KIND=JPIM) :: ITID
904 itid = oml_my_thread()
906 CALL mpl_recv_preamb(imp_type,icomm,isource,itag,kmp_type,kcomm,ksource,ktag,krequest)
908 ibuffsize = len(cdchar)
911 CALL mpi_recv(cdchar,ibuffsize,int(mpi_byte),isource,itag,icomm,irecv_status,ierror)
913 CALL mpi_recv(cdchar,ibuffsize,int(mpi_byte),isource,itag,icomm,irecv_status,ierror)
915 CALL mpi_irecv(cdchar,ibuffsize,int(mpi_byte),isource,itag,icomm, &
918 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
922 CALL mpl_recv_tail(irecv_status,int(mpi_byte),kfrom,kount,krecvtag,kerror,cdstring)
929 SUBROUTINE mpl_recv_char(CDCHAR,KSOURCE,KTAG,KCOMM,KFROM,KRECVTAG,&
930 &KOUNT,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
932 #ifdef USE_8_BYTE_WORDS 934 mpi_recv => mpi_recv8, mpi_irecv => mpi_irecv8
937 CHARACTER*(*) :: CDCHAR(:)
938 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KTAG,KCOMM,KMP_TYPE,KSOURCE
939 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KREQUEST,KERROR,KFROM,KRECVTAG,KOUNT
940 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
942 INTEGER(KIND=JPIM) :: IBUFFSIZE,IMP_TYPE,ICOMM,IERROR
943 INTEGER(KIND=JPIM) :: ISOURCE,ITAG
944 INTEGER(KIND=JPIM) :: IRECV_STATUS(mpi_status_size)
945 LOGICAL :: LLABORT=.true.
946 INTEGER(KIND=JPIM) :: ITID
947 itid = oml_my_thread()
949 CALL mpl_recv_preamb(imp_type,icomm,isource,itag,kmp_type,kcomm,ksource,ktag,krequest)
951 ibuffsize = len(cdchar) *
SIZE(cdchar)
954 CALL mpi_recv(cdchar,ibuffsize,int(mpi_byte),isource,itag,icomm,irecv_status,ierror)
956 CALL mpi_recv(cdchar,ibuffsize,int(mpi_byte),isource,itag,icomm,irecv_status,ierror)
958 CALL mpi_irecv(cdchar,ibuffsize,int(mpi_byte),isource,itag,icomm, &
961 CALL mpl_message(cdmessage=
'MPL_RECV:ILLEGAL MP_TYPE ',ldabort=llabort)
965 CALL mpl_recv_tail(irecv_status,int(mpi_byte),kfrom,kount,krecvtag,kerror,cdstring)
subroutine mpl_recv_real4_scalar(PREAL4, KSOURCE, KTAG, KCOMM, KFROM, KRECVTAG, KOUNT, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
subroutine, public mpl_message(KERROR, CDMESSAGE, CDSTRING, LDABORT)
integer(kind=jpim), parameter jp_blocking_buffered
subroutine, public mpl_recvstats(ICOUNT, ITYPE)
integer(kind=jpim) mpl_numproc
integer(kind=jpim), parameter jp_non_blocking_standard
subroutine mpl_recv_preamb(KMP_TYPER, KCOMMR, KSOURCER, KTAGR, KMP_TYPE, KCOMM, KSOURCE, KTAG, KREQUEST)
integer(kind=jpim), dimension(:), allocatable mpl_comm_oml
integer(kind=jpim), parameter jp_blocking_standard
integer(kind=jpim) mpl_errunit
subroutine mpl_recv_int2(KBUF, KSOURCE, KTAG, KCOMM, KFROM, KRECVTAG, KOUNT, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
subroutine mpl_recv_tail(KRECV_STATUS, KTYPE, KFROM, KOUNT, KRECVTAG, KERROR, CDSTRING)
subroutine mpl_recv_char_scalar(CDCHAR, KSOURCE, KTAG, KCOMM, KFROM, KRECVTAG, KOUNT, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
subroutine mpl_recv_int(KBUF, KSOURCE, KTAG, KCOMM, KFROM, KRECVTAG, KOUNT, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
subroutine mpl_recv_real42(PBUF, KSOURCE, KTAG, KCOMM, KFROM, KRECVTAG, KOUNT, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
subroutine mpl_recv_real4(PBUF, KSOURCE, KTAG, KCOMM, KFROM, KRECVTAG, KOUNT, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
subroutine mpl_recv_real8_scalar(PREAL8, KSOURCE, KTAG, KCOMM, KFROM, KRECVTAG, KOUNT, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
integer(kind=jpim) mpl_method
integer(kind=jpim) function, public mpl_nproc(KCOMM)
subroutine mpl_recv_int8(KBUF, KSOURCE, KTAG, KCOMM, KFROM, KRECVTAG, KOUNT, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
subroutine mpl_recv_real83(PBUF, KSOURCE, KTAG, KCOMM, KFROM, KRECVTAG, KOUNT, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
subroutine mpl_recv_real8(PBUF, KSOURCE, KTAG, KCOMM, KFROM, KRECVTAG, KOUNT, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
subroutine mpl_recv_real43(PBUF, KSOURCE, KTAG, KCOMM, KFROM, KRECVTAG, KOUNT, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
subroutine mpl_recv_int_scalar(KINT, KSOURCE, KTAG, KCOMM, KFROM, KRECVTAG, KOUNT, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
subroutine mpl_recv_real82(PBUF, KSOURCE, KTAG, KCOMM, KFROM, KRECVTAG, KOUNT, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
subroutine mpl_recv_char(CDCHAR, KSOURCE, KTAG, KCOMM, KFROM, KRECVTAG, KOUNT, KMP_TYPE, KERROR, KREQUEST, CDSTRING)