ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/src/utils/oopseMPI.F90
Revision: 1930
Committed: Wed Jan 12 22:41:40 2005 UTC (19 years, 5 months ago) by gezelter
File size: 26892 byte(s)
Log Message:
merging new_design branch into OOPSE-2.0

File Contents

# User Rev Content
1 gezelter 1930 !!
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 gezelter 1612 !! Wrapper interfaces for mpi.
43     !! This wrapper should work independently of mpi implimentation.
44     !! We only provide an explicit interface for routines we use.
45     !! Access to other functions is external
46     module oopseMPI
47     use definitions, ONLY : dp
48     #ifdef IS_MPI
49     implicit none
50     PUBLIC !WARNING everything in this module is public
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
64    
65     SUBROUTINE MPI_FINALIZE(IERROR)
66     INTEGER IERROR
67     END SUBROUTINE MPI_FINALIZE
68    
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
103     end interface
104    
105     ! interface mpi_reduce
106     ! module procedure mpi_reduce_int
107     ! module procedure mpi_reduce_int_1d
108     ! module procedure mpi_reduce_int_2d
109     ! module procedure mpi_reduce_dp
110     ! module procedure mpi_reduce_dp_1d
111     ! module procedure mpi_reduce_dp_2d
112     ! end interface
113    
114     interface mpi_reduce_scatter
115     module procedure mpi_reduce_scatter_int
116     module procedure mpi_reduce_scatter_int_1d
117     module procedure mpi_reduce_scatter_int_2d
118     module procedure mpi_reduce_scatter_dp
119     module procedure mpi_reduce_scatter_dp_1d
120     module procedure mpi_reduce_scatter_dp_2d
121     end interface
122    
123     interface mpi_allgatherv
124     module procedure mpi_allgatherv_int
125     module procedure mpi_allgatherv_int_1d
126     module procedure mpi_allgatherv_int_2d
127     module procedure mpi_allgatherv_dp
128     module procedure mpi_allgatherv_dp_1d
129     module procedure mpi_allgatherv_dp_2d
130     end interface
131    
132     interface mpi_allgather
133     module procedure mpi_allgather_int
134     module procedure mpi_allgather_int_1d
135     module procedure mpi_allgather_int_2d
136     module procedure mpi_allgather_dp
137     module procedure mpi_allgather_dp_1d
138     module procedure mpi_allgather_dp_2d
139     end interface
140    
141     interface mpi_send
142     module procedure mpi_send_dp
143     module procedure mpi_send_dp_1d
144     module procedure mpi_send_dp_2d
145     module procedure mpi_send_int
146     module procedure mpi_send_int_1d
147     module procedure mpi_send_int_2d
148     module procedure mpi_send_logical
149     module procedure mpi_send_logical_1d
150     module procedure mpi_send_t
151     module procedure mpi_send_char
152     end interface
153    
154     interface mpi_bcast
155     module procedure mpi_bcast_dp
156     module procedure mpi_bcast_dp_1d
157     module procedure mpi_bcast_dp_2d
158     module procedure mpi_bcast_int
159     module procedure mpi_bcast_int_1d
160     module procedure mpi_bcast_int_2d
161     module procedure mpi_bcast_t
162     module procedure mpi_bcast_char
163     module procedure mpi_bcast_logical
164     module procedure mpi_bcast_logical_1d
165     end interface
166    
167     interface mpi_recv
168     module procedure mpi_recv_int
169     module procedure mpi_recv_int_1d
170     module procedure mpi_recv_int_2d
171     module procedure mpi_recv_dp
172     module procedure mpi_recv_dp_1d
173     module procedure mpi_recv_dp_2d
174     module procedure mpi_recv_t
175     module procedure mpi_recv_char
176     module procedure mpi_recv_logical
177     module procedure mpi_recv_logical_1d
178     end interface
179    
180    
181    
182     contains
183    
184    
185    
186     !! MPI BCAST FUNCTIONS
187     subroutine mpi_bcast_t(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
188     IERROR)
189     character (len=*),dimension(:) :: BUFFER
190     integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
191     external MPI_BCAST
192     call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
193     end subroutine mpi_bcast_t
194    
195     subroutine mpi_bcast_char(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
196     IERROR)
197     character (len=*) :: BUFFER
198     integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
199     external MPI_BCAST
200     call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
201     end subroutine mpi_bcast_char
202    
203     subroutine mpi_bcast_int(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
204     IERROR)
205     integer :: BUFFER
206     integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
207     external MPI_BCAST
208     call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
209     end subroutine mpi_bcast_int
210    
211     subroutine mpi_bcast_int_1d(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
212     IERROR)
213     integer, dimension(:) :: BUFFER
214     integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
215     external MPI_BCAST
216     call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
217     end subroutine mpi_bcast_int_1d
218    
219     subroutine mpi_bcast_int_2d(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
220     IERROR)
221     integer, dimension(:,:) :: BUFFER
222     integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
223     external MPI_BCAST
224     call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
225     end subroutine mpi_bcast_int_2d
226    
227     subroutine mpi_bcast_dp(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
228     IERROR)
229     real(kind = dp) :: BUFFER
230     integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
231     external MPI_BCAST
232     call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
233     end subroutine mpi_bcast_dp
234    
235     subroutine mpi_bcast_dp_1d(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
236     IERROR)
237     real(kind = dp),dimension(:) :: BUFFER
238     integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
239     external MPI_BCAST
240     call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
241     end subroutine mpi_bcast_dp_1d
242    
243     subroutine mpi_bcast_dp_2d(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
244     IERROR)
245     real(kind = dp),dimension(:,:) :: BUFFER
246     integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
247     external MPI_BCAST
248     call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
249     end subroutine mpi_bcast_dp_2d
250    
251     subroutine mpi_bcast_logical(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
252     IERROR)
253     logical :: BUFFER
254     integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
255     external MPI_BCAST
256     call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
257     end subroutine mpi_bcast_logical
258    
259     subroutine mpi_bcast_logical_1d(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
260     IERROR)
261     logical,dimension(:) :: BUFFER
262     integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
263     external MPI_BCAST
264     call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
265     end subroutine mpi_bcast_logical_1d
266    
267    
268    
269     !---------------------END MPIBCAST---------------------------------
270    
271    
272     !--------------------MPISEND-------------------------------------
273     SUBROUTINE MPI_SEND_T(BUF, COUNT, DATATYPE, DEST, TAG, COMM, &
274     IERROR)
275     character(len=*), dimension(:) :: BUF
276     INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR
277     EXTERNAL MPI_SEND
278     CALL MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR)
279     END SUBROUTINE MPI_SEND_T
280     SUBROUTINE MPI_SEND_CHAR(BUF, COUNT, DATATYPE, DEST, TAG, COMM, &
281     IERROR)
282     character(len=*) :: BUF
283     INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR
284     EXTERNAL MPI_SEND
285     CALL MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR)
286     END SUBROUTINE MPI_SEND_CHAR
287    
288     SUBROUTINE MPI_SEND_DP(BUF, COUNT, DATATYPE, DEST, TAG, COMM, &
289     IERROR)
290     real(kind=dp) :: BUF
291     INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR
292     EXTERNAL MPI_SEND
293     CALL MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR)
294     END SUBROUTINE MPI_SEND_DP
295    
296     SUBROUTINE MPI_SEND_DP_1D(BUF, COUNT, DATATYPE, DEST, TAG, COMM, &
297     IERROR)
298     real(kind=dp), dimension(:) :: BUF
299     INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR
300     EXTERNAL MPI_SEND
301     CALL MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR)
302     END SUBROUTINE MPI_SEND_DP_1D
303    
304     SUBROUTINE MPI_SEND_DP_2D(BUF, COUNT, DATATYPE, DEST, TAG, COMM, &
305     IERROR)
306     real(kind=dp), dimension(:,:) :: BUF
307     INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR
308     EXTERNAL MPI_SEND
309     CALL MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR)
310     END SUBROUTINE MPI_SEND_DP_2D
311    
312     SUBROUTINE MPI_SEND_INT(BUF, COUNT, DATATYPE, DEST, TAG, COMM, &
313     IERROR)
314     INTEGER :: BUF
315     INTEGER :: COUNT, DATATYPE, DEST, TAG, COMM, IERROR
316     EXTERNAL MPI_SEND
317     CALL MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR)
318     END SUBROUTINE MPI_SEND_INT
319    
320     SUBROUTINE MPI_SEND_INT_1D(BUF, COUNT, DATATYPE, DEST, TAG, COMM, &
321     IERROR)
322     INTEGER, dimension(:) :: BUF
323     INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR
324     EXTERNAL MPI_SEND
325     CALL MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR)
326     END SUBROUTINE MPI_SEND_INT_1D
327    
328     SUBROUTINE MPI_SEND_INT_2D(BUF, COUNT, DATATYPE, DEST, TAG, COMM, &
329     IERROR)
330     INTEGER, dimension(:,:) :: BUF
331     INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR
332     EXTERNAL MPI_SEND
333     CALL MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR)
334     END SUBROUTINE MPI_SEND_INT_2D
335    
336     SUBROUTINE MPI_SEND_LOGICAL(BUF, COUNT, DATATYPE, DEST, TAG, COMM, &
337     IERROR)
338     LOGICAL :: BUF
339     INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR
340     EXTERNAL MPI_SEND
341     CALL MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR)
342     END SUBROUTINE MPI_SEND_LOGICAL
343    
344     SUBROUTINE MPI_SEND_LOGICAL_1D(BUF, COUNT, DATATYPE, DEST, TAG, COMM, &
345     IERROR)
346     LOGICAL,dimension(:) :: BUF
347     INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR
348     EXTERNAL MPI_SEND
349     CALL MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR)
350     END SUBROUTINE MPI_SEND_LOGICAL_1D
351     ! ----------------END MPISEND------------------------------>
352    
353     !------------------BEGIN MPIRECV-------------------------->
354    
355     subroutine mpi_recv_T(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
356     STATUS, IERROR)
357     character(len=*), dimension(:) :: BUF
358     INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, &
359     STATUS(MPI_STATUS_SIZE), IERROR
360     EXTERNAL MPI_RECV
361     CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
362     IERROR)
363     end subroutine mpi_recv_T
364    
365     subroutine mpi_recv_char(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
366     STATUS, IERROR)
367     character(len=*) :: BUF
368     INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, &
369     STATUS(MPI_STATUS_SIZE), IERROR
370     EXTERNAL MPI_RECV
371     CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
372     IERROR)
373     end subroutine mpi_recv_char
374    
375     subroutine mpi_recv_int(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
376     STATUS, IERROR)
377     INTEGER :: BUF
378     INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, &
379     STATUS(MPI_STATUS_SIZE), IERROR
380     EXTERNAL MPI_RECV
381     CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
382     IERROR)
383     end subroutine mpi_recv_int
384    
385     subroutine mpi_recv_int_1d(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
386     STATUS, IERROR)
387     INTEGER, dimension(:) :: BUF
388     INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, &
389     STATUS(MPI_STATUS_SIZE), IERROR
390     EXTERNAL MPI_RECV
391     CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
392     IERROR)
393     end subroutine mpi_recv_int_1d
394     subroutine mpi_recv_int_2d(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
395     STATUS, IERROR)
396     INTEGER, dimension(:,:) :: BUF
397     INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, &
398     STATUS(MPI_STATUS_SIZE), IERROR
399     EXTERNAL MPI_RECV
400     CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
401     IERROR)
402     end subroutine mpi_recv_int_2d
403    
404     subroutine mpi_recv_dp(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
405     STATUS, IERROR)
406     real(kind=dp) :: BUF
407     INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, &
408     STATUS(MPI_STATUS_SIZE), IERROR
409     EXTERNAL MPI_RECV
410     CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
411     IERROR)
412     end subroutine mpi_recv_dp
413    
414     subroutine mpi_recv_dp_1d(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
415     STATUS, IERROR)
416     real(kind=dp), dimension(:) :: BUF
417     INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, &
418     STATUS(MPI_STATUS_SIZE), IERROR
419     EXTERNAL MPI_RECV
420     CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
421     IERROR)
422     end subroutine mpi_recv_dp_1d
423    
424     subroutine mpi_recv_dp_2d(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
425     STATUS, IERROR)
426     real(kind=dp), dimension(:,:) :: BUF
427     INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, &
428     STATUS(MPI_STATUS_SIZE), IERROR
429     EXTERNAL MPI_RECV
430     CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
431     IERROR)
432     end subroutine mpi_recv_dp_2d
433    
434     subroutine mpi_recv_logical_1d(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
435     STATUS, IERROR)
436     logical, dimension(:) :: BUF
437     INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, &
438     STATUS(MPI_STATUS_SIZE), IERROR
439     EXTERNAL MPI_RECV
440     CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
441     IERROR)
442     end subroutine mpi_recv_logical_1d
443    
444     subroutine mpi_recv_logical(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
445     STATUS, IERROR)
446     logical :: BUF
447     INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, &
448     STATUS(MPI_STATUS_SIZE), IERROR
449     EXTERNAL MPI_RECV
450     CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
451     IERROR)
452     end subroutine mpi_recv_logical
453     !-------------------------END MPIRECV------------------------------
454    
455     !-------------------------MPI_ALLREDUCE----------------------------
456    
457     SUBROUTINE MPI_ALLREDUCE_int(SENDBUF, RECVBUF, COUNT, DATATYPE, &
458     OP, COMM, IERROR)
459     INTEGER :: SENDBUF, RECVBUF
460     INTEGER COUNT, DATATYPE, OP, COMM, IERROR
461     EXTERNAL MPI_ALLREDUCE
462     CALL MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, &
463     COMM, IERROR)
464     END SUBROUTINE MPI_ALLREDUCE_INT
465    
466     SUBROUTINE MPI_ALLREDUCE_INT_1d(SENDBUF, RECVBUF, COUNT, DATATYPE, &
467     OP, COMM, IERROR)
468     INTEGER,dimension(:) :: SENDBUF, RECVBUF
469     INTEGER COUNT, DATATYPE, OP, COMM, IERROR
470     EXTERNAL MPI_ALLREDUCE
471     CALL MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, &
472     COMM, IERROR)
473     END SUBROUTINE MPI_ALLREDUCE_INT_1D
474    
475     SUBROUTINE MPI_ALLREDUCE_INT_2D(SENDBUF, RECVBUF, COUNT, DATATYPE, &
476     OP, COMM, IERROR)
477     integer,dimension(:,:) :: SENDBUF, RECVBUF
478     INTEGER COUNT, DATATYPE, OP, COMM, IERROR
479     EXTERNAL MPI_ALLREDUCE
480     CALL MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, &
481     COMM, IERROR)
482     END SUBROUTINE MPI_ALLREDUCE_INT_2D
483    
484     SUBROUTINE MPI_ALLREDUCE_DP(SENDBUF, RECVBUF, COUNT, DATATYPE, &
485     OP, COMM, IERROR)
486     REAL(kind=dp) :: SENDBUF, RECVBUF
487     INTEGER COUNT, DATATYPE, OP, COMM, IERROR
488     EXTERNAL MPI_ALLREDUCE
489     CALL MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, &
490     COMM, IERROR)
491     END SUBROUTINE MPI_ALLREDUCE_DP
492    
493     SUBROUTINE MPI_ALLREDUCE_DP_1d(SENDBUF, RECVBUF, COUNT, DATATYPE, &
494     OP, COMM, IERROR)
495     REAL(kind=dp),dimension(:) :: SENDBUF, RECVBUF
496     INTEGER COUNT, DATATYPE, OP, COMM, IERROR
497     EXTERNAL MPI_ALLREDUCE
498     CALL MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, &
499     COMM, IERROR)
500     END SUBROUTINE MPI_ALLREDUCE_DP_1D
501    
502     SUBROUTINE MPI_ALLREDUCE_DP_2D(SENDBUF, RECVBUF, COUNT, DATATYPE, &
503     OP, COMM, IERROR)
504     real(kind=dp),dimension(:,:) :: SENDBUF, RECVBUF
505     INTEGER COUNT, DATATYPE, OP, COMM, IERROR
506     EXTERNAL MPI_ALLREDUCE
507     CALL MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, &
508     COMM, IERROR)
509     END SUBROUTINE MPI_ALLREDUCE_DP_2D
510     !-----------------END MPI_ALLREDUCE-------------------------->
511    
512     !----------------BEGIN MPI_REDUCE_SCATTER
513     SUBROUTINE MPI_REDUCE_SCATTER_DP(SENDBUF, RECVBUF, RECVCOUNTS, &
514     DATATYPE, OP, COMM, IERROR)
515     real(kind=dp) :: SENDBUF, RECVBUF
516     INTEGER RECVCOUNTS(*), DATATYPE, OP, COMM, IERROR
517     EXTERNAL MPI_REDUCE_SCATTER
518     CALL MPI_REDUCE_SCATTER(SENDBUF, RECVBUF, RECVCOUNTS, &
519     DATATYPE, OP, COMM, IERROR)
520     END SUBROUTINE MPI_REDUCE_SCATTER_DP
521    
522     SUBROUTINE MPI_REDUCE_SCATTER_DP_1D(SENDBUF, RECVBUF, RECVCOUNTS, &
523     DATATYPE, OP, COMM, IERROR)
524     real(kind=dp),dimension(:) :: SENDBUF, RECVBUF
525     INTEGER RECVCOUNTS(*), DATATYPE, OP, COMM, IERROR
526     EXTERNAL MPI_REDUCE_SCATTER
527     CALL MPI_REDUCE_SCATTER(SENDBUF, RECVBUF, RECVCOUNTS, &
528     DATATYPE, OP, COMM, IERROR)
529     END SUBROUTINE MPI_REDUCE_SCATTER_DP_1D
530    
531     SUBROUTINE MPI_REDUCE_SCATTER_DP_2D(SENDBUF, RECVBUF, RECVCOUNTS, &
532     DATATYPE, OP, COMM, IERROR)
533     real(kind=dp),dimension(:,:) :: SENDBUF, RECVBUF
534     INTEGER RECVCOUNTS(*), DATATYPE, OP, COMM, IERROR
535     EXTERNAL MPI_REDUCE_SCATTER
536     CALL MPI_REDUCE_SCATTER(SENDBUF, RECVBUF, RECVCOUNTS, &
537     DATATYPE, OP, COMM, IERROR)
538     END SUBROUTINE MPI_REDUCE_SCATTER_DP_2D
539    
540     SUBROUTINE MPI_REDUCE_SCATTER_INT(SENDBUF, RECVBUF, RECVCOUNTS, &
541     DATATYPE, OP, COMM, IERROR)
542     integer :: SENDBUF, RECVBUF
543     INTEGER RECVCOUNTS(*), DATATYPE, OP, COMM, IERROR
544     EXTERNAL MPI_REDUCE_SCATTER
545     CALL MPI_REDUCE_SCATTER(SENDBUF, RECVBUF, RECVCOUNTS, &
546     DATATYPE, OP, COMM, IERROR)
547     END SUBROUTINE MPI_REDUCE_SCATTER_INT
548    
549     SUBROUTINE MPI_REDUCE_SCATTER_INT_1D(SENDBUF, RECVBUF, RECVCOUNTS, &
550     DATATYPE, OP, COMM, IERROR)
551     integer,dimension(:) :: SENDBUF, RECVBUF
552     INTEGER RECVCOUNTS(*), DATATYPE, OP, COMM, IERROR
553     EXTERNAL MPI_REDUCE_SCATTER
554     CALL MPI_REDUCE_SCATTER(SENDBUF, RECVBUF, RECVCOUNTS, &
555     DATATYPE, OP, COMM, IERROR)
556     END SUBROUTINE MPI_REDUCE_SCATTER_INT_1D
557    
558     SUBROUTINE MPI_REDUCE_SCATTER_INT_2D(SENDBUF, RECVBUF, RECVCOUNTS, &
559     DATATYPE, OP, COMM, IERROR)
560     integer,dimension(:,:) :: SENDBUF, RECVBUF
561     INTEGER RECVCOUNTS(*), DATATYPE, OP, COMM, IERROR
562     EXTERNAL MPI_REDUCE_SCATTER
563     CALL MPI_REDUCE_SCATTER(SENDBUF, RECVBUF, RECVCOUNTS, &
564     DATATYPE, OP, COMM, IERROR)
565     END SUBROUTINE MPI_REDUCE_SCATTER_INT_2D
566    
567     !end ---------------------MPI_REDUCE_SCATTER----------------->
568    
569     !BEGIN------------------- MPI_ALLGATHERV--------------------->
570     SUBROUTINE MPI_ALLGATHERV_INT(SENDBUF, SENDCOUNT, SENDTYPE, &
571     RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)
572     INTEGER :: SENDBUF
573     INTEGER,dimension(:) :: RECVBUF
574     INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*), &
575     RECVTYPE, COMM, IERROR
576     EXTERNAL MPI_ALLGATHERV
577     CALL MPI_ALLGATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, &
578     RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)
579     END SUBROUTINE MPI_ALLGATHERV_INT
580    
581     SUBROUTINE MPI_ALLGATHERV_INT_1D(SENDBUF, SENDCOUNT, SENDTYPE, &
582     RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)
583     INTEGER,dimension(:) :: SENDBUF, RECVBUF
584     INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*), &
585     RECVTYPE, COMM, IERROR
586     EXTERNAL MPI_ALLGATHERV
587     CALL MPI_ALLGATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, &
588     RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)
589     END SUBROUTINE MPI_AlLGATHERV_INT_1D
590    
591     SUBROUTINE MPI_ALLGATHERV_INT_2D(SENDBUF, SENDCOUNT, SENDTYPE, &
592     RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)
593     INTEGER,dimension(:,:) :: SENDBUF, RECVBUF
594     INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*), &
595     RECVTYPE, COMM, IERROR
596     EXTERNAL MPI_ALLGATHERV
597     CALL MPI_ALLGATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, &
598     RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)
599     END SUBROUTINE MPI_ALLGATHERV_INT_2D
600    
601     SUBROUTINE MPI_ALLGATHERV_DP(SENDBUF, SENDCOUNT, SENDTYPE, &
602     RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)
603     real(kind=dp) :: SENDBUF
604     real(kind=dp),dimension(:) :: RECVBUF
605     INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*), &
606     RECVTYPE, ROOT, COMM, IERROR
607     EXTERNAL MPI_ALLGATHERV
608     CALL MPI_ALLGATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, &
609     RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)
610     END SUBROUTINE MPI_ALLGATHERV_DP
611    
612     SUBROUTINE MPI_ALLGATHERV_DP_1D(SENDBUF, SENDCOUNT, SENDTYPE, &
613     RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)
614     real(kind=dp),dimension(:) :: SENDBUF, RECVBUF
615     INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*), &
616     RECVTYPE, COMM, IERROR
617     EXTERNAL MPI_ALLGATHERV
618     CALL MPI_ALLGATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, &
619     RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)
620     END SUBROUTINE MPI_AlLGATHERV_dp_1D
621    
622     SUBROUTINE MPI_ALLGATHERV_dp_2D(SENDBUF, SENDCOUNT, SENDTYPE, &
623     RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)
624     REAL(kind=dp),dimension(:,:) :: SENDBUF, RECVBUF
625     INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*), &
626     RECVTYPE, COMM, IERROR
627     EXTERNAL MPI_ALLGATHERV
628     CALL MPI_ALLGATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, &
629     RECVCOUNTS, DISPLS, RECVTYPE, COMM, IERROR)
630     END SUBROUTINE MPI_ALLGATHERV_DP_2D
631     !--------------------------end MPI_ALLGATHERV----------------------->
632    
633     SUBROUTINE MPI_ALLGATHER_DP(SENDBUF, SENDCOUNT, SENDTYPE, &
634     RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
635     real(kind=dp) :: SENDBUF
636     real(kind=dp), dimension(:) :: RECVBUF
637     INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
638     EXTERNAL MPI_ALLGATHER
639     CALL MPI_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, &
640     RECVCOUNT, RECVTYPE, COMM, IERROR)
641     END SUBROUTINE MPI_ALLGATHER_DP
642    
643     SUBROUTINE MPI_ALLGATHER_DP_1D(SENDBUF, SENDCOUNT, SENDTYPE, &
644     RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
645     real(kind=dp),dimension(:) :: SENDBUF, RECVBUF
646     INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
647     EXTERNAL MPI_ALLGATHER
648     CALL MPI_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, &
649     RECVCOUNT, RECVTYPE, COMM, IERROR)
650     END SUBROUTINE MPI_ALLGATHER_DP_1D
651    
652     SUBROUTINE MPI_ALLGATHER_DP_2D(SENDBUF, SENDCOUNT, SENDTYPE, &
653     RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
654     real(kind=dp),dimension(:,:) :: SENDBUF, RECVBUF
655     INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
656     EXTERNAL MPI_ALLGATHER
657     CALL MPI_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, &
658     RECVCOUNT, RECVTYPE, COMM, IERROR)
659     END SUBROUTINE MPI_ALLGATHER_DP_2D
660    
661     SUBROUTINE MPI_ALLGATHER_INT(SENDBUF, SENDCOUNT, SENDTYPE, &
662     RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
663     integer :: SENDBUF
664     integer,dimension(:) :: RECVBUF
665     INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
666     EXTERNAL MPI_ALLGATHER
667     CALL MPI_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, &
668     RECVCOUNT, RECVTYPE, COMM, IERROR)
669     END SUBROUTINE MPI_ALLGATHER_INT
670    
671     SUBROUTINE MPI_ALLGATHER_INT_1D(SENDBUF, SENDCOUNT, SENDTYPE, &
672     RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
673     integer,dimension(:) :: SENDBUF, RECVBUF
674     INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
675     EXTERNAL MPI_ALLGATHER
676     CALL MPI_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, &
677     RECVCOUNT, RECVTYPE, COMM, IERROR)
678     END SUBROUTINE MPI_ALLGATHER_INT_1D
679    
680     SUBROUTINE MPI_ALLGATHER_INT_2D(SENDBUF, SENDCOUNT, SENDTYPE, &
681     RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
682     integer,dimension(:,:) :: SENDBUF, RECVBUF
683     INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
684     EXTERNAL MPI_ALLGATHER
685     CALL MPI_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, &
686     RECVCOUNT, RECVTYPE, COMM, IERROR)
687     END SUBROUTINE MPI_ALLGATHER_INT_2D
688     !-----------------------END MPI_ALLGATHER---------------------------
689    
690     #endif
691     end module oopseMPI