81 & KRECVCOUNTS,KIRECVDISPL,KSENDDISPL,KRECVDISPL,KMP_TYPE,KCOMM,CDSTRING)
84 #ifdef USE_8_BYTE_WORDS 86 mpi_comm_size => mpi_comm_size8
90 INTEGER(KIND=JPIM),
INTENT(IN) :: KRECVCOUNTS(:),KSENDCOUNTS(:)
91 INTEGER(KIND=JPIM),
INTENT(OUT) :: KISENDDISPL(:),KIRECVDISPL(:)
92 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KSENDDISPL(:),KRECVDISPL(:),KCOMM,KMP_TYPE
93 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
94 INTEGER(KIND=JPIM) :: ITID,J
95 itid = oml_my_thread()
97 & cdmessage=
'MPL_ALLTOALLV: MPL NOT INITIALISED ',ldabort=
llabort)
99 IF(
PRESENT(kcomm))
THEN 105 IF(
PRESENT(kmp_type))
THEN 118 WRITE(
mpl_errunit,*)
'MPL_ALLTOALLV: ERROR KRECVCOUNTS dimension=',&
121 &
'MPL_ALLTOALLV: ERROR KRECVCOUNTS dimension is wrong',ldabort=
llabort)
125 WRITE(
mpl_errunit,*)
'MPL_ALLTOALLV: ERROR KSENDCOUNTS dimension=',&
128 &
'MPL_ALLTOALLV: ERROR KSENDCOUNTS dimension is wrong',ldabort=
llabort)
131 IF(
PRESENT(krecvdispl))
THEN 132 DO j=1,min(
SIZE(krecvdispl),
SIZE(kirecvdispl))
133 kirecvdispl(j) = krecvdispl(j)
139 kirecvdispl(
ir) = kirecvdispl(
ir-1) + 1
143 kirecvdispl(
ir) = kirecvdispl(
ir-1) + krecvcounts(
ir-1)
149 IF(kirecvdispl(
ir) < 0 .OR. krecvcounts(
ir) < 0)
THEN 150 WRITE(
mpl_errunit,
'(A,4I10)')
'MPL_ALLTOALLV: RECV.. < 0 ',&
151 &
ir,kirecvdispl(
ir),krecvcounts(
ir)
155 WRITE(
mpl_errunit,
'(A,4I10)')
'MPL_ALLTOALLV:RECV BUFFER TOO SMALL ', &
161 IF(
PRESENT(ksenddispl))
THEN 162 DO j=1,min(
SIZE(ksenddispl),
SIZE(kisenddispl))
163 kisenddispl(j) = ksenddispl(j)
169 kisenddispl(
ir) = kisenddispl(
ir-1) + 1
173 kisenddispl(
ir) = kisenddispl(
ir-1) + ksendcounts(
ir-1)
178 IF(kisenddispl(
ir) < 0 .OR. ksendcounts(
ir) < 0)
THEN 179 WRITE(
mpl_errunit,
'(A,4I10)')
'MPL_ALLTOALLV:SEND.. <0 ',&
180 &
ir,kisenddispl(
ir),ksendcounts(
ir)
184 WRITE(
mpl_errunit,
'(A,4I10)')
'MPL_ALLTOALLV:SEND BUFFER TOO SMALL ', &
193 &KSENDDISPL,KRECVDISPL,KMP_TYPE,KCOMM,KERROR,KREQUEST,CDSTRING)
196 #ifdef USE_8_BYTE_WORDS 198 mpi_alltoallv => mpi_alltoallv8
203 INTEGER(KIND=JPIM),
INTENT(IN) :: KSENDCOUNTS(:), KRECVCOUNTS(:)
204 REAL(KIND=JPRD),
INTENT(IN) :: PSENDBUF(:)
205 REAL(KIND=JPRD),
INTENT(OUT) :: PRECVBUF(:)
206 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KSENDDISPL(:), KRECVDISPL(:), KCOMM ,KMP_TYPE
207 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
208 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KREQUEST,KERROR
217 IF( (loc(psendbuf(ubound(psendbuf,1))) - loc(psendbuf(lbound(psendbuf,1)))) /= 8_jpib*(
isendcount - 1) .AND. &
224 IF( (loc(precvbuf(ubound(precvbuf,1))) - loc(precvbuf(lbound(precvbuf,1)))) /= 8_jpib*(
irecvcount - 1) .AND. &
235 & krecvcounts,irecvdispl,ksenddispl,krecvdispl,kmp_type,kcomm,cdstring)
237 CALL mpi_alltoallv(psendbuf(:),ksendcounts,isenddispl,int(mpi_real8), &
238 & precvbuf(:),krecvcounts,irecvdispl,int(mpi_real8),
icomm,
ierror)
240 IF(.NOT.
PRESENT(krequest))
CALL mpl_message(kerror,
'MPL_ALLTOALLV',
' KREQUEST MISSING',ldabort=
llabort)
241 CALL mpi_ialltoallv(psendbuf(:),ksendcounts,isenddispl,int(mpi_real8), &
242 & precvbuf(:),krecvcounts,irecvdispl,int(mpi_real8),
icomm,krequest,
ierror)
244 IF(
PRESENT(kerror))
THEN 251 IF(
PRESENT(kerror))
THEN 266 &KSENDDISPL,KRECVDISPL,KMP_TYPE,KCOMM,KERROR,KREQUEST,CDSTRING)
269 #ifdef USE_8_BYTE_WORDS 271 mpi_alltoallv => mpi_alltoallv8
276 INTEGER(KIND=JPIM),
INTENT(IN) :: KSENDCOUNTS(:), KRECVCOUNTS(:)
277 REAL(KIND=JPRM),
INTENT(IN) :: PSENDBUF(:)
278 REAL(KIND=JPRM),
INTENT(OUT) :: PRECVBUF(:)
279 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KSENDDISPL(:), KRECVDISPL(:), KCOMM ,KMP_TYPE
280 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
281 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KREQUEST,KERROR
290 IF( (loc(psendbuf(ubound(psendbuf,1))) - loc(psendbuf(lbound(psendbuf,1)))) /= 4_jpib*(
isendcount - 1) )
THEN 296 IF( (loc(precvbuf(ubound(precvbuf,1))) - loc(precvbuf(lbound(precvbuf,1)))) /= 4_jpib*(
irecvcount - 1) )
THEN 306 & krecvcounts,irecvdispl,ksenddispl,krecvdispl,kmp_type,kcomm,cdstring)
308 CALL mpi_alltoallv(psendbuf(:),ksendcounts,isenddispl,int(mpi_real4), &
309 & precvbuf(:),krecvcounts,irecvdispl,int(mpi_real4),
icomm,
ierror)
311 CALL mpi_ialltoallv(psendbuf(:),ksendcounts,isenddispl,int(mpi_real4), &
312 & precvbuf(:),krecvcounts,irecvdispl,int(mpi_real4),
icomm,krequest,
ierror)
314 IF(
PRESENT(kerror))
THEN 321 IF(
PRESENT(kerror))
THEN 337 &KSENDDISPL,KRECVDISPL,KMP_TYPE,KCOMM,KERROR,KREQUEST,CDSTRING)
340 #ifdef USE_8_BYTE_WORDS 342 mpi_alltoallv => mpi_alltoallv8
347 INTEGER(KIND=JPIM),
INTENT(IN) :: KSENDCOUNTS(:), KRECVCOUNTS(:)
348 INTEGER(KIND=JPIM),
INTENT(IN) :: KSENDBUF(:)
349 INTEGER(KIND=JPIM),
INTENT(OUT) :: KRECVBUF(:)
350 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KSENDDISPL(:), KRECVDISPL(:), KCOMM,KMP_TYPE
351 CHARACTER*(*),
INTENT(IN),
OPTIONAL :: CDSTRING
352 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KREQUEST,KERROR
361 IF( (loc(ksendbuf(ubound(ksendbuf,1))) - loc(ksendbuf(lbound(ksendbuf,1)))) /= 4_jpib*(
isendcount - 1) )
THEN 367 IF( (loc(krecvbuf(ubound(krecvbuf,1))) - loc(krecvbuf(lbound(krecvbuf,1)))) /= 4_jpib*(
irecvcount - 1) )
THEN 377 & krecvcounts,irecvdispl,ksenddispl,krecvdispl,kmp_type,kcomm,cdstring)
379 CALL mpi_alltoallv(ksendbuf(1),ksendcounts,isenddispl,int(mpi_integer), &
380 & krecvbuf(1),krecvcounts,irecvdispl,int(mpi_integer),
icomm,
ierror)
382 IF(.NOT.
PRESENT(krequest))
CALL mpl_message(kerror,
'MPL_ALLTOALLV',
' KREQUEST MISSING',ldabort=
llabort)
383 CALL mpi_ialltoallv(ksendbuf(1),ksendcounts,isenddispl,int(mpi_integer), &
384 & krecvbuf(1),krecvcounts,irecvdispl,int(mpi_integer),
icomm,krequest,
ierror)
386 IF(
PRESENT(kerror))
THEN 393 IF(
PRESENT(kerror))
THEN
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
subroutine mpl_alltoallv_preamb(KSENDCOUNTS, KISENDDISPL, KRECVCOUNTS, KIRECVDISPL, KSENDDISPL, KRECVDISPL, KMP_TYPE, KCOMM, CDSTRING)
integer(kind=jpim) imp_type
integer(kind=jpim), parameter jp_non_blocking_standard
subroutine mpl_alltoallv_real8(PSENDBUF, KSENDCOUNTS, PRECVBUF, KRECVCOUNTS, KSENDDISPL, KRECVDISPL, KMP_TYPE, KCOMM, KERROR, KREQUEST, CDSTRING)
integer(kind=jpim), dimension(:), allocatable mpl_comm_oml
integer(kind=jpim), parameter jp_blocking_standard
subroutine, public mpl_sendstats(ICOUNT, ITYPE)
integer(kind=jpim), parameter jp_non_blocking_buffered
integer(kind=jpim) mpl_errunit
integer(kind=jpim) ierror
subroutine mpl_alltoallv_integer(KSENDBUF, KSENDCOUNTS, KRECVBUF, KRECVCOUNTS, KSENDDISPL, KRECVDISPL, KMP_TYPE, KCOMM, KERROR, KREQUEST, CDSTRING)
intent(out) overrides sub arrays one Sort by the least significant key first sum(iindex(1:n))
integer(kind=jpim) mpl_method
integer(kind=jpim) isendcount
integer(kind=jpim) ipl_numproc
integer(kind=jpim) irecvcount
subroutine mpl_alltoallv_real4(PSENDBUF, KSENDCOUNTS, PRECVBUF, KRECVCOUNTS, KSENDDISPL, KRECVDISPL, KMP_TYPE, KCOMM, KERROR, KREQUEST, CDSTRING)