SURFEX v8.1
General documentation of Surfex
mpl_send_mod.F90
Go to the documentation of this file.
1 #ifdef RS6K
2 @process nocheck
3 #endif
5 
6 !**** MPL_SEND Send a message
7 
8 ! Purpose.
9 ! --------
10 ! Send a message to a named source from a buffer.
11 ! The data may be REAL*4, REAL*8,or INTEGER, one dimensional array
12 ! REAL*4,or REAL*8, two dimensional array
13 ! or INTEGER scalar
14 
15 !** Interface.
16 ! ----------
17 ! CALL MPL_SEND
18 
19 ! Input required arguments :
20 ! -------------------------
21 ! PBUF - buffer containing message
22 ! (can be type REAL*4, REAL*8 or INTEGER)
23 ! KTAG - message tag
24 ! KDEST - rank of process to receive the message
25 
26 ! Input optional arguments :
27 ! -------------------------
28 ! KCOMM - Communicator number if different from MPI_COMM_WORLD
29 ! or from that established as the default
30 ! by an MPL communicator routine
31 ! KMP_TYPE - buffering type (see MPL_BUFFER_METHOD)
32 ! overrides value provided to MPL_BUFFER_METHOD
33 ! CDSTRING - Character string for ABORT messages
34 ! used when KERROR is not provided
35 
36 ! Output required arguments :
37 ! -------------------------
38 ! none
39 
40 ! Output optional arguments :
41 ! -------------------------
42 ! KREQUEST - Communication request
43 ! required when buffering type is non-blocking
44 ! KERROR - return error code. If not supplied,
45 ! MPL_SEND aborts when an error is detected.
46 ! Author.
47 ! -------
48 ! D.Dent, M.Hamrud ECMWF
49 
50 ! Modifications.
51 ! --------------
52 ! Original: 2000-09-01
53 ! P. Marguinaud : 01-Jan-2011 : Do not raise an error when
54 ! the numproc is beyond model limits and KCOMM is passed
55 ! as argument
56 ! F. Vana 05-Mar-2015 Support for single precision
57 ! ------------------------------------------------------------------
58 
59 USE parkind1 , ONLY : jprd, jpim, jpib, jprm
60 
61 USE mpl_mpif
64 USE mpl_nproc_mod
65 USE mpl_stats_mod
66 USE yommplstats
67 
68 IMPLICIT NONE
69 
70 PRIVATE
71 
72 !---Moved into subroutines to keep threadsafe----
73 ! INTEGER(KIND=JPIM) :: ICOUNT,IMP_TYPE,ICOMM,IERROR
74 ! LOGICAL :: LLABORT=.TRUE.
75 
76 INTERFACE mpl_send
77 MODULE PROCEDURE mpl_send_real4, mpl_send_real8,&
83 END INTERFACE
84 
85 PUBLIC mpl_send
86 
87 CONTAINS
88 
89 SUBROUTINE mpl_send_real4(PBUF,KDEST,KTAG,KCOMM,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
90 
91 
92 #ifdef USE_8_BYTE_WORDS
93  USE mpi4to8, ONLY : &
94  mpi_send => mpi_send8, mpi_bsend => mpi_bsend8, mpi_isend => mpi_isend8
95 #endif
96 
97 
98 ! real_m,intent(in) :: PBUF(:)
99 REAL(KIND=JPRM) :: PBUF(:)
100 INTEGER(KIND=JPIM),INTENT(IN) :: KDEST,KTAG
101 INTEGER(KIND=JPIM),INTENT(IN),OPTIONAL :: KCOMM,KMP_TYPE
102 INTEGER(KIND=JPIM),INTENT(OUT),OPTIONAL :: KREQUEST,KERROR
103 CHARACTER*(*),INTENT(IN),OPTIONAL :: CDSTRING
104 
105 INTEGER(KIND=JPIM) :: ICOUNT,IMP_TYPE,ICOMM,IERROR
106 LOGICAL :: LLABORT=.true.
107 INTEGER(KIND=JPIM) :: ITID
108 REAL(KIND=JPRM) :: ZDUM(1:0)
109 itid = oml_my_thread()
110 
111 IF(mpl_numproc < 1) CALL mpl_message( &
112  & cdmessage='MPL_SEND: MPL NOT INITIALISED ',ldabort=llabort)
113 
114 IF(PRESENT(kmp_type)) THEN
115  imp_type=kmp_type
116 ELSE
117  imp_type=mpl_method
118 ENDIF
119 IF(PRESENT(kcomm)) THEN
120  icomm=kcomm
121 ELSE
122  icomm=mpl_comm_oml(itid)
123 ENDIF
124 IF((kdest < 1 .OR. kdest >mpl_nproc(icomm)) .AND. (.NOT. PRESENT (kcomm))) THEN
125  WRITE(mpl_errunit,*)'MPL_SEND: ERROR KDEST=',kdest
126  CALL mpl_message(cdmessage='MPL_SEND:ILLEGAL KDEST ',ldabort=llabort)
127 ENDIF
128 
129 icount = SIZE(pbuf)
130 #ifndef NAG
131 IF (icount > 0) THEN
132  IF( (loc(pbuf(ubound(pbuf,1))) - loc(pbuf(lbound(pbuf,1)))) /= 4_jpib*(icount - 1) ) THEN
133  CALL mpl_message(cdmessage='MPL_SEND: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
134  ENDIF
135 ENDIF
136 #endif
137 
138 IF(lmplstats) THEN
139  CALL mpl_sendstats(icount,int(mpi_real4))
140 ENDIF
141 
142 IF (icount == 0) THEN
143  IF(imp_type == jp_blocking_standard) THEN
144  CALL mpi_send(zdum,icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
145  ELSE IF(imp_type == jp_blocking_buffered) THEN
146  CALL mpi_bsend(zdum,icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
147  ELSE IF(imp_type == jp_non_blocking_standard) THEN
148  CALL mpi_isend(zdum,icount,int(mpi_real4),kdest-1,ktag,icomm, &
149  & krequest,ierror)
150  ELSE IF(imp_type == jp_non_blocking_buffered) THEN
151  CALL mpi_ibsend(zdum,icount,int(mpi_real4),kdest-1,ktag,icomm, &
152  & krequest,ierror)
153  ELSE IF(imp_type == jp_blocking_synchronous) THEN
154  CALL mpi_ssend(zdum,icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
155  ELSE
156  IF(PRESENT(kerror)) THEN
157  kerror=1
158  ELSE
159  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
160  ENDIF
161  ENDIF
162 ELSE
163  IF(imp_type == jp_blocking_standard) THEN
164  CALL mpi_send(pbuf(1),icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
165  ELSE IF(imp_type == jp_blocking_buffered) THEN
166  CALL mpi_bsend(pbuf(1),icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
167  ELSE IF(imp_type == jp_non_blocking_standard) THEN
168  CALL mpi_isend(pbuf(1),icount,int(mpi_real4),kdest-1,ktag,icomm, &
169  & krequest,ierror)
170  ELSE IF(imp_type == jp_non_blocking_buffered) THEN
171  CALL mpi_ibsend(pbuf(1),icount,int(mpi_real4),kdest-1,ktag,icomm, &
172  & krequest,ierror)
173  ELSE IF(imp_type == jp_blocking_synchronous) THEN
174  CALL mpi_ssend(pbuf(1),icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
175  ELSE
176  IF(PRESENT(kerror)) THEN
177  kerror=1
178  ELSE
179  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
180  ENDIF
181  ENDIF
182 ENDIF
183 IF(mpl_output > 1 )THEN
184  WRITE(mpl_unit,'(A,5I8)') ' MPL_SEND ',icount,imp_type,kdest,ktag,icomm
185 ENDIF
186 IF(PRESENT(kerror)) THEN
187  kerror=ierror
188 ELSE
189  IF(ierror /= 0 ) CALL mpl_message(ierror,'MPL_SEND',cdstring,ldabort=llabort)
190 ENDIF
191 
192 END SUBROUTINE mpl_send_real4
193 
194 SUBROUTINE mpl_send_real8(PBUF,KDEST,KTAG,KCOMM,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
196 #ifdef USE_8_BYTE_WORDS
197  USE mpi4to8, ONLY : &
198  mpi_send => mpi_send8, mpi_bsend => mpi_bsend8, mpi_isend => mpi_isend8
199 #endif
200 
201 ! real_b,intent(in) :: PBUF(:)
202 REAL(KIND=JPRD) :: PBUF(:)
203 INTEGER(KIND=JPIM),INTENT(IN) :: KDEST,KTAG
204 INTEGER(KIND=JPIM),INTENT(IN),OPTIONAL :: KCOMM,KMP_TYPE
205 INTEGER(KIND=JPIM),INTENT(OUT),OPTIONAL :: KREQUEST,KERROR
206 CHARACTER*(*),INTENT(IN),OPTIONAL :: CDSTRING
207 
208 
209 INTEGER(KIND=JPIM) :: ICOUNT,IMP_TYPE,ICOMM,IERROR
210 LOGICAL :: LLABORT=.true.
211 INTEGER(KIND=JPIM) :: ITID
212 REAL(KIND=JPRD) :: ZDUM(1:0)
213 itid = oml_my_thread()
214 
215 IF(mpl_numproc < 1) CALL mpl_message( &
216  & cdmessage='MPL_SEND: MPL NOT INITIALISED ',ldabort=llabort)
217 
218 IF(PRESENT(kmp_type)) THEN
219  imp_type=kmp_type
220 ELSE
221  imp_type=mpl_method
222 ENDIF
223 IF(PRESENT(kcomm)) THEN
224  icomm=kcomm
225 ELSE
226  icomm=mpl_comm_oml(itid)
227 ENDIF
228 IF((kdest < 1 .OR. kdest >mpl_nproc(icomm)) .AND. (.NOT. PRESENT (kcomm))) THEN
229  WRITE(mpl_errunit,*)'MPL_SEND: ERROR KDEST=',kdest
230  CALL mpl_message(cdmessage='MPL_SEND:ILLEGAL KDEST ',ldabort=llabort)
231 ENDIF
232 
233 icount = SIZE(pbuf)
234 #ifndef NAG
235 IF (icount > 0) THEN
236  IF( (loc(pbuf(ubound(pbuf,1))) - loc(pbuf(lbound(pbuf,1)))) /= 8_jpib*(icount - 1) ) THEN
237  CALL mpl_message(cdmessage='MPL_SEND: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
238  ENDIF
239 ENDIF
240 #endif
241 
242 IF(lmplstats) THEN
243  CALL mpl_sendstats(icount,int(mpi_real8))
244 ENDIF
245 
246 IF (icount == 0) THEN
247  IF(imp_type == jp_blocking_standard) THEN
248  CALL mpi_send(zdum,icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
249  ELSE IF(imp_type == jp_blocking_buffered) THEN
250  CALL mpi_bsend(zdum,icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
251  ELSE IF(imp_type == jp_non_blocking_standard) THEN
252  CALL mpi_isend(zdum,icount,int(mpi_real8),kdest-1,ktag,icomm, &
253  & krequest,ierror)
254  ELSE IF(imp_type == jp_non_blocking_buffered) THEN
255  CALL mpi_ibsend(zdum,icount,int(mpi_real8),kdest-1,ktag,icomm, &
256  & krequest,ierror)
257  ELSE IF(imp_type == jp_blocking_synchronous) THEN
258  CALL mpi_ssend(zdum,icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
259  ELSE
260  IF(PRESENT(kerror)) THEN
261  kerror=1
262  ELSE
263  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
264  ENDIF
265  ENDIF
266 ELSE
267  IF(imp_type == jp_blocking_standard) THEN
268  CALL mpi_send(pbuf(1),icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
269  ELSE IF(imp_type == jp_blocking_buffered) THEN
270  CALL mpi_bsend(pbuf(1),icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
271  ELSE IF(imp_type == jp_non_blocking_standard) THEN
272  CALL mpi_isend(pbuf(1),icount,int(mpi_real8),kdest-1,ktag,icomm, &
273  & krequest,ierror)
274  ELSE IF(imp_type == jp_non_blocking_buffered) THEN
275  CALL mpi_ibsend(pbuf(1),icount,int(mpi_real8),kdest-1,ktag,icomm, &
276  & krequest,ierror)
277  ELSE IF(imp_type == jp_blocking_synchronous) THEN
278  CALL mpi_ssend(pbuf(1),icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
279  ELSE
280  IF(PRESENT(kerror)) THEN
281  kerror=1
282  ELSE
283  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
284  ENDIF
285  ENDIF
286 ENDIF
287 IF(mpl_output > 1 )THEN
288  WRITE(mpl_unit,'(A,5I8)') ' MPL_SEND ',icount,imp_type,kdest,ktag,icomm
289 ENDIF
290 IF(PRESENT(kerror)) THEN
291  kerror=ierror
292 ELSE
293  IF(ierror /= 0 ) CALL mpl_message(ierror,'MPL_SEND',cdstring,ldabort=llabort)
294 ENDIF
295 
296 END SUBROUTINE mpl_send_real8
297 
298 SUBROUTINE mpl_send_int(KBUF,KDEST,KTAG,KCOMM,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
300 #ifdef USE_8_BYTE_WORDS
301  USE mpi4to8, ONLY : &
302  mpi_send => mpi_send8, mpi_bsend => mpi_bsend8, mpi_isend => mpi_isend8
303 #endif
304 
305 INTEGER(KIND=JPIM) :: KBUF(:)
306 INTEGER(KIND=JPIM),INTENT(IN) :: KDEST,KTAG
307 INTEGER(KIND=JPIM),INTENT(IN),OPTIONAL :: KCOMM,KMP_TYPE
308 INTEGER(KIND=JPIM),INTENT(OUT),OPTIONAL :: KREQUEST,KERROR
309 CHARACTER*(*),INTENT(IN),OPTIONAL :: CDSTRING
310 
311 INTEGER(KIND=JPIM) :: ICOUNT,IMP_TYPE,ICOMM,IERROR
312 LOGICAL :: LLABORT=.true.
313 INTEGER(KIND=JPIM) :: ITID,IDUM(1:0)
314 itid = oml_my_thread()
315 
316 IF(mpl_numproc < 1) CALL mpl_message( &
317  & cdmessage='MPL_SEND: MPL NOT INITIALISED ',ldabort=llabort)
318 
319 IF(PRESENT(kmp_type)) THEN
320  imp_type=kmp_type
321 ELSE
322  imp_type=mpl_method
323 ENDIF
324 IF(PRESENT(kcomm)) THEN
325  icomm=kcomm
326 ELSE
327  icomm=mpl_comm_oml(itid)
328 ENDIF
329 IF((kdest < 1 .OR. kdest >mpl_nproc(icomm)) .AND. (.NOT. PRESENT (kcomm))) THEN
330  WRITE(mpl_errunit,*)'MPL_SEND: ERROR KDEST=',kdest
331  CALL mpl_message(cdmessage='MPL_SEND:ILLEGAL KDEST ',ldabort=llabort)
332 ENDIF
333 
334 icount = SIZE(kbuf)
335 #ifndef NAG
336 IF (icount > 0) THEN
337  IF( (loc(kbuf(ubound(kbuf,1)))-loc(kbuf(lbound(kbuf,1)))) /= 4_jpib*(icount - 1) ) THEN
338  CALL mpl_message(cdmessage='MPL_SEND: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
339  ENDIF
340 ENDIF
341 #endif
342 
343 IF(lmplstats) THEN
344  CALL mpl_sendstats(icount,int(mpi_integer))
345 ENDIF
346 
347 IF (icount == 0) THEN
348  IF(imp_type == jp_blocking_standard) THEN
349  CALL mpi_send(idum,icount,int(mpi_integer),kdest-1,ktag,icomm,ierror)
350  ELSE IF(imp_type == jp_blocking_buffered) THEN
351  CALL mpi_bsend(idum,icount,int(mpi_integer),kdest-1,ktag,icomm,ierror)
352  ELSE IF(imp_type == jp_non_blocking_standard) THEN
353  CALL mpi_isend(idum,icount,int(mpi_integer),kdest-1,ktag,icomm, &
354  & krequest,ierror)
355  ELSE IF(imp_type == jp_non_blocking_buffered) THEN
356  CALL mpi_ibsend(idum,icount,int(mpi_integer),kdest-1,ktag,icomm, &
357  & krequest,ierror)
358  ELSE IF(imp_type == jp_blocking_synchronous) THEN
359  CALL mpi_ssend(idum,icount,int(mpi_integer),kdest-1,ktag,icomm,ierror)
360  ELSE
361  IF(PRESENT(kerror)) THEN
362  kerror=1
363  ELSE
364  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
365  ENDIF
366  ENDIF
367 ELSE
368  IF(imp_type == jp_blocking_standard) THEN
369  CALL mpi_send(kbuf(1),icount,int(mpi_integer),kdest-1,ktag,icomm,ierror)
370  ELSE IF(imp_type == jp_blocking_buffered) THEN
371  CALL mpi_bsend(kbuf(1),icount,int(mpi_integer),kdest-1,ktag,icomm,ierror)
372  ELSE IF(imp_type == jp_non_blocking_standard) THEN
373  CALL mpi_isend(kbuf(1),icount,int(mpi_integer),kdest-1,ktag,icomm, &
374  & krequest,ierror)
375  ELSE IF(imp_type == jp_non_blocking_buffered) THEN
376  CALL mpi_ibsend(kbuf(1),icount,int(mpi_integer),kdest-1,ktag,icomm, &
377  & krequest,ierror)
378  ELSE IF(imp_type == jp_blocking_synchronous) THEN
379  CALL mpi_ssend(kbuf(1),icount,int(mpi_integer),kdest-1,ktag,icomm,ierror)
380  ELSE
381  IF(PRESENT(kerror)) THEN
382  kerror=1
383  ELSE
384  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
385  ENDIF
386  ENDIF
387 ENDIF
388 IF(mpl_output > 1 )THEN
389  WRITE(mpl_unit,'(A,5I8)') ' MPL_SEND ',icount,imp_type,kdest,ktag,icomm
390 ENDIF
391 IF(PRESENT(kerror)) THEN
392  kerror=ierror
393 ELSE
394  IF(ierror /= 0 ) CALL mpl_message(ierror,'MPL_SEND',cdstring,ldabort=llabort)
395 ENDIF
396 
397 END SUBROUTINE mpl_send_int
398 
399 SUBROUTINE mpl_send_int2(KBUF,KDEST,KTAG,KCOMM,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
401 #ifdef USE_8_BYTE_WORDS
402  USE mpi4to8, ONLY : &
403  mpi_send => mpi_send8, mpi_bsend => mpi_bsend8, mpi_isend => mpi_isend8
404 #endif
405 
406 INTEGER(KIND=JPIM) :: KBUF(:,:)
407 INTEGER(KIND=JPIM),INTENT(IN) :: KDEST,KTAG
408 INTEGER(KIND=JPIM),INTENT(IN),OPTIONAL :: KCOMM,KMP_TYPE
409 INTEGER(KIND=JPIM),INTENT(OUT),OPTIONAL :: KREQUEST,KERROR
410 CHARACTER*(*),INTENT(IN),OPTIONAL :: CDSTRING
411 
412 INTEGER(KIND=JPIM) :: ICOUNT,IMP_TYPE,ICOMM,IERROR
413 LOGICAL :: LLABORT=.true.
414 INTEGER(KIND=JPIM) :: ITID,IDUM(1:0)
415 itid = oml_my_thread()
416 
417 IF(mpl_numproc < 1) CALL mpl_message( &
418  & cdmessage='MPL_SEND: MPL NOT INITIALISED ',ldabort=llabort)
419 
420 IF(PRESENT(kmp_type)) THEN
421  imp_type=kmp_type
422 ELSE
423  imp_type=mpl_method
424 ENDIF
425 IF(PRESENT(kcomm)) THEN
426  icomm=kcomm
427 ELSE
428  icomm=mpl_comm_oml(itid)
429 ENDIF
430 IF((kdest < 1 .OR. kdest >mpl_nproc(icomm)) .AND. (.NOT. PRESENT (kcomm))) THEN
431  WRITE(mpl_errunit,*)'MPL_SEND: ERROR KDEST=',kdest
432  CALL mpl_message(cdmessage='MPL_SEND:ILLEGAL KDEST ',ldabort=llabort)
433 ENDIF
434 
435 icount = SIZE(kbuf)
436 #ifndef NAG
437 IF (icount > 0) THEN
438  IF( (loc(kbuf(ubound(kbuf,1),ubound(kbuf,2))) - &
439  & loc(kbuf(lbound(kbuf,1),lbound(kbuf,2)))) /= 4_jpib*(icount - 1) ) THEN
440  CALL mpl_message(cdmessage='MPL_SEND: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
441  ENDIF
442 ENDIF
443 #endif
444 
445 IF(lmplstats) THEN
446  CALL mpl_sendstats(icount,int(mpi_integer))
447 ENDIF
448 
449 IF (icount == 0) THEN
450  IF(imp_type == jp_blocking_standard) THEN
451  CALL mpi_send(idum,icount,int(mpi_integer),kdest-1,ktag,icomm,ierror)
452  ELSE IF(imp_type == jp_blocking_buffered) THEN
453  CALL mpi_bsend(idum,icount,int(mpi_integer),kdest-1,ktag,icomm,ierror)
454  ELSE IF(imp_type == jp_non_blocking_standard) THEN
455  CALL mpi_isend(idum,icount,int(mpi_integer),kdest-1,ktag,icomm, &
456  & krequest,ierror)
457  ELSE IF(imp_type == jp_non_blocking_buffered) THEN
458  CALL mpi_ibsend(idum,icount,int(mpi_integer),kdest-1,ktag,icomm, &
459  & krequest,ierror)
460  ELSE IF(imp_type == jp_blocking_synchronous) THEN
461  CALL mpi_ssend(idum,icount,int(mpi_integer),kdest-1,ktag,icomm,ierror)
462  ELSE
463  IF(PRESENT(kerror)) THEN
464  kerror=1
465  ELSE
466  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
467  ENDIF
468  ENDIF
469 ELSE
470  IF(imp_type == jp_blocking_standard) THEN
471  CALL mpi_send(kbuf(1,1),icount,int(mpi_integer),kdest-1,ktag,icomm,ierror)
472  ELSE IF(imp_type == jp_blocking_buffered) THEN
473  CALL mpi_bsend(kbuf(1,1),icount,int(mpi_integer),kdest-1,ktag,icomm,ierror)
474  ELSE IF(imp_type == jp_non_blocking_standard) THEN
475  CALL mpi_isend(kbuf(1,1),icount,int(mpi_integer),kdest-1,ktag,icomm, &
476  & krequest,ierror)
477  ELSE IF(imp_type == jp_non_blocking_buffered) THEN
478  CALL mpi_ibsend(kbuf(1,1),icount,int(mpi_integer),kdest-1,ktag,icomm, &
479  & krequest,ierror)
480  ELSE IF(imp_type == jp_blocking_synchronous) THEN
481  CALL mpi_ssend(kbuf(1,1),icount,int(mpi_integer),kdest-1,ktag,icomm,ierror)
482  ELSE
483  IF(PRESENT(kerror)) THEN
484  kerror=1
485  ELSE
486  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
487  ENDIF
488  ENDIF
489 ENDIF
490 IF(mpl_output > 1 )THEN
491  WRITE(mpl_unit,'(A,5I8)') ' MPL_SEND ',icount,imp_type,kdest,ktag,icomm
492 ENDIF
493 IF(PRESENT(kerror)) THEN
494  kerror=ierror
495 ELSE
496  IF(ierror /= 0 ) CALL mpl_message(ierror,'MPL_SEND',cdstring,ldabort=llabort)
497 ENDIF
498 
499 END SUBROUTINE mpl_send_int2
500 
501 SUBROUTINE mpl_send_int8(KBUF,KDEST,KTAG,KCOMM,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
503 #ifdef USE_8_BYTE_WORDS
504  USE mpi4to8, ONLY : &
505  mpi_send => mpi_send8, mpi_bsend => mpi_bsend8, mpi_isend => mpi_isend8
506 #endif
507 
508 INTEGER(KIND=JPIB) :: KBUF(:)
509 INTEGER(KIND=JPIM),INTENT(IN) :: KDEST,KTAG
510 INTEGER(KIND=JPIM),INTENT(IN),OPTIONAL :: KCOMM,KMP_TYPE
511 INTEGER(KIND=JPIM),INTENT(OUT),OPTIONAL :: KREQUEST,KERROR
512 CHARACTER*(*),INTENT(IN),OPTIONAL :: CDSTRING
513 
514 INTEGER(KIND=JPIM) :: ICOUNT,IMP_TYPE,ICOMM,IERROR
515 LOGICAL :: LLABORT=.true.
516 INTEGER(KIND=JPIM) :: ITID
517 INTEGER(KIND=JPIB) :: IDUM(1:0)
518 itid = oml_my_thread()
519 
520 IF(mpl_numproc < 1) CALL mpl_message( &
521  & cdmessage='MPL_SEND: MPL NOT INITIALISED ',ldabort=llabort)
522 
523 IF(PRESENT(kmp_type)) THEN
524  imp_type=kmp_type
525 ELSE
526  imp_type=mpl_method
527 ENDIF
528 IF(PRESENT(kcomm)) THEN
529  icomm=kcomm
530 ELSE
531  icomm=mpl_comm_oml(itid)
532 ENDIF
533 IF((kdest < 1 .OR. kdest >mpl_nproc(icomm)) .AND. (.NOT. PRESENT (kcomm))) THEN
534  WRITE(mpl_errunit,*)'MPL_SEND: ERROR KDEST=',kdest
535  CALL mpl_message(cdmessage='MPL_SEND:ILLEGAL KDEST ',ldabort=llabort)
536 ENDIF
537 
538 icount = SIZE(kbuf)
539 #ifndef NAG
540 IF (icount > 0) THEN
541  IF( (loc(kbuf(ubound(kbuf,1))) - loc(kbuf(lbound(kbuf,1)))) /= 8_jpib*(icount - 1) ) THEN
542  CALL mpl_message(cdmessage='MPL_SEND: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
543  ENDIF
544 ENDIF
545 #endif
546 IF(lmplstats) THEN
547  CALL mpl_sendstats(icount,int(mpi_integer8))
548 ENDIF
549 
550 IF (icount == 0) THEN
551  IF(imp_type == jp_blocking_standard) THEN
552  CALL mpi_send(idum,icount,int(mpi_integer8),kdest-1,ktag,icomm,ierror)
553  ELSE IF(imp_type == jp_blocking_buffered) THEN
554  CALL mpi_bsend(idum,icount,int(mpi_integer8),kdest-1,ktag,icomm,ierror)
555  ELSE IF(imp_type == jp_non_blocking_standard) THEN
556  CALL mpi_isend(idum,icount,int(mpi_integer8),kdest-1,ktag,icomm, &
557  & krequest,ierror)
558  ELSE IF(imp_type == jp_non_blocking_buffered) THEN
559  CALL mpi_ibsend(idum,icount,int(mpi_integer8),kdest-1,ktag,icomm, &
560  & krequest,ierror)
561  ELSE IF(imp_type == jp_blocking_synchronous) THEN
562  CALL mpi_ssend(idum,icount,int(mpi_integer8),kdest-1,ktag,icomm,ierror)
563  ELSE
564  IF(PRESENT(kerror)) THEN
565  kerror=1
566  ELSE
567  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
568  ENDIF
569  ENDIF
570 ELSE
571  IF(imp_type == jp_blocking_standard) THEN
572  CALL mpi_send(kbuf(1),icount,int(mpi_integer8),kdest-1,ktag,icomm,ierror)
573  ELSE IF(imp_type == jp_blocking_buffered) THEN
574  CALL mpi_bsend(kbuf(1),icount,int(mpi_integer8),kdest-1,ktag,icomm,ierror)
575  ELSE IF(imp_type == jp_non_blocking_standard) THEN
576  CALL mpi_isend(kbuf(1),icount,int(mpi_integer8),kdest-1,ktag,icomm, &
577  & krequest,ierror)
578  ELSE IF(imp_type == jp_non_blocking_buffered) THEN
579  CALL mpi_ibsend(kbuf(1),icount,int(mpi_integer8),kdest-1,ktag,icomm, &
580  & krequest,ierror)
581  ELSE IF(imp_type == jp_blocking_synchronous) THEN
582  CALL mpi_ssend(kbuf(1),icount,int(mpi_integer8),kdest-1,ktag,icomm,ierror)
583  ELSE
584  IF(PRESENT(kerror)) THEN
585  kerror=1
586  ELSE
587  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
588  ENDIF
589  ENDIF
590 ENDIF
591 IF(mpl_output > 1 )THEN
592  WRITE(mpl_unit,'(A,5I8)') ' MPL_SEND ',icount,imp_type,kdest,ktag,icomm
593 ENDIF
594 IF(PRESENT(kerror)) THEN
595  kerror=ierror
596 ELSE
597  IF(ierror /= 0 ) CALL mpl_message(ierror,'MPL_SEND',cdstring,ldabort=llabort)
598 ENDIF
599 
600 END SUBROUTINE mpl_send_int8
601 
602 SUBROUTINE mpl_send_int_scalar(KINT,KDEST,KTAG,KCOMM,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
604 #ifdef USE_8_BYTE_WORDS
605  USE mpi4to8, ONLY : &
606  mpi_send => mpi_send8, mpi_bsend => mpi_bsend8, mpi_isend => mpi_isend8
607 #endif
608 
609 INTEGER(KIND=JPIM) :: KINT
610 INTEGER(KIND=JPIM),INTENT(IN) :: KDEST,KTAG
611 INTEGER(KIND=JPIM),INTENT(IN),OPTIONAL :: KCOMM,KMP_TYPE
612 INTEGER(KIND=JPIM),INTENT(OUT),OPTIONAL :: KREQUEST,KERROR
613 CHARACTER*(*),INTENT(IN),OPTIONAL :: CDSTRING
614 
615 INTEGER(KIND=JPIM) :: ICOUNT,IMP_TYPE,ICOMM,IERROR
616 LOGICAL :: LLABORT=.true.
617 INTEGER(KIND=JPIM) :: ITID
618 itid = oml_my_thread()
619 
620 IF(mpl_numproc < 1) CALL mpl_message( &
621  & cdmessage='MPL_SEND: MPL NOT INITIALISED ',ldabort=llabort)
622 
623 IF(PRESENT(kmp_type)) THEN
624  imp_type=kmp_type
625 ELSE
626  imp_type=mpl_method
627 ENDIF
628 IF(PRESENT(kcomm)) THEN
629  icomm=kcomm
630 ELSE
631  icomm=mpl_comm_oml(itid)
632 ENDIF
633 IF((kdest < 1 .OR. kdest >mpl_nproc(icomm)) .AND. (.NOT. PRESENT (kcomm))) THEN
634  WRITE(mpl_errunit,*)'MPL_SEND: ERROR KDEST=',kdest
635  CALL mpl_message(cdmessage='MPL_SEND:ILLEGAL KDEST ',ldabort=llabort)
636 ENDIF
637 
638 icount = 1
639 
640 IF(lmplstats) THEN
641  CALL mpl_sendstats(icount,int(mpi_integer))
642 ENDIF
643 
644 IF(imp_type == jp_blocking_standard) THEN
645  CALL mpi_send(kint,icount,int(mpi_integer),kdest-1,ktag,icomm,ierror)
646 ELSE IF(imp_type == jp_blocking_buffered) THEN
647  CALL mpi_bsend(kint,icount,int(mpi_integer),kdest-1,ktag,icomm,ierror)
648 ELSE IF(imp_type == jp_non_blocking_standard) THEN
649  CALL mpi_isend(kint,icount,int(mpi_integer),kdest-1,ktag,icomm, &
650  & krequest,ierror)
651 ELSE IF(imp_type == jp_non_blocking_buffered) THEN
652  CALL mpi_ibsend(kint,icount,int(mpi_integer),kdest-1,ktag,icomm, &
653  & krequest,ierror)
654 ELSE IF(imp_type == jp_blocking_synchronous) THEN
655  CALL mpi_ssend(kint,icount,int(mpi_integer),kdest-1,ktag,icomm,ierror)
656 ELSE
657  IF(PRESENT(kerror)) THEN
658  kerror=1
659  ELSE
660  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
661  ENDIF
662 ENDIF
663 IF(mpl_output > 1 )THEN
664  WRITE(mpl_unit,'(A,5I8)') ' MPL_SEND ',icount,imp_type,kdest,ktag,icomm
665 ENDIF
666 IF(PRESENT(kerror)) THEN
667  kerror=ierror
668 ELSE
669  IF(ierror /= 0 ) CALL mpl_message(ierror,'MPL_SEND',cdstring,ldabort=llabort)
670 ENDIF
671 
672 END SUBROUTINE mpl_send_int_scalar
673 
674 SUBROUTINE mpl_send_real42(PBUF,KDEST,KTAG,KCOMM,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
676 #ifdef USE_8_BYTE_WORDS
677  USE mpi4to8, ONLY : &
678  mpi_send => mpi_send8, mpi_bsend => mpi_bsend8, mpi_isend => mpi_isend8
679 #endif
680 
681 ! real_m,intent(in) :: PBUF(:,:)
682 REAL(KIND=JPRM) :: PBUF(:,:)
683 INTEGER(KIND=JPIM),INTENT(IN) :: KDEST,KTAG
684 INTEGER(KIND=JPIM),INTENT(IN),OPTIONAL :: KCOMM,KMP_TYPE
685 INTEGER(KIND=JPIM),INTENT(OUT),OPTIONAL :: KREQUEST,KERROR
686 CHARACTER*(*),INTENT(IN),OPTIONAL :: CDSTRING
687 
688 INTEGER(KIND=JPIM) :: ICOUNT,IMP_TYPE,ICOMM,IERROR
689 LOGICAL :: LLABORT=.true.
690 INTEGER(KIND=JPIM) :: ITID
691 REAL(KIND=JPRM) :: ZDUM(1:0)
692 itid = oml_my_thread()
693 
694 IF(mpl_numproc < 1) CALL mpl_message( &
695  & cdmessage='MPL_SEND: MPL NOT INITIALISED ',ldabort=llabort)
696 
697 IF(PRESENT(kmp_type)) THEN
698  imp_type=kmp_type
699 ELSE
700  imp_type=mpl_method
701 ENDIF
702 IF(PRESENT(kcomm)) THEN
703  icomm=kcomm
704 ELSE
705  icomm=mpl_comm_oml(itid)
706 ENDIF
707 IF((kdest < 1 .OR. kdest >mpl_nproc(icomm)) .AND. (.NOT. PRESENT (kcomm))) THEN
708  WRITE(mpl_errunit,*)'MPL_SEND: ERROR KDEST=',kdest
709  CALL mpl_message(cdmessage='MPL_SEND:ILLEGAL KDEST ',ldabort=llabort)
710 ENDIF
711 
712 icount = SIZE(pbuf)
713 #ifndef NAG
714 IF (icount > 0) THEN
715  IF( (loc(pbuf(ubound(pbuf,1),ubound(pbuf,2))) - &
716  & loc(pbuf(lbound(pbuf,1),lbound(pbuf,2)))) /= 4_jpib*(icount - 1) ) THEN
717  CALL mpl_message(cdmessage='MPL_SEND: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
718  ENDIF
719 ENDIF
720 #endif
721 
722 IF(lmplstats) THEN
723  CALL mpl_sendstats(icount,int(mpi_real4))
724 ENDIF
725 
726 IF (icount == 0) THEN
727  IF(imp_type == jp_blocking_standard) THEN
728  CALL mpi_send(zdum,icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
729  ELSE IF(imp_type == jp_blocking_buffered) THEN
730  CALL mpi_bsend(zdum,icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
731  ELSE IF(imp_type == jp_non_blocking_standard) THEN
732  CALL mpi_isend(zdum,icount,int(mpi_real4),kdest-1,ktag,icomm, &
733  & krequest,ierror)
734  ELSE IF(imp_type == jp_non_blocking_buffered) THEN
735  CALL mpi_ibsend(zdum,icount,int(mpi_real4),kdest-1,ktag,icomm, &
736  & krequest,ierror)
737  ELSE IF(imp_type == jp_blocking_synchronous) THEN
738  CALL mpi_ssend(zdum,icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
739  ELSE
740  IF(PRESENT(kerror)) THEN
741  kerror=1
742  ELSE
743  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
744  ENDIF
745  ENDIF
746 ELSE
747  IF(imp_type == jp_blocking_standard) THEN
748  CALL mpi_send(pbuf(1,1),icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
749  ELSE IF(imp_type == jp_blocking_buffered) THEN
750  CALL mpi_bsend(pbuf(1,1),icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
751  ELSE IF(imp_type == jp_non_blocking_standard) THEN
752  CALL mpi_isend(pbuf(1,1),icount,int(mpi_real4),kdest-1,ktag,icomm, &
753  & krequest,ierror)
754  ELSE IF(imp_type == jp_non_blocking_buffered) THEN
755  CALL mpi_ibsend(pbuf(1,1),icount,int(mpi_real4),kdest-1,ktag,icomm, &
756  & krequest,ierror)
757  ELSE IF(imp_type == jp_blocking_synchronous) THEN
758  CALL mpi_ssend(pbuf(1,1),icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
759  ELSE
760  IF(PRESENT(kerror)) THEN
761  kerror=1
762  ELSE
763  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
764  ENDIF
765  ENDIF
766 ENDIF
767 IF(mpl_output > 1 )THEN
768  WRITE(mpl_unit,'(A,5I8)') ' MPL_SEND ',icount,imp_type,kdest,ktag,icomm
769 ENDIF
770 IF(PRESENT(kerror)) THEN
771  kerror=ierror
772 ELSE
773  IF(ierror /= 0 ) CALL mpl_message(ierror,'MPL_SEND',cdstring,ldabort=llabort)
774 ENDIF
775 
776 END SUBROUTINE mpl_send_real42
777 
778 SUBROUTINE mpl_send_real43(PBUF,KDEST,KTAG,KCOMM,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
780 #ifdef USE_8_BYTE_WORDS
781  USE mpi4to8, ONLY : &
782  mpi_send => mpi_send8, mpi_bsend => mpi_bsend8, mpi_isend => mpi_isend8
783 #endif
784 
785 ! real_b,intent(in) :: PBUF(:,:,:)
786 REAL(KIND=JPRM) :: PBUF(:,:,:)
787 INTEGER(KIND=JPIM),INTENT(IN) :: KDEST,KTAG
788 INTEGER(KIND=JPIM),INTENT(IN),OPTIONAL :: KCOMM,KMP_TYPE
789 INTEGER(KIND=JPIM),INTENT(OUT),OPTIONAL :: KREQUEST,KERROR
790 CHARACTER*(*),INTENT(IN),OPTIONAL :: CDSTRING
791 
792 INTEGER(KIND=JPIM) :: ICOUNT,IMP_TYPE,ICOMM,IERROR
793 LOGICAL :: LLABORT=.true.
794 INTEGER(KIND=JPIM) :: ITID
795 itid = oml_my_thread()
796 
797 IF(mpl_numproc < 1) CALL mpl_message( &
798  & cdmessage='MPL_SEND: MPL NOT INITIALISED ',ldabort=llabort)
799 
800 IF(PRESENT(kmp_type)) THEN
801  imp_type=kmp_type
802 ELSE
803  imp_type=mpl_method
804 ENDIF
805 IF(PRESENT(kcomm)) THEN
806  icomm=kcomm
807 ELSE
808  icomm=mpl_comm_oml(itid)
809 ENDIF
810 IF(kdest < 1 .OR. kdest >mpl_nproc(icomm).AND. (.NOT. PRESENT (kcomm))) THEN
811  WRITE(mpl_errunit,*)'MPL_SEND: ERROR KDEST=',kdest
812  CALL mpl_message(cdmessage='MPL_SEND:ILLEGAL KDEST ',ldabort=llabort)
813 ENDIF
814 
815 icount = SIZE(pbuf)
816 
817 IF(lmplstats) THEN
818  CALL mpl_sendstats(icount,int(mpi_real4))
819 ENDIF
820 
821 IF (icount > 0) THEN
822  IF( (loc(pbuf(ubound(pbuf,1),ubound(pbuf,2),ubound(pbuf,3))) - &
823  & loc(pbuf(lbound(pbuf,1),lbound(pbuf,2),lbound(pbuf,3)))) /= 4_jpib*(icount - 1) ) THEN
824  CALL mpl_message(cdmessage='MPL_SEND: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
825  ENDIF
826 ENDIF
827 
828 IF(imp_type == jp_blocking_standard) THEN
829  CALL mpi_send(pbuf,icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
830 ELSE IF(imp_type == jp_blocking_buffered) THEN
831  CALL mpi_bsend(pbuf,icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
832 ELSE IF(imp_type == jp_non_blocking_standard) THEN
833  CALL mpi_isend(pbuf,icount,int(mpi_real4),kdest-1,ktag,icomm, &
834  & krequest,ierror)
835 ELSE IF(imp_type == jp_non_blocking_buffered) THEN
836  CALL mpi_ibsend(pbuf,icount,int(mpi_real4),kdest-1,ktag,icomm, &
837  & krequest,ierror)
838 ELSE IF(imp_type == jp_blocking_synchronous) THEN
839  CALL mpi_ssend(pbuf,icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
840 ELSE
841  IF(PRESENT(kerror)) THEN
842  kerror=1
843  ELSE
844  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
845  ENDIF
846 ENDIF
847 IF(mpl_output > 1 )THEN
848  WRITE(mpl_unit,'(A,5I8)') ' MPL_SEND ',icount,imp_type,kdest,ktag,icomm
849 ENDIF
850 IF(PRESENT(kerror)) THEN
851  kerror=ierror
852 ELSE
853  IF(ierror /= 0 ) CALL mpl_message(ierror,'MPL_SEND',cdstring,ldabort=llabort)
854 ENDIF
855 
856 END SUBROUTINE mpl_send_real43
857 
858 
859 
860 SUBROUTINE mpl_send_real82(PBUF,KDEST,KTAG,KCOMM,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
862 #ifdef USE_8_BYTE_WORDS
863  USE mpi4to8, ONLY : &
864  mpi_send => mpi_send8, mpi_bsend => mpi_bsend8, mpi_isend => mpi_isend8
865 #endif
866 
867 ! real_b,intent(in) :: PBUF(:,:)
868 REAL(KIND=JPRD) :: PBUF(:,:)
869 INTEGER(KIND=JPIM),INTENT(IN) :: KDEST,KTAG
870 INTEGER(KIND=JPIM),INTENT(IN),OPTIONAL :: KCOMM,KMP_TYPE
871 INTEGER(KIND=JPIM),INTENT(OUT),OPTIONAL :: KREQUEST,KERROR
872 CHARACTER*(*),INTENT(IN),OPTIONAL :: CDSTRING
873 
874 INTEGER(KIND=JPIM) :: ICOUNT,IMP_TYPE,ICOMM,IERROR
875 LOGICAL :: LLABORT=.true.
876 INTEGER(KIND=JPIM) :: ITID
877 REAL(KIND=JPRD) :: ZDUM(1:0)
878 itid = oml_my_thread()
879 
880 IF(mpl_numproc < 1) CALL mpl_message( &
881  & cdmessage='MPL_SEND: MPL NOT INITIALISED ',ldabort=llabort)
882 
883 IF(PRESENT(kmp_type)) THEN
884  imp_type=kmp_type
885 ELSE
886  imp_type=mpl_method
887 ENDIF
888 IF(PRESENT(kcomm)) THEN
889  icomm=kcomm
890 ELSE
891  icomm=mpl_comm_oml(itid)
892 ENDIF
893 IF((kdest < 1 .OR. kdest >mpl_nproc(icomm)) .AND. (.NOT. PRESENT (kcomm))) THEN
894  WRITE(mpl_errunit,*)'MPL_SEND: ERROR KDEST=',kdest
895  CALL mpl_message(cdmessage='MPL_SEND:ILLEGAL KDEST ',ldabort=llabort)
896 ENDIF
897 
898 icount = SIZE(pbuf)
899 
900 IF(lmplstats) THEN
901  CALL mpl_sendstats(icount,int(mpi_real8))
902 ENDIF
903 
904 #ifndef NAG
905 IF (icount > 0) THEN
906  IF( (loc(pbuf(ubound(pbuf,1),ubound(pbuf,2))) - &
907  & loc(pbuf(lbound(pbuf,1),lbound(pbuf,2)))) /= 8_jpib*(icount - 1) ) THEN
908  CALL mpl_message(cdmessage='MPL_SEND: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
909  ENDIF
910 ENDIF
911 #endif
912 
913 IF (icount == 0) THEN
914  IF(imp_type == jp_blocking_standard) THEN
915  CALL mpi_send(zdum,icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
916  ELSE IF(imp_type == jp_blocking_buffered) THEN
917  CALL mpi_bsend(zdum,icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
918  ELSE IF(imp_type == jp_non_blocking_standard) THEN
919  CALL mpi_isend(zdum,icount,int(mpi_real8),kdest-1,ktag,icomm, &
920  & krequest,ierror)
921  ELSE IF(imp_type == jp_non_blocking_buffered) THEN
922  CALL mpi_ibsend(zdum,icount,int(mpi_real8),kdest-1,ktag,icomm, &
923  & krequest,ierror)
924  ELSE IF(imp_type == jp_blocking_synchronous) THEN
925  CALL mpi_ssend(zdum,icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
926  ELSE
927  IF(PRESENT(kerror)) THEN
928  kerror=1
929  ELSE
930  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
931  ENDIF
932  ENDIF
933 ELSE
934  IF(imp_type == jp_blocking_standard) THEN
935  CALL mpi_send(pbuf(1,1),icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
936  ELSE IF(imp_type == jp_blocking_buffered) THEN
937  CALL mpi_bsend(pbuf(1,1),icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
938  ELSE IF(imp_type == jp_non_blocking_standard) THEN
939  CALL mpi_isend(pbuf(1,1),icount,int(mpi_real8),kdest-1,ktag,icomm, &
940  & krequest,ierror)
941  ELSE IF(imp_type == jp_non_blocking_buffered) THEN
942  CALL mpi_ibsend(pbuf(1,1),icount,int(mpi_real8),kdest-1,ktag,icomm, &
943  & krequest,ierror)
944  ELSE IF(imp_type == jp_blocking_synchronous) THEN
945  CALL mpi_ssend(pbuf(1,1),icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
946  ELSE
947  IF(PRESENT(kerror)) THEN
948  kerror=1
949  ELSE
950  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
951  ENDIF
952  ENDIF
953 ENDIF
954 IF(mpl_output > 1 )THEN
955  WRITE(mpl_unit,'(A,5I8)') ' MPL_SEND ',icount,imp_type,kdest,ktag,icomm
956 ENDIF
957 IF(PRESENT(kerror)) THEN
958  kerror=ierror
959 ELSE
960  IF(ierror /= 0 ) CALL mpl_message(ierror,'MPL_SEND',cdstring,ldabort=llabort)
961 ENDIF
962 
963 END SUBROUTINE mpl_send_real82
964 
965 
966 SUBROUTINE mpl_send_char_scalar(CDCHAR,KDEST,KTAG,KCOMM,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
968 #ifdef USE_8_BYTE_WORDS
969  USE mpi4to8, ONLY : &
970  mpi_send => mpi_send8, mpi_bsend => mpi_bsend8, mpi_isend => mpi_isend8
971 #endif
972 
973 CHARACTER*(*) :: CDCHAR
974 INTEGER(KIND=JPIM),INTENT(IN) :: KDEST,KTAG
975 INTEGER(KIND=JPIM),INTENT(IN),OPTIONAL :: KCOMM,KMP_TYPE
976 INTEGER(KIND=JPIM),INTENT(OUT),OPTIONAL :: KREQUEST,KERROR
977 CHARACTER*(*),INTENT(IN),OPTIONAL :: CDSTRING
978 
979 INTEGER(KIND=JPIM) :: ICOUNT,IMP_TYPE,ICOMM,IERROR
980 LOGICAL :: LLABORT=.true.
981 INTEGER(KIND=JPIM) :: ITID
982 itid = oml_my_thread()
983 
984 IF(mpl_numproc < 1) CALL mpl_message( &
985  & cdmessage='MPL_SEND: MPL NOT INITIALISED ',ldabort=llabort)
986 
987 IF(PRESENT(kmp_type)) THEN
988  imp_type=kmp_type
989 ELSE
990  imp_type=mpl_method
991 ENDIF
992 IF(PRESENT(kcomm)) THEN
993  icomm=kcomm
994 ELSE
995  icomm=mpl_comm_oml(itid)
996 ENDIF
997 IF((kdest < 1 .OR. kdest >mpl_nproc(icomm)) .AND. (.NOT. PRESENT (kcomm))) THEN
998  WRITE(mpl_errunit,*)'MPL_SEND: ERROR KDEST=',kdest
999  CALL mpl_message(cdmessage='MPL_SEND:ILLEGAL KDEST ',ldabort=llabort)
1000 ENDIF
1001 
1002 icount = len(cdchar)
1003 
1004 IF(lmplstats) THEN
1005  CALL mpl_sendstats(icount,int(mpi_byte))
1006 ENDIF
1007 
1008 IF(imp_type == jp_blocking_standard) THEN
1009  CALL mpi_send(cdchar,icount,int(mpi_byte),kdest-1,ktag,icomm,ierror)
1010 ELSE IF(imp_type == jp_blocking_buffered) THEN
1011  CALL mpi_bsend(cdchar,icount,int(mpi_byte),kdest-1,ktag,icomm,ierror)
1012 ELSE IF(imp_type == jp_non_blocking_standard) THEN
1013  CALL mpi_isend(cdchar,icount,int(mpi_byte),kdest-1,ktag,icomm, &
1014  & krequest,ierror)
1015 ELSE IF(imp_type == jp_non_blocking_buffered) THEN
1016  CALL mpi_ibsend(cdchar,icount,int(mpi_byte),kdest-1,ktag,icomm, &
1017  & krequest,ierror)
1018 ELSE IF(imp_type == jp_blocking_synchronous) THEN
1019  CALL mpi_ssend(cdchar,icount,int(mpi_byte),kdest-1,ktag,icomm,ierror)
1020 ELSE
1021  IF(PRESENT(kerror)) THEN
1022  kerror=1
1023  ELSE
1024  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
1025  ENDIF
1026 ENDIF
1027 IF(mpl_output > 1 )THEN
1028  WRITE(mpl_unit,'(A,5I8)') ' MPL_SEND ',icount,imp_type,kdest,ktag,icomm
1029 ENDIF
1030 IF(PRESENT(kerror)) THEN
1031  kerror=ierror
1032 ELSE
1033  IF(ierror /= 0 ) CALL mpl_message(ierror,'MPL_SEND',cdstring,ldabort=llabort)
1034 ENDIF
1035 
1036 END SUBROUTINE mpl_send_char_scalar
1037 
1038 SUBROUTINE mpl_send_char(CDCHAR,KDEST,KTAG,KCOMM,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
1040 #ifdef USE_8_BYTE_WORDS
1041  USE mpi4to8, ONLY : &
1042  mpi_send => mpi_send8, mpi_bsend => mpi_bsend8, mpi_isend => mpi_isend8
1043 #endif
1044 
1045 CHARACTER*(*) :: CDCHAR(:)
1046 INTEGER(KIND=JPIM),INTENT(IN) :: KDEST,KTAG
1047 INTEGER(KIND=JPIM),INTENT(IN),OPTIONAL :: KCOMM,KMP_TYPE
1048 INTEGER(KIND=JPIM),INTENT(OUT),OPTIONAL :: KREQUEST,KERROR
1049 CHARACTER*(*),INTENT(IN),OPTIONAL :: CDSTRING
1050 
1051 INTEGER(KIND=JPIM) :: ICOUNT,IMP_TYPE,ICOMM,IERROR
1052 LOGICAL :: LLABORT=.true.
1053 INTEGER(KIND=JPIM) :: ITID
1054 itid = oml_my_thread()
1055 
1056 IF(mpl_numproc < 1) CALL mpl_message( &
1057  & cdmessage='MPL_SEND: MPL NOT INITIALISED ',ldabort=llabort)
1058 
1059 IF(PRESENT(kmp_type)) THEN
1060  imp_type=kmp_type
1061 ELSE
1062  imp_type=mpl_method
1063 ENDIF
1064 IF(PRESENT(kcomm)) THEN
1065  icomm=kcomm
1066 ELSE
1067  icomm=mpl_comm_oml(itid)
1068 ENDIF
1069 IF((kdest < 1 .OR. kdest >mpl_nproc(icomm)) .AND. (.NOT. PRESENT (kcomm))) THEN
1070  WRITE(mpl_errunit,*)'MPL_SEND: ERROR KDEST=',kdest
1071  CALL mpl_message(cdmessage='MPL_SEND:ILLEGAL KDEST ',ldabort=llabort)
1072 ENDIF
1073 
1074 icount = len(cdchar) * SIZE(cdchar)
1075 
1076 IF(lmplstats) THEN
1077  CALL mpl_sendstats(icount,int(mpi_byte))
1078 ENDIF
1079 
1080 IF(imp_type == jp_blocking_standard) THEN
1081  CALL mpi_send(cdchar,icount,int(mpi_byte),kdest-1,ktag,icomm,ierror)
1082 ELSE IF(imp_type == jp_blocking_buffered) THEN
1083  CALL mpi_bsend(cdchar,icount,int(mpi_byte),kdest-1,ktag,icomm,ierror)
1084 ELSE IF(imp_type == jp_non_blocking_standard) THEN
1085  CALL mpi_isend(cdchar,icount,int(mpi_byte),kdest-1,ktag,icomm, &
1086  & krequest,ierror)
1087 ELSE IF(imp_type == jp_non_blocking_buffered) THEN
1088  CALL mpi_ibsend(cdchar,icount,int(mpi_byte),kdest-1,ktag,icomm, &
1089  & krequest,ierror)
1090 ELSE IF(imp_type == jp_blocking_synchronous) THEN
1091  CALL mpi_ssend(cdchar,icount,int(mpi_byte),kdest-1,ktag,icomm,ierror)
1092 ELSE
1093  IF(PRESENT(kerror)) THEN
1094  kerror=1
1095  ELSE
1096  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
1097  ENDIF
1098 ENDIF
1099 IF(mpl_output > 1 )THEN
1100  WRITE(mpl_unit,'(A,5I8)') ' MPL_SEND ',icount,imp_type,kdest,ktag,icomm
1101 ENDIF
1102 IF(PRESENT(kerror)) THEN
1103  kerror=ierror
1104 ELSE
1105  IF(ierror /= 0 ) CALL mpl_message(ierror,'MPL_SEND',cdstring,ldabort=llabort)
1106 ENDIF
1107 
1108 END SUBROUTINE mpl_send_char
1109 
1110 SUBROUTINE mpl_send_real4_scalar(PBUF,KDEST,KTAG,KCOMM,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
1112 #ifdef USE_8_BYTE_WORDS
1113  USE mpi4to8, ONLY : &
1114  mpi_send => mpi_send8, mpi_bsend => mpi_bsend8, mpi_isend => mpi_isend8
1115 #endif
1116 
1117 REAL(KIND=JPRM) :: PBUF
1118 INTEGER(KIND=JPIM),INTENT(IN) :: KDEST,KTAG
1119 INTEGER(KIND=JPIM),INTENT(IN),OPTIONAL :: KCOMM,KMP_TYPE
1120 INTEGER(KIND=JPIM),INTENT(OUT),OPTIONAL :: KREQUEST,KERROR
1121 CHARACTER*(*),INTENT(IN),OPTIONAL :: CDSTRING
1122 
1123 INTEGER(KIND=JPIM) :: ICOUNT,IMP_TYPE,ICOMM,IERROR
1124 LOGICAL :: LLABORT=.true.
1125 INTEGER(KIND=JPIM) :: ITID
1126 itid = oml_my_thread()
1127 
1128 IF(mpl_numproc < 1) CALL mpl_message( &
1129  & cdmessage='MPL_SEND: MPL NOT INITIALISED ',ldabort=llabort)
1130 
1131 IF(PRESENT(kmp_type)) THEN
1132  imp_type=kmp_type
1133 ELSE
1134  imp_type=mpl_method
1135 ENDIF
1136 IF(PRESENT(kcomm)) THEN
1137  icomm=kcomm
1138 ELSE
1139  icomm=mpl_comm_oml(itid)
1140 ENDIF
1141 IF((kdest < 1 .OR. kdest >mpl_nproc(icomm)) .AND. (.NOT. PRESENT (kcomm))) THEN
1142  WRITE(mpl_errunit,*)'MPL_SEND: ERROR KDEST=',kdest
1143  CALL mpl_message(cdmessage='MPL_SEND:ILLEGAL KDEST ',ldabort=llabort)
1144 ENDIF
1145 
1146 icount = 1
1147 
1148 IF(lmplstats) THEN
1149  CALL mpl_sendstats(icount,int(mpi_real4))
1150 ENDIF
1151 
1152 IF(imp_type == jp_blocking_standard) THEN
1153  CALL mpi_send(pbuf,icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
1154 ELSE IF(imp_type == jp_blocking_buffered) THEN
1155  CALL mpi_bsend(pbuf,icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
1156 ELSE IF(imp_type == jp_non_blocking_standard) THEN
1157  CALL mpi_isend(pbuf,icount,int(mpi_real4),kdest-1,ktag,icomm, &
1158  & krequest,ierror)
1159 ELSE IF(imp_type == jp_non_blocking_buffered) THEN
1160  CALL mpi_ibsend(pbuf,icount,int(mpi_real4),kdest-1,ktag,icomm, &
1161  & krequest,ierror)
1162 ELSE IF(imp_type == jp_blocking_synchronous) THEN
1163  CALL mpi_ssend(pbuf,icount,int(mpi_real4),kdest-1,ktag,icomm,ierror)
1164 ELSE
1165  IF(PRESENT(kerror)) THEN
1166  kerror=1
1167  ELSE
1168  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
1169  ENDIF
1170 ENDIF
1171 IF(mpl_output > 1 )THEN
1172  WRITE(mpl_unit,'(A,5I8)') ' MPL_SEND ',icount,imp_type,kdest,ktag,icomm
1173 ENDIF
1174 IF(PRESENT(kerror)) THEN
1175  kerror=ierror
1176 ELSE
1177  IF(ierror /= 0 ) CALL mpl_message(ierror,'MPL_SEND',cdstring,ldabort=llabort)
1178 ENDIF
1179 
1180 END SUBROUTINE mpl_send_real4_scalar
1181 
1182 SUBROUTINE mpl_send_real8_scalar(PBUF,KDEST,KTAG,KCOMM,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
1184 #ifdef USE_8_BYTE_WORDS
1185  USE mpi4to8, ONLY : &
1186  mpi_send => mpi_send8, mpi_bsend => mpi_bsend8, mpi_isend => mpi_isend8
1187 #endif
1188 
1189 REAL(KIND=JPRD) :: PBUF
1190 INTEGER(KIND=JPIM),INTENT(IN) :: KDEST,KTAG
1191 INTEGER(KIND=JPIM),INTENT(IN),OPTIONAL :: KCOMM,KMP_TYPE
1192 INTEGER(KIND=JPIM),INTENT(OUT),OPTIONAL :: KREQUEST,KERROR
1193 CHARACTER*(*),INTENT(IN),OPTIONAL :: CDSTRING
1194 
1195 INTEGER(KIND=JPIM) :: ICOUNT,IMP_TYPE,ICOMM,IERROR
1196 LOGICAL :: LLABORT=.true.
1197 INTEGER(KIND=JPIM) :: ITID
1198 itid = oml_my_thread()
1199 
1200 IF(mpl_numproc < 1) CALL mpl_message( &
1201  & cdmessage='MPL_SEND: MPL NOT INITIALISED ',ldabort=llabort)
1202 
1203 IF(PRESENT(kmp_type)) THEN
1204  imp_type=kmp_type
1205 ELSE
1206  imp_type=mpl_method
1207 ENDIF
1208 IF(PRESENT(kcomm)) THEN
1209  icomm=kcomm
1210 ELSE
1211  icomm=mpl_comm_oml(itid)
1212 ENDIF
1213 IF((kdest < 1 .OR. kdest >mpl_nproc(icomm)) .AND. (.NOT. PRESENT (kcomm))) THEN
1214  WRITE(mpl_errunit,*)'MPL_SEND: ERROR KDEST=',kdest
1215  CALL mpl_message(cdmessage='MPL_SEND:ILLEGAL KDEST ',ldabort=llabort)
1216 ENDIF
1217 
1218 icount = 1
1219 
1220 IF(lmplstats) THEN
1221  CALL mpl_sendstats(icount,int(mpi_real8))
1222 ENDIF
1223 
1224 IF(imp_type == jp_blocking_standard) THEN
1225  CALL mpi_send(pbuf,icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
1226 ELSE IF(imp_type == jp_blocking_buffered) THEN
1227  CALL mpi_bsend(pbuf,icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
1228 ELSE IF(imp_type == jp_non_blocking_standard) THEN
1229  CALL mpi_isend(pbuf,icount,int(mpi_real8),kdest-1,ktag,icomm, &
1230  & krequest,ierror)
1231 ELSE IF(imp_type == jp_non_blocking_buffered) THEN
1232  CALL mpi_ibsend(pbuf,icount,int(mpi_real8),kdest-1,ktag,icomm, &
1233  & krequest,ierror)
1234 ELSE IF(imp_type == jp_blocking_synchronous) THEN
1235  CALL mpi_ssend(pbuf,icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
1236 ELSE
1237  IF(PRESENT(kerror)) THEN
1238  kerror=1
1239  ELSE
1240  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
1241  ENDIF
1242 ENDIF
1243 IF(mpl_output > 1 )THEN
1244  WRITE(mpl_unit,'(A,5I8)') ' MPL_SEND ',icount,imp_type,kdest,ktag,icomm
1245 ENDIF
1246 IF(PRESENT(kerror)) THEN
1247  kerror=ierror
1248 ELSE
1249  IF(ierror /= 0 ) CALL mpl_message(ierror,'MPL_SEND',cdstring,ldabort=llabort)
1250 ENDIF
1251 
1252 END SUBROUTINE mpl_send_real8_scalar
1253 
1254 SUBROUTINE mpl_send_real83(PBUF,KDEST,KTAG,KCOMM,KMP_TYPE,KERROR,KREQUEST,CDSTRING)
1256 #ifdef USE_8_BYTE_WORDS
1257  USE mpi4to8, ONLY : &
1258  mpi_send => mpi_send8, mpi_bsend => mpi_bsend8, mpi_isend => mpi_isend8
1259 #endif
1260 
1261 ! real_b,intent(in) :: PBUF(:,:,:)
1262 REAL(KIND=JPRD) :: PBUF(:,:,:)
1263 INTEGER(KIND=JPIM),INTENT(IN) :: KDEST,KTAG
1264 INTEGER(KIND=JPIM),INTENT(IN),OPTIONAL :: KCOMM,KMP_TYPE
1265 INTEGER(KIND=JPIM),INTENT(OUT),OPTIONAL :: KREQUEST,KERROR
1266 CHARACTER*(*),INTENT(IN),OPTIONAL :: CDSTRING
1267 
1268 INTEGER(KIND=JPIM) :: ICOUNT,IMP_TYPE,ICOMM,IERROR
1269 LOGICAL :: LLABORT=.true.
1270 INTEGER(KIND=JPIM) :: ITID
1271 itid = oml_my_thread()
1272 
1273 IF(mpl_numproc < 1) CALL mpl_message( &
1274  & cdmessage='MPL_SEND: MPL NOT INITIALISED ',ldabort=llabort)
1275 
1276 IF(PRESENT(kmp_type)) THEN
1277  imp_type=kmp_type
1278 ELSE
1279  imp_type=mpl_method
1280 ENDIF
1281 IF(PRESENT(kcomm)) THEN
1282  icomm=kcomm
1283 ELSE
1284  icomm=mpl_comm_oml(itid)
1285 ENDIF
1286 IF(kdest < 1 .OR. kdest >mpl_nproc(icomm).AND. (.NOT. PRESENT (kcomm))) THEN
1287  WRITE(mpl_errunit,*)'MPL_SEND: ERROR KDEST=',kdest
1288  CALL mpl_message(cdmessage='MPL_SEND:ILLEGAL KDEST ',ldabort=llabort)
1289 ENDIF
1290 
1291 icount = SIZE(pbuf)
1292 
1293 IF(lmplstats) THEN
1294  CALL mpl_sendstats(icount,int(mpi_real8))
1295 ENDIF
1296 
1297 IF (icount > 0) THEN
1298  IF( (loc(pbuf(ubound(pbuf,1),ubound(pbuf,2),ubound(pbuf,3))) - &
1299  & loc(pbuf(lbound(pbuf,1),lbound(pbuf,2),lbound(pbuf,3)))) /= 8_jpib*(icount - 1) ) THEN
1300  CALL mpl_message(cdmessage='MPL_SEND: BUFFER NOT CONTIGUOUS ',ldabort=llabort)
1301  ENDIF
1302 ENDIF
1303 
1304 IF(imp_type == jp_blocking_standard) THEN
1305  CALL mpi_send(pbuf,icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
1306 ELSE IF(imp_type == jp_blocking_buffered) THEN
1307  CALL mpi_bsend(pbuf,icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
1308 ELSE IF(imp_type == jp_non_blocking_standard) THEN
1309  CALL mpi_isend(pbuf,icount,int(mpi_real8),kdest-1,ktag,icomm, &
1310  & krequest,ierror)
1311 ELSE IF(imp_type == jp_non_blocking_buffered) THEN
1312  CALL mpi_ibsend(pbuf,icount,int(mpi_real8),kdest-1,ktag,icomm, &
1313  & krequest,ierror)
1314 ELSE IF(imp_type == jp_blocking_synchronous) THEN
1315  CALL mpi_ssend(pbuf,icount,int(mpi_real8),kdest-1,ktag,icomm,ierror)
1316 ELSE
1317  IF(PRESENT(kerror)) THEN
1318  kerror=1
1319  ELSE
1320  CALL mpl_message(kerror,'MPL_SEND',' INVALID METHOD',ldabort=llabort)
1321  ENDIF
1322 ENDIF
1323 IF(mpl_output > 1 )THEN
1324  WRITE(mpl_unit,'(A,5I8)') ' MPL_SEND ',icount,imp_type,kdest,ktag,icomm
1325 ENDIF
1326 IF(PRESENT(kerror)) THEN
1327  kerror=ierror
1328 ELSE
1329  IF(ierror /= 0 ) CALL mpl_message(ierror,'MPL_SEND',cdstring,ldabort=llabort)
1330 ENDIF
1331 
1332 END SUBROUTINE mpl_send_real83
1333 
1334 END MODULE mpl_send_mod
subroutine, public mpl_message(KERROR, CDMESSAGE, CDSTRING, LDABORT)
integer(kind=jpim), parameter jp_blocking_buffered
integer, parameter jpim
Definition: parkind1.F90:13
integer, parameter jprd
Definition: parkind1.F90:39
subroutine mpl_send_char(CDCHAR, KDEST, KTAG, KCOMM, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
integer(kind=jpim) mpl_numproc
subroutine mpl_send_real8_scalar(PBUF, KDEST, KTAG, KCOMM, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
subroutine mpl_send_real4(PBUF, KDEST, KTAG, KCOMM, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
logical lmplstats
Definition: yommplstats.F90:17
subroutine mpl_send_real83(PBUF, KDEST, KTAG, KCOMM, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
subroutine mpl_send_real8(PBUF, KDEST, KTAG, KCOMM, KMP_TYPE, KERROR, KREQUEST, 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), parameter jp_non_blocking_buffered
subroutine mpl_send_real4_scalar(PBUF, KDEST, KTAG, KCOMM, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
integer(kind=jpim) mpl_errunit
subroutine mpl_send_int8(KBUF, KDEST, KTAG, KCOMM, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
subroutine mpl_send_int_scalar(KINT, KDEST, KTAG, KCOMM, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
integer, parameter jprm
Definition: parkind1.F90:30
integer(kind=jpim), parameter jp_blocking_synchronous
subroutine mpl_send_char_scalar(CDCHAR, KDEST, KTAG, KCOMM, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
subroutine mpl_send_real43(PBUF, KDEST, KTAG, KCOMM, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
integer(kind=jpim) mpl_method
subroutine mpl_send_int2(KBUF, KDEST, KTAG, KCOMM, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
integer(kind=jpim) function, public mpl_nproc(KCOMM)
integer, parameter jpib
Definition: parkind1.F90:14
integer(kind=jpim) mpl_unit
subroutine mpl_send_real82(PBUF, KDEST, KTAG, KCOMM, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
integer(kind=jpim) mpl_output
subroutine mpl_send_int(KBUF, KDEST, KTAG, KCOMM, KMP_TYPE, KERROR, KREQUEST, CDSTRING)
subroutine mpl_send_real42(PBUF, KDEST, KTAG, KCOMM, KMP_TYPE, KERROR, KREQUEST, CDSTRING)