85 & KCOMM,KERROR,CDSTRING)
87 INTEGER(KIND=JPIM),
INTENT(INOUT) :: KSENDBUF
88 CHARACTER(LEN=*),
INTENT(IN) :: CDOPER
89 LOGICAL,
INTENT(IN),
OPTIONAL :: LDREPROD
90 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KCOMM
91 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KERROR
92 CHARACTER(LEN=*),
INTENT(IN),
OPTIONAL :: CDSTRING
93 INTEGER(KIND=JPIM) ISENDBUF(1)
95 isendbuf(1) = ksendbuf
96 CALL mpl_allreduce(isendbuf,cdoper,ldreprod,kcomm,kerror,cdstring)
97 ksendbuf = isendbuf(1)
102 & KCOMM,KERROR,CDSTRING)
103 INTEGER(KIND=JPIB),
INTENT(INOUT) :: KSENDBUF
104 CHARACTER(LEN=*),
INTENT(IN) :: CDOPER
105 LOGICAL,
INTENT(IN),
OPTIONAL :: LDREPROD
106 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KCOMM
107 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KERROR
108 CHARACTER(LEN=*),
INTENT(IN),
OPTIONAL :: CDSTRING
109 INTEGER(KIND=JPIB) ISENDBUF(1)
111 isendbuf(1) = ksendbuf
112 CALL mpl_allreduce(isendbuf,cdoper,ldreprod,kcomm,kerror,cdstring)
113 ksendbuf = isendbuf(1)
120 & KCOMM,KERROR,CDSTRING)
121 REAL(KIND=JPRD),
INTENT(INOUT) :: PSENDBUF
122 CHARACTER(LEN=*),
INTENT(IN) :: CDOPER
123 LOGICAL,
INTENT(IN),
OPTIONAL :: LDREPROD
124 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KCOMM
125 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KERROR
126 CHARACTER(LEN=*),
INTENT(IN),
OPTIONAL :: CDSTRING
127 REAL(KIND=JPRD) ZSENDBUF(1)
129 zsendbuf(1) = psendbuf
130 CALL mpl_allreduce(zsendbuf,cdoper,ldreprod,kcomm,kerror,cdstring)
131 psendbuf = zsendbuf(1)
137 & KCOMM,KERROR,CDSTRING)
138 REAL(KIND=JPRM),
INTENT(INOUT) :: PSENDBUF
139 CHARACTER(LEN=*),
INTENT(IN) :: CDOPER
140 LOGICAL,
INTENT(IN),
OPTIONAL :: LDREPROD
141 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KCOMM
142 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KERROR
143 CHARACTER(LEN=*),
INTENT(IN),
OPTIONAL :: CDSTRING
144 REAL(KIND=JPRM) ZSENDBUF(1)
146 zsendbuf(1) = psendbuf
147 CALL mpl_allreduce(zsendbuf,cdoper,ldreprod,kcomm,kerror,cdstring)
148 psendbuf = zsendbuf(1)
154 & KCOMM,KERROR,CDSTRING)
156 #ifdef USE_8_BYTE_WORDS 158 mpi_allreduce => mpi_allreduce8
161 INTEGER(KIND=JPIM),
INTENT(INOUT) :: KSENDBUF(:)
162 CHARACTER(LEN=*),
INTENT(IN) :: CDOPER
163 LOGICAL,
INTENT(IN),
OPTIONAL :: LDREPROD
164 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KCOMM
165 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KERROR
166 CHARACTER(LEN=*),
INTENT(IN),
OPTIONAL :: CDSTRING
167 INTEGER(KIND=JPIM) :: IRECVBUF(
size(ksendbuf))
168 INTEGER(KIND=JPIM) :: ISENDCOUNT,ICOMM,IERROR,IOPER
169 INTEGER(KIND=JPIM) :: ITID
170 itid = oml_my_thread()
173 & cdmessage=
'MPL_ALLREDUCE: MPL NOT INITIALISED ',ldabort=
llabort)
175 IF(cdoper(1:3) ==
'MAX' .OR. cdoper(1:3) ==
'max' )
THEN 177 ELSEIF(cdoper(1:3) ==
'MIN' .OR. cdoper(1:3) ==
'min' )
THEN 179 ELSEIF(cdoper(1:3) ==
'SUM' .OR. cdoper(1:3) ==
'sum' )
THEN 181 ELSEIF(cdoper(1:4) ==
'IEOR' .OR. cdoper(1:4) ==
'ieor' )
THEN 183 ELSEIF(cdoper(1:4) ==
'XOR' .OR. cdoper(1:4) ==
'xor' )
THEN 186 CALL mpl_message(ierror,
'MPL_ALLREDUCE: ERROR UNKNOWN OPERATOR',&
190 IF(
PRESENT(kcomm))
THEN 196 isendcount =
SIZE(ksendbuf)
198 IF (isendcount > 0)
THEN 200 IF( (loc(ksendbuf(ubound(ksendbuf,1)))-loc(ksendbuf(lbound(ksendbuf,1)))) /= 4_jpib*(isendcount - 1) )
THEN 207 CALL mpi_allreduce(ksendbuf,irecvbuf,isendcount,int(mpi_integer), &
208 & ioper,icomm,ierror)
216 WRITE(
mpl_unit,
'(A,5I8)')
' MPL_ALLREDUCE ',isendcount,icomm,ioper
218 IF(
PRESENT(kerror))
THEN 225 ksendbuf(:) = irecvbuf(:)
230 & KCOMM,KERROR,CDSTRING)
231 INTEGER(KIND=JPIB),
INTENT(INOUT) :: KSENDBUF(:)
232 CHARACTER(LEN=*),
INTENT(IN) :: CDOPER
233 LOGICAL,
INTENT(IN),
OPTIONAL :: LDREPROD
234 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KCOMM
235 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KERROR
236 CHARACTER(LEN=*),
INTENT(IN),
OPTIONAL :: CDSTRING
237 INTEGER(KIND=JPIB) :: IRECVBUF(
size(ksendbuf))
238 INTEGER(KIND=JPIM) :: ISENDCOUNT,ICOMM,IERROR,IOPER
239 INTEGER(KIND=JPIM) :: ITID
241 itid = oml_my_thread()
243 & cdmessage=
'MPL_ALLREDUCE: MPL NOT INITIALISED ',ldabort=
llabort)
245 IF(cdoper(1:3) ==
'MAX' .OR. cdoper(1:3) ==
'max' )
THEN 247 ELSEIF(cdoper(1:3) ==
'MIN' .OR. cdoper(1:3) ==
'min' )
THEN 249 ELSEIF(cdoper(1:3) ==
'SUM' .OR. cdoper(1:3) ==
'sum' )
THEN 251 ELSEIF(cdoper(1:4) ==
'IEOR' .OR. cdoper(1:4) ==
'ieor' )
THEN 253 ELSEIF(cdoper(1:4) ==
'XOR' .OR. cdoper(1:4) ==
'xor' )
THEN 256 CALL mpl_message(ierror,
'MPL_ALLREDUCE: ERROR UNKNOWN OPERATOR',&
260 IF(
PRESENT(kcomm))
THEN 266 isendcount =
SIZE(ksendbuf)
268 IF (isendcount > 0)
THEN 269 IF( (loc(ksendbuf(ubound(ksendbuf,1)))-loc(ksendbuf(lbound(ksendbuf,1)))) /= 8_jpib*(isendcount - 1) )
THEN 276 CALL mpi_allreduce(ksendbuf,irecvbuf,isendcount,mpi_integer8, &
277 & ioper,icomm,ierror)
285 WRITE(
mpl_unit,
'(A,5I8)')
' MPL_ALLREDUCE ',isendcount,icomm,ioper
287 IF(
PRESENT(kerror))
THEN 294 ksendbuf(:) = irecvbuf(:)
300 & KCOMM,KERROR,CDSTRING)
303 #ifdef USE_8_BYTE_WORDS 305 mpi_allreduce => mpi_allreduce8
308 REAL(KIND=JPRD),
INTENT(INOUT) :: PSENDBUF(:)
309 CHARACTER(LEN=*),
INTENT(IN) :: CDOPER
310 LOGICAL,
INTENT(IN),
OPTIONAL :: LDREPROD
311 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KCOMM
312 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KERROR
313 CHARACTER(LEN=*),
INTENT(IN),
OPTIONAL :: CDSTRING
314 REAL(KIND=JPRD) :: ZRECVBUF(
size(psendbuf))
315 INTEGER(KIND=JPIM) ITAG, ICOUNT
317 INTEGER(KIND=JPIM) :: ISENDCOUNT,ICOMM,IERROR,IOPER
318 INTEGER(KIND=JPIM) :: IP2,II,IHALF,JSTAGE,ISEND,IRECV,IMSENT
320 INTEGER(KIND=JPIM) :: ITID
322 itid = oml_my_thread()
323 llreprodsum = .false.
326 & cdmessage=
'MPL_ALLREDUCE: MPL NOT INITIALISED ',ldabort=
llabort)
328 IF(cdoper(1:3) ==
'MAX' .OR. cdoper(1:3) ==
'max' )
THEN 330 ELSEIF(cdoper(1:3) ==
'MIN' .OR. cdoper(1:3) ==
'min' )
THEN 332 ELSEIF(cdoper(1:3) ==
'SUM' .OR. cdoper(1:3) ==
'sum' )
THEN 334 IF (
PRESENT(ldreprod))
THEN 335 llreprodsum = ldreprod
338 &
'MPL_ALLREDUCE: SUMMATION OPERATOR NOT REPRODUCIBLE IN REAL MODE',&
342 CALL mpl_message(ierror,
'MPL_ALLREDUCE: ERROR UNKNOWN OPERATOR',&
346 IF(
PRESENT(kcomm))
THEN 352 isendcount =
SIZE(psendbuf)
354 IF (isendcount > 0)
THEN 355 IF( (loc(psendbuf(ubound(psendbuf,1)))-loc(psendbuf(lbound(psendbuf,1)))) /= 8_jpib*(isendcount - 1) )
THEN 361 IF (llreprodsum)
THEN 377 IF(isend > 0 .AND.
mpl_rank <= ii)
THEN 379 CALL mpl_send(psendbuf,kdest=isend,kcomm=icomm,ktag=itag,kerror=ierror,&
385 CALL mpl_recv(zrecvbuf,ksource=irecv,kcomm=icomm,ktag=itag,&
386 &kerror=ierror,kount=icount)
388 psendbuf(:) = psendbuf(:) + zrecvbuf(:)
392 CALL mpl_wait(psendbuf,krequest=isreq(1:imsent),cdstring=
'MPLS_SEND')
395 zrecvbuf(:) = psendbuf(:)
398 CALL mpl_broadcast(zrecvbuf,ktag=itag,kcomm=icomm,kroot=1,kerror=ierror)
427 CALL mpi_allreduce(psendbuf,zrecvbuf,isendcount,int(mpi_real8), &
428 & ioper,icomm,ierror)
438 WRITE(
mpl_unit,
'(A,5I8)')
' MPL_ALLREDUCE ',isendcount,icomm,ioper
440 IF(
PRESENT(kerror))
THEN 447 psendbuf(:) = zrecvbuf(:)
453 & KCOMM,KERROR,CDSTRING)
456 #ifdef USE_8_BYTE_WORDS 458 mpi_allreduce => mpi_allreduce8
461 REAL(KIND=JPRM),
INTENT(INOUT) :: PSENDBUF(:)
462 CHARACTER(LEN=*),
INTENT(IN) :: CDOPER
463 LOGICAL,
INTENT(IN),
OPTIONAL :: LDREPROD
464 INTEGER(KIND=JPIM),
INTENT(IN),
OPTIONAL :: KCOMM
465 INTEGER(KIND=JPIM),
INTENT(OUT),
OPTIONAL :: KERROR
466 CHARACTER(LEN=*),
INTENT(IN),
OPTIONAL :: CDSTRING
467 REAL(KIND=JPRM) :: ZRECVBUF(
size(psendbuf))
468 INTEGER(KIND=JPIM) IPROC, ITAG, ICOUNT
470 INTEGER(KIND=JPIM) :: ISENDCOUNT,ICOMM,IERROR,IOPER
471 INTEGER(KIND=JPIM) :: ITID
473 itid = oml_my_thread()
474 llreprodsum = .false.
477 & cdmessage=
'MPL_ALLREDUCE: MPL NOT INITIALISED ',ldabort=
llabort)
479 IF(cdoper(1:3) ==
'MAX' .OR. cdoper(1:3) ==
'max' )
THEN 481 ELSEIF(cdoper(1:3) ==
'MIN' .OR. cdoper(1:3) ==
'min' )
THEN 483 ELSEIF(cdoper(1:3) ==
'SUM' .OR. cdoper(1:3) ==
'sum' )
THEN 485 IF (
PRESENT(ldreprod))
THEN 486 llreprodsum = ldreprod
489 &
'MPL_ALLREDUCE: SUMMATION OPERATOR NOT REPRODUCIBLE IN REAL MODE',&
493 CALL mpl_message(ierror,
'MPL_ALLREDUCE: ERROR UNKNOWN OPERATOR',&
497 IF(
PRESENT(kcomm))
THEN 503 isendcount =
SIZE(psendbuf)
505 IF (isendcount > 0)
THEN 506 IF( (loc(psendbuf(ubound(psendbuf,1)))-loc(psendbuf(lbound(psendbuf,1)))) /= 4_jpib*(isendcount - 1) )
THEN 512 IF (llreprodsum)
THEN 517 CALL mpl_recv(zrecvbuf,ksource=iproc,kcomm=icomm,ktag=itag,&
518 &kerror=ierror,kount=icount)
519 IF (icount /= isendcount)
THEN 521 &
'MPL_ALLREDUCE: RECEIVED UNEXPECTED NUMBER OF ELEMENTS ', &
522 & icount,
' FROM PROC ',iproc,
'. EXPECTED=',isendcount
525 psendbuf(:) = psendbuf(:) + zrecvbuf(:)
527 zrecvbuf(:) = psendbuf(:)
529 CALL mpl_send(psendbuf,kdest=1,kcomm=icomm,ktag=itag,kerror=ierror,&
533 CALL mpl_broadcast(zrecvbuf,ktag=itag,kcomm=icomm,kroot=1,kerror=ierror)
536 CALL mpi_allreduce(psendbuf,zrecvbuf,isendcount,int(mpi_real4), &
537 & ioper,icomm,ierror)
547 WRITE(
mpl_unit,
'(A,5I8)')
' MPL_ALLREDUCE ',isendcount,icomm,ioper
549 IF(
PRESENT(kerror))
THEN 556 psendbuf(:) = zrecvbuf(:)
subroutine, public mpl_message(KERROR, CDMESSAGE, CDSTRING, LDABORT)
subroutine mpl_allreduce_real8(PSENDBUF, CDOPER, LDREPROD, KCOMM, KERROR, CDSTRING)
subroutine, public mpl_recvstats(ICOUNT, ITYPE)
integer(kind=jpim) mpl_numproc
subroutine mpl_allreduce_int_scalar(KSENDBUF, CDOPER, LDREPROD, KCOMM, KERROR, CDSTRING)
integer(kind=jpim), parameter jp_non_blocking_standard
integer(kind=jpim), dimension(:), allocatable mpl_comm_oml
integer(kind=jpim), parameter jp_blocking_standard
subroutine, public mpl_sendstats(ICOUNT, ITYPE)
integer(kind=jpim) mpl_errunit
subroutine mpl_allreduce_real4_scalar(PSENDBUF, CDOPER, LDREPROD, KCOMM, KERROR, CDSTRING)
subroutine mpl_allreduce_real8_scalar(PSENDBUF, CDOPER, LDREPROD, KCOMM, KERROR, CDSTRING)
subroutine mpl_allreduce_int8(KSENDBUF, CDOPER, LDREPROD, KCOMM, KERROR, CDSTRING)
subroutine mpl_allreduce_real4(PSENDBUF, CDOPER, LDREPROD, KCOMM, KERROR, CDSTRING)
integer(kind=jpim) mpl_rank
subroutine mpl_allreduce_int(KSENDBUF, CDOPER, LDREPROD, KCOMM, KERROR, CDSTRING)
integer(kind=jpim) mpl_unit
integer(kind=jpim) mpl_output
subroutine mpl_allreduce_int8_scalar(KSENDBUF, CDOPER, LDREPROD, KCOMM, KERROR, CDSTRING)