ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/utils/oopseMPI.F90
(Generate patch)

Comparing trunk/src/utils/oopseMPI.F90 (file contents):
Revision 119 by gezelter, Wed Oct 20 04:26:44 2004 UTC vs.
Revision 563 by chuckv, Sun Jul 3 20:53:43 2005 UTC

# Line 1 | Line 1
1 + !!
2 + !! Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3 + !!
4 + !! The University of Notre Dame grants you ("Licensee") a
5 + !! non-exclusive, royalty free, license to use, modify and
6 + !! redistribute this software in source and binary code form, provided
7 + !! that the following conditions are met:
8 + !!
9 + !! 1. Acknowledgement of the program authors must be made in any
10 + !!    publication of scientific results based in part on use of the
11 + !!    program.  An acceptable form of acknowledgement is citation of
12 + !!    the article in which the program was described (Matthew
13 + !!    A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher
14 + !!    J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented
15 + !!    Parallel Simulation Engine for Molecular Dynamics,"
16 + !!    J. Comput. Chem. 26, pp. 252-271 (2005))
17 + !!
18 + !! 2. Redistributions of source code must retain the above copyright
19 + !!    notice, this list of conditions and the following disclaimer.
20 + !!
21 + !! 3. Redistributions in binary form must reproduce the above copyright
22 + !!    notice, this list of conditions and the following disclaimer in the
23 + !!    documentation and/or other materials provided with the
24 + !!    distribution.
25 + !!
26 + !! This software is provided "AS IS," without a warranty of any
27 + !! kind. All express or implied conditions, representations and
28 + !! warranties, including any implied warranty of merchantability,
29 + !! fitness for a particular purpose or non-infringement, are hereby
30 + !! excluded.  The University of Notre Dame and its licensors shall not
31 + !! be liable for any damages suffered by licensee as a result of
32 + !! using, modifying or distributing the software or its
33 + !! derivatives. In no event will the University of Notre Dame or its
34 + !! licensors be liable for any lost revenue, profit or data, or for
35 + !! direct, indirect, special, consequential, incidental or punitive
36 + !! damages, however caused and regardless of the theory of liability,
37 + !! arising out of the use of or inability to use software, even if the
38 + !! University of Notre Dame has been advised of the possibility of
39 + !! such damages.
40 + !!
41 +
42   !! Wrapper interfaces for mpi.
43   !! This wrapper should work independently of mpi implimentation.
44   !! We only provide an explicit interface for routines we use.
# Line 7 | Line 48 | module oopseMPI
48   #ifdef IS_MPI
49    implicit none
50    PUBLIC !WARNING everything in this module is public
10  
51  
52 +
53    include "mpif.h"
54  
55    private  :: dp
56  
57  
58 < ! interfaces for things that we use
59 < ! These routines are not overloaded and only include one argument type.
60 < interface
61 <  SUBROUTINE MPI_INIT(IERROR)
62 <    INTEGER IERROR
63 <  END SUBROUTINE MPI_INIT
23 <  
24 <  SUBROUTINE MPI_FINALIZE(IERROR)
25 <    INTEGER IERROR
26 <  END SUBROUTINE MPI_FINALIZE
27 <  
28 <  SUBROUTINE MPI_BARRIER(COMM, IERROR)
29 <    INTEGER COMM, IERROR
30 <  END SUBROUTINE MPI_BARRIER
31 <  
32 <  SUBROUTINE MPI_COMM_RANK(COMM, RANK, IERROR)
33 <    INTEGER COMM, RANK, IERROR
34 <  END SUBROUTINE MPI_COMM_RANK
35 <  
36 <  SUBROUTINE MPI_COMM_SIZE(COMM, SIZE, IERROR)
37 <    INTEGER COMM, SIZE, IERROR
38 <  END SUBROUTINE MPI_COMM_SIZE
39 <  !
40 <  SUBROUTINE MPI_COMM_SPLIT(COMM, COLOR, KEY, NEWCOMM, IERROR)
41 <    INTEGER COMM, COLOR, KEY, NEWCOMM, IERROR
42 <  END SUBROUTINE MPI_COMM_SPLIT
43 <  
44 <  SUBROUTINE MPI_GET_PROCESSOR_NAME( NAME, RESULTLEN, IERROR)
45 <    CHARACTER(len=*) :: NAME
46 <    INTEGER RESULTLEN,IERROR
47 <  END SUBROUTINE MPI_GET_PROCESSOR_NAME
58 >  ! interfaces for things that we use
59 >  ! These routines are not overloaded and only include one argument type.
60 >  interface
61 >     SUBROUTINE MPI_INIT(IERROR)
62 >       INTEGER IERROR
63 >     END SUBROUTINE MPI_INIT
64  
65 < !  FUNCTION MPI_WTICK()
66 < !    DOUBLE PRECISION MPI_WTICK
67 < !  END FUNCTION MPI_WTICK
52 < end interface
65 >     SUBROUTINE MPI_FINALIZE(IERROR)
66 >       INTEGER IERROR
67 >     END SUBROUTINE MPI_FINALIZE
68  
69 < !! These routines are overloaded and require multiple argument types
69 >     SUBROUTINE MPI_BARRIER(COMM, IERROR)
70 >       INTEGER COMM, IERROR
71 >     END SUBROUTINE MPI_BARRIER
72 >
73 >     SUBROUTINE MPI_COMM_RANK(COMM, RANK, IERROR)
74 >       INTEGER COMM, RANK, IERROR
75 >     END SUBROUTINE MPI_COMM_RANK
76 >
77 >     SUBROUTINE MPI_COMM_SIZE(COMM, SIZE, IERROR)
78 >       INTEGER COMM, SIZE, IERROR
79 >     END SUBROUTINE MPI_COMM_SIZE
80 >     !
81 >     SUBROUTINE MPI_COMM_SPLIT(COMM, COLOR, KEY, NEWCOMM, IERROR)
82 >       INTEGER COMM, COLOR, KEY, NEWCOMM, IERROR
83 >     END SUBROUTINE MPI_COMM_SPLIT
84 >
85 >     SUBROUTINE MPI_GET_PROCESSOR_NAME( NAME, RESULTLEN, IERROR)
86 >       CHARACTER(len=*) :: NAME
87 >       INTEGER RESULTLEN,IERROR
88 >     END SUBROUTINE MPI_GET_PROCESSOR_NAME
89 >
90 >     !  FUNCTION MPI_WTICK()
91 >     !    DOUBLE PRECISION MPI_WTICK
92 >     !  END FUNCTION MPI_WTICK
93 >  end interface
94 >
95 >  !! These routines are overloaded and require multiple argument types
96    interface mpi_allreduce
97       module procedure mpi_allreduce_int
98       module procedure mpi_allreduce_int_1d
99       module procedure mpi_allreduce_int_2d
100       module procedure mpi_allreduce_dp    
101       module procedure mpi_allreduce_dp_1d    
102 <     module procedure mpi_allreduce_dp_2d    
102 >     module procedure mpi_allreduce_dp_2d
103 >     module procedure mpi_allreduce_logical
104 >     module procedure mpi_allreduce_logical_1d
105    end interface
106  
107 < !  interface mpi_reduce
108 < !     module procedure mpi_reduce_int
109 < !     module procedure mpi_reduce_int_1d
110 < !     module procedure mpi_reduce_int_2d
111 < !     module procedure mpi_reduce_dp    
112 < !     module procedure mpi_reduce_dp_1d    
113 < !     module procedure mpi_reduce_dp_2d    
114 < !  end interface
115 <
107 >  !  interface mpi_reduce
108 >  !     module procedure mpi_reduce_int
109 >  !     module procedure mpi_reduce_int_1d
110 >  !     module procedure mpi_reduce_int_2d
111 >  !     module procedure mpi_reduce_dp    
112 >  !     module procedure mpi_reduce_dp_1d    
113 >  !     module procedure mpi_reduce_dp_2d    
114 >  !  end interface
115 >
116    interface mpi_reduce_scatter
117       module procedure mpi_reduce_scatter_int
118       module procedure mpi_reduce_scatter_int_1d
# Line 121 | Line 164 | end interface
164       module procedure mpi_bcast_char
165       module procedure mpi_bcast_logical
166       module procedure mpi_bcast_logical_1d
167 <  end interface
167 >  end interface
168  
169    interface mpi_recv
170       module procedure mpi_recv_int
# Line 134 | Line 177 | end interface
177       module procedure mpi_recv_char
178       module procedure mpi_recv_logical
179       module procedure mpi_recv_logical_1d
180 < end interface
180 >  end interface
181  
182  
183  
# Line 142 | Line 185 | contains
185  
186  
187  
188 < !! MPI BCAST FUNCTIONS
188 >  !! MPI BCAST FUNCTIONS
189    subroutine mpi_bcast_t(BUFFER, COUNT, DATATYPE, ROOT, COMM,    &
190         IERROR)
191 <        character (len=*),dimension(:) :: BUFFER
192 <        integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
193 <        external MPI_BCAST
194 <        call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
191 >    character (len=*),dimension(:) :: BUFFER
192 >    integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
193 >    external MPI_BCAST
194 >    call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
195    end subroutine mpi_bcast_t
196  
197    subroutine mpi_bcast_char(BUFFER, COUNT, DATATYPE, ROOT, COMM,    &
198         IERROR)
199 <        character (len=*) :: BUFFER
200 <        integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
201 <        external MPI_BCAST
202 <        call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
199 >    character (len=*) :: BUFFER
200 >    integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
201 >    external MPI_BCAST
202 >    call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
203    end subroutine mpi_bcast_char
204  
205    subroutine mpi_bcast_int(BUFFER, COUNT, DATATYPE, ROOT, COMM,    &
206         IERROR)
207 <        integer :: BUFFER
208 <        integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
209 <        external MPI_BCAST
210 <        call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
207 >    integer :: BUFFER
208 >    integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
209 >    external MPI_BCAST
210 >    call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
211    end subroutine mpi_bcast_int
212  
213    subroutine mpi_bcast_int_1d(BUFFER, COUNT, DATATYPE, ROOT, COMM,    &
214         IERROR)
215 <        integer, dimension(:) :: BUFFER
216 <        integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
217 <        external MPI_BCAST
218 <        call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
215 >    integer, dimension(:) :: BUFFER
216 >    integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
217 >    external MPI_BCAST
218 >    call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
219    end subroutine mpi_bcast_int_1d
220  
221    subroutine mpi_bcast_int_2d(BUFFER, COUNT, DATATYPE, ROOT, COMM,    &
222         IERROR)
223 <        integer, dimension(:,:) :: BUFFER
224 <        integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
225 <        external MPI_BCAST
226 <        call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
223 >    integer, dimension(:,:) :: BUFFER
224 >    integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
225 >    external MPI_BCAST
226 >    call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
227    end subroutine mpi_bcast_int_2d
228  
229    subroutine mpi_bcast_dp(BUFFER, COUNT, DATATYPE, ROOT, COMM,    &
230         IERROR)
231 <        real(kind = dp) :: BUFFER
232 <        integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
233 <        external MPI_BCAST
234 <        call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
231 >    real(kind = dp) :: BUFFER
232 >    integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
233 >    external MPI_BCAST
234 >    call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
235    end subroutine mpi_bcast_dp
236  
237    subroutine mpi_bcast_dp_1d(BUFFER, COUNT, DATATYPE, ROOT, COMM,    &
238         IERROR)
239 <        real(kind = dp),dimension(:) :: BUFFER
240 <        integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
241 <        external MPI_BCAST
242 <        call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
239 >    real(kind = dp),dimension(:) :: BUFFER
240 >    integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
241 >    external MPI_BCAST
242 >    call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
243    end subroutine mpi_bcast_dp_1d
244  
245    subroutine mpi_bcast_dp_2d(BUFFER, COUNT, DATATYPE, ROOT, COMM,    &
246         IERROR)
247 <        real(kind = dp),dimension(:,:) :: BUFFER
248 <        integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
249 <        external MPI_BCAST
250 <        call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
247 >    real(kind = dp),dimension(:,:) :: BUFFER
248 >    integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
249 >    external MPI_BCAST
250 >    call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
251    end subroutine mpi_bcast_dp_2d
252  
253    subroutine mpi_bcast_logical(BUFFER, COUNT, DATATYPE, ROOT, COMM,    &
# Line 225 | Line 268 | contains
268  
269  
270  
271 < !---------------------END MPIBCAST---------------------------------
271 >  !---------------------END MPIBCAST---------------------------------
272  
273  
274 < !--------------------MPISEND-------------------------------------
274 >  !--------------------MPISEND-------------------------------------
275    SUBROUTINE MPI_SEND_T(BUF, COUNT, DATATYPE, DEST, TAG, COMM,   &
276         IERROR)
277      character(len=*), dimension(:) ::  BUF
# Line 291 | Line 334 | contains
334      EXTERNAL MPI_SEND
335      CALL MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR)
336    END SUBROUTINE MPI_SEND_INT_2D
337 <
337 >
338    SUBROUTINE MPI_SEND_LOGICAL(BUF, COUNT, DATATYPE, DEST, TAG, COMM,   &
339         IERROR)
340      LOGICAL ::  BUF
# Line 307 | Line 350 | contains
350      EXTERNAL MPI_SEND
351      CALL MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR)
352    END SUBROUTINE MPI_SEND_LOGICAL_1D
353 < ! ----------------END MPISEND------------------------------>
353 >  ! ----------------END MPISEND------------------------------>
354  
355 < !------------------BEGIN MPIRECV-------------------------->
355 >  !------------------BEGIN MPIRECV-------------------------->
356  
357    subroutine mpi_recv_T(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
358 <         STATUS, IERROR)
359 <        character(len=*), dimension(:) :: BUF
360 <        INTEGER  COUNT, DATATYPE, SOURCE, TAG, COMM,                   &
358 >       STATUS, IERROR)
359 >    character(len=*), dimension(:) :: BUF
360 >    INTEGER  COUNT, DATATYPE, SOURCE, TAG, COMM,                   &
361           STATUS(MPI_STATUS_SIZE), IERROR
362 <        EXTERNAL MPI_RECV
363 <        CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
362 >    EXTERNAL MPI_RECV
363 >    CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
364           IERROR)
365    end subroutine mpi_recv_T
366  
367    subroutine mpi_recv_char(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
368 <         STATUS, IERROR)
369 <        character(len=*) :: BUF
370 <        INTEGER  COUNT, DATATYPE, SOURCE, TAG, COMM,                   &
368 >       STATUS, IERROR)
369 >    character(len=*) :: BUF
370 >    INTEGER  COUNT, DATATYPE, SOURCE, TAG, COMM,                   &
371           STATUS(MPI_STATUS_SIZE), IERROR
372 <        EXTERNAL MPI_RECV
373 <        CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
372 >    EXTERNAL MPI_RECV
373 >    CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
374           IERROR)
375    end subroutine mpi_recv_char
376  
377    subroutine mpi_recv_int(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
378 <         STATUS, IERROR)
379 <        INTEGER :: BUF
380 <        INTEGER  COUNT, DATATYPE, SOURCE, TAG, COMM,                   &
378 >       STATUS, IERROR)
379 >    INTEGER :: BUF
380 >    INTEGER  COUNT, DATATYPE, SOURCE, TAG, COMM,                   &
381           STATUS(MPI_STATUS_SIZE), IERROR
382 <        EXTERNAL MPI_RECV
383 <        CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
382 >    EXTERNAL MPI_RECV
383 >    CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
384           IERROR)
385    end subroutine mpi_recv_int
386  
387    subroutine mpi_recv_int_1d(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
388 <         STATUS, IERROR)
389 <        INTEGER, dimension(:) :: BUF
390 <        INTEGER  COUNT, DATATYPE, SOURCE, TAG, COMM,                   &
388 >       STATUS, IERROR)
389 >    INTEGER, dimension(:) :: BUF
390 >    INTEGER  COUNT, DATATYPE, SOURCE, TAG, COMM,                   &
391           STATUS(MPI_STATUS_SIZE), IERROR
392 <        EXTERNAL MPI_RECV
393 <        CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
392 >    EXTERNAL MPI_RECV
393 >    CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
394           IERROR)
395    end subroutine mpi_recv_int_1d
396    subroutine mpi_recv_int_2d(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
397         STATUS, IERROR)
398      INTEGER, dimension(:,:) :: BUF
399      INTEGER  COUNT, DATATYPE, SOURCE, TAG, COMM,                   &
400 <            STATUS(MPI_STATUS_SIZE), IERROR
400 >         STATUS(MPI_STATUS_SIZE), IERROR
401      EXTERNAL MPI_RECV
402      CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
403 <            IERROR)
403 >         IERROR)
404    end subroutine mpi_recv_int_2d
405  
406    subroutine mpi_recv_dp(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
# Line 409 | Line 452 | contains
452      CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
453           IERROR)
454    end subroutine mpi_recv_logical
455 < !-------------------------END MPIRECV------------------------------
455 >  !-------------------------END MPIRECV------------------------------
456  
457 < !-------------------------MPI_ALLREDUCE----------------------------
457 >  !-------------------------MPI_ALLREDUCE----------------------------
458  
459    SUBROUTINE MPI_ALLREDUCE_int(SENDBUF, RECVBUF, COUNT, DATATYPE,  &
460 <          OP, COMM, IERROR)
460 >       OP, COMM, IERROR)
461      INTEGER :: SENDBUF, RECVBUF
462      INTEGER COUNT, DATATYPE, OP, COMM, IERROR
463      EXTERNAL MPI_ALLREDUCE
464      CALL MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP,      &
465 <            COMM, IERROR)
465 >         COMM, IERROR)
466    END SUBROUTINE MPI_ALLREDUCE_INT
467  
468    SUBROUTINE MPI_ALLREDUCE_INT_1d(SENDBUF, RECVBUF, COUNT, DATATYPE,  &
469 <          OP, COMM, IERROR)
469 >       OP, COMM, IERROR)
470      INTEGER,dimension(:) :: SENDBUF, RECVBUF
471      INTEGER COUNT, DATATYPE, OP, COMM, IERROR
472      EXTERNAL MPI_ALLREDUCE
473      CALL MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP,      &
474 <            COMM, IERROR)
474 >         COMM, IERROR)
475    END SUBROUTINE MPI_ALLREDUCE_INT_1D
476  
477    SUBROUTINE MPI_ALLREDUCE_INT_2D(SENDBUF, RECVBUF, COUNT, DATATYPE,  &
478 <          OP, COMM, IERROR)
478 >       OP, COMM, IERROR)
479      integer,dimension(:,:) :: SENDBUF, RECVBUF
480      INTEGER COUNT, DATATYPE, OP, COMM, IERROR
481      EXTERNAL MPI_ALLREDUCE
482      CALL MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP,      &
483 <            COMM, IERROR)
483 >         COMM, IERROR)
484    END SUBROUTINE MPI_ALLREDUCE_INT_2D
485  
486    SUBROUTINE MPI_ALLREDUCE_DP(SENDBUF, RECVBUF, COUNT, DATATYPE,  &
487 <          OP, COMM, IERROR)
487 >       OP, COMM, IERROR)
488      REAL(kind=dp) :: SENDBUF, RECVBUF
489      INTEGER COUNT, DATATYPE, OP, COMM, IERROR
490      EXTERNAL MPI_ALLREDUCE
491      CALL MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP,      &
492 <            COMM, IERROR)
492 >         COMM, IERROR)
493    END SUBROUTINE MPI_ALLREDUCE_DP
494  
495    SUBROUTINE MPI_ALLREDUCE_DP_1d(SENDBUF, RECVBUF, COUNT, DATATYPE,  &
496 <          OP, COMM, IERROR)
496 >       OP, COMM, IERROR)
497      REAL(kind=dp),dimension(:) :: SENDBUF, RECVBUF
498      INTEGER COUNT, DATATYPE, OP, COMM, IERROR
499      EXTERNAL MPI_ALLREDUCE
500      CALL MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP,      &
501 <            COMM, IERROR)
501 >         COMM, IERROR)
502    END SUBROUTINE MPI_ALLREDUCE_DP_1D
503  
504    SUBROUTINE MPI_ALLREDUCE_DP_2D(SENDBUF, RECVBUF, COUNT, DATATYPE,  &
505 <          OP, COMM, IERROR)
505 >       OP, COMM, IERROR)
506      real(kind=dp),dimension(:,:) :: SENDBUF, RECVBUF
507      INTEGER COUNT, DATATYPE, OP, COMM, IERROR
508      EXTERNAL MPI_ALLREDUCE
509      CALL MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP,      &
510 <            COMM, IERROR)
510 >         COMM, IERROR)
511    END SUBROUTINE MPI_ALLREDUCE_DP_2D
469 !-----------------END MPI_ALLREDUCE-------------------------->
512  
513 < !----------------BEGIN MPI_REDUCE_SCATTER
513 >
514 >  SUBROUTINE MPI_ALLREDUCE_LOGICAL(SENDBUF, RECVBUF, COUNT, DATATYPE,  &
515 >       OP, COMM, IERROR)
516 >    LOGICAL :: SENDBUF, RECVBUF
517 >    INTEGER COUNT, DATATYPE, OP, COMM, IERROR
518 >    EXTERNAL MPI_ALLREDUCE
519 >    CALL MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP,      &
520 >         COMM, IERROR)
521 >  END SUBROUTINE MPI_ALLREDUCE_LOGICAL
522 >
523 >
524 >  SUBROUTINE MPI_ALLREDUCE_LOGICAL_1D(SENDBUF, RECVBUF, COUNT, DATATYPE,  &
525 >       OP, COMM, IERROR)
526 >    LOGICAL, dimension(:) :: SENDBUF, RECVBUF
527 >    INTEGER COUNT, DATATYPE, OP, COMM, IERROR
528 >    EXTERNAL MPI_ALLREDUCE
529 >    CALL MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP,      &
530 >         COMM, IERROR)
531 >  end SUBROUTINE MPI_ALLREDUCE_LOGICAL_1D
532 >
533 >  !-----------------END MPI_ALLREDUCE-------------------------->
534 >
535 >  !----------------BEGIN MPI_REDUCE_SCATTER
536    SUBROUTINE MPI_REDUCE_SCATTER_DP(SENDBUF, RECVBUF, RECVCOUNTS,  &
537         DATATYPE, OP, COMM, IERROR)
538      real(kind=dp) :: SENDBUF, RECVBUF
# Line 523 | Line 587 | contains
587           DATATYPE, OP, COMM, IERROR)
588    END SUBROUTINE MPI_REDUCE_SCATTER_INT_2D
589  
590 < !end ---------------------MPI_REDUCE_SCATTER----------------->
590 >  !end ---------------------MPI_REDUCE_SCATTER----------------->
591  
592 < !BEGIN------------------- MPI_ALLGATHERV--------------------->
592 >  !BEGIN------------------- MPI_ALLGATHERV--------------------->
593    SUBROUTINE MPI_ALLGATHERV_INT(SENDBUF, SENDCOUNT, SENDTYPE,         &
594         RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)
595      INTEGER :: SENDBUF
# Line 557 | Line 621 | contains
621           RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)
622    END SUBROUTINE MPI_ALLGATHERV_INT_2D
623  
624 < SUBROUTINE MPI_ALLGATHERV_DP(SENDBUF, SENDCOUNT, SENDTYPE,         &
624 >  SUBROUTINE MPI_ALLGATHERV_DP(SENDBUF, SENDCOUNT, SENDTYPE,         &
625         RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)
626      real(kind=dp) :: SENDBUF
627      real(kind=dp),dimension(:) :: RECVBUF
# Line 587 | Line 651 | contains
651      CALL MPI_ALLGATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF,        &
652           RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)
653    END SUBROUTINE MPI_ALLGATHERV_DP_2D
654 < !--------------------------end MPI_ALLGATHERV----------------------->
654 >  !--------------------------end MPI_ALLGATHERV----------------------->
655  
656    SUBROUTINE MPI_ALLGATHER_DP(SENDBUF, SENDCOUNT, SENDTYPE,       &
657 <         RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
657 >       RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
658      real(kind=dp) :: SENDBUF
659      real(kind=dp), dimension(:) :: RECVBUF
660      INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
# Line 600 | Line 664 | contains
664    END SUBROUTINE MPI_ALLGATHER_DP
665  
666    SUBROUTINE MPI_ALLGATHER_DP_1D(SENDBUF, SENDCOUNT, SENDTYPE,       &
667 <         RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
667 >       RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
668      real(kind=dp),dimension(:) :: SENDBUF, RECVBUF
669      INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
670      EXTERNAL MPI_ALLGATHER
# Line 609 | Line 673 | contains
673    END SUBROUTINE MPI_ALLGATHER_DP_1D
674  
675    SUBROUTINE MPI_ALLGATHER_DP_2D(SENDBUF, SENDCOUNT, SENDTYPE,       &
676 <         RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
676 >       RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
677      real(kind=dp),dimension(:,:) :: SENDBUF, RECVBUF
678      INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
679      EXTERNAL MPI_ALLGATHER
# Line 618 | Line 682 | contains
682    END SUBROUTINE MPI_ALLGATHER_DP_2D
683  
684    SUBROUTINE MPI_ALLGATHER_INT(SENDBUF, SENDCOUNT, SENDTYPE,       &
685 <         RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
685 >       RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
686      integer :: SENDBUF
687      integer,dimension(:) :: RECVBUF
688      INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
# Line 628 | Line 692 | contains
692    END SUBROUTINE MPI_ALLGATHER_INT
693  
694    SUBROUTINE MPI_ALLGATHER_INT_1D(SENDBUF, SENDCOUNT, SENDTYPE,       &
695 <         RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
695 >       RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
696      integer,dimension(:) :: SENDBUF, RECVBUF
697      INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
698      EXTERNAL MPI_ALLGATHER
# Line 637 | Line 701 | contains
701    END SUBROUTINE MPI_ALLGATHER_INT_1D
702  
703    SUBROUTINE MPI_ALLGATHER_INT_2D(SENDBUF, SENDCOUNT, SENDTYPE,       &
704 <         RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
704 >       RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
705      integer,dimension(:,:) :: SENDBUF, RECVBUF
706      INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
707      EXTERNAL MPI_ALLGATHER
708      CALL MPI_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF,      &
709           RECVCOUNT, RECVTYPE, COMM, IERROR)
710    END SUBROUTINE MPI_ALLGATHER_INT_2D
711 < !-----------------------END MPI_ALLGATHER---------------------------
711 >  !-----------------------END MPI_ALLGATHER---------------------------
712  
713   #endif
714   end module oopseMPI

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines