ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/oopseMPI_module.F90
Revision: 858
Committed: Fri Nov 7 21:46:56 2003 UTC (20 years, 8 months ago) by chuckv
File size: 24798 byte(s)
Log Message:
Added support for compiling fortran without use of mpich modules. We use mpif.h instead.:

File Contents

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