SURFEX v8.1
General documentation of Surfex
mpl_testsome_mod.F90
Go to the documentation of this file.
2 
3 USE mpl_mpif
4 USE parkind1, ONLY : jpim
6 IMPLICIT NONE
7 
8 ! P. Marguinaud : 01-Jan-2011
9 
10 ! KARRAY_OF_REQUESTS (see MPI_TESTSOME)
11 ! KARRAY_OF_INDICES (see MPI_TESTSOME)
12 ! KARRAY_OF_INDICES1 pending requests
13 ! KOUTCOUNT1 number of pending requests
14 
15 PRIVATE
16 PUBLIC :: mpl_testsome
17 
18 CONTAINS
19 
20 SUBROUTINE mpl_testsome (KARRAY_OF_REQUESTS, KARRAY_OF_INDICES, &
21  & KARRAY_OF_INDICES1, KOUTCOUNT, KOUTCOUNT1, &
22  & KERROR, CDSTRING, LDWAIT)
23 INTEGER(KIND=JPIM), INTENT (IN) :: KARRAY_OF_REQUESTS (:)
24 INTEGER(KIND=JPIM), INTENT (OUT) :: KARRAY_OF_INDICES (:)
25 INTEGER(KIND=JPIM), INTENT (OUT), OPTIONAL :: KARRAY_OF_INDICES1 (:)
26 INTEGER(KIND=JPIM), INTENT (OUT), OPTIONAL :: KOUTCOUNT
27 INTEGER(KIND=JPIM), INTENT (OUT), OPTIONAL :: KOUTCOUNT1
28 INTEGER(KIND=JPIM), INTENT (OUT), OPTIONAL :: KERROR
29 CHARACTER*(*), INTENT(IN), OPTIONAL :: CDSTRING
30 LOGICAL, INTENT(IN), OPTIONAL :: LDWAIT
31 
32 INTEGER(KIND=JPIM) :: IERROR
33 INTEGER(KIND=JPIM) :: IINCOUNT
34 INTEGER(KIND=JPIM) :: IOUTCOUNT
35 INTEGER(KIND=JPIM) :: IARRAY_OF_STATUSES (mpi_status_size, size (karray_of_requests))
36 INTEGER(KIND=JPIM) :: II, IJ, IK
37 LOGICAL :: LLWAIT
38 LOGICAL :: LLABORT=.true.
39 
40 
41 
42 iincount = SIZE (karray_of_requests)
43 karray_of_indices = -1
44 
45 llwait = .false.
46 IF (PRESENT (ldwait)) llwait = ldwait
47 
48 IF (llwait) THEN
49  CALL mpi_waitsome(iincount, karray_of_requests, ioutcount, &
50  karray_of_indices, iarray_of_statuses, ierror)
51 ELSE
52  CALL mpi_testsome(iincount, karray_of_requests, ioutcount, &
53  karray_of_indices, iarray_of_statuses, ierror)
54 ENDIF
55 
56 IF (PRESENT (koutcount)) THEN
57  koutcount = ioutcount
58 ENDIF
59 
60 IF (PRESENT (koutcount1)) THEN
61  koutcount1 = iincount - ioutcount
62 ENDIF
63 
64 IF (PRESENT (karray_of_indices1)) THEN
65  karray_of_indices1 = -1
66  ij = 1
67  ik = 1
68  DO ii = 1, iincount
69  IF (ii .EQ. karray_of_indices(ij)) THEN
70  ij = ij + 1
71  ELSE
72  karray_of_indices1(ik) = ii
73  ik = ik + 1
74  ENDIF
75  ENDDO
76 ENDIF
77 
78 IF (PRESENT (kerror)) THEN
79  kerror = ierror
80 ELSE
81  IF(ierror /= 0) CALL mpl_message(ierror,'MPL_TESTSOME',cdstring,ldabort=llabort)
82 ENDIF
83 
84 END SUBROUTINE mpl_testsome
85 
86 END MODULE mpl_testsome_mod
static long size
Definition: bytes_io.c:262
subroutine, public mpl_message(KERROR, CDMESSAGE, CDSTRING, LDABORT)
integer, parameter jpim
Definition: parkind1.F90:13
subroutine, public mpl_testsome(KARRAY_OF_REQUESTS, KARRAY_OF_INDICES, KARRAY_OF_INDICES1, KOUTCOUNT, KOUTCOUNT1, KERROR, CDSTRING, LDWAIT)