ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/oopseMPI_module.F90
Revision: 940
Committed: Tue Jan 13 22:34:55 2004 UTC (20 years, 5 months ago) by gezelter
File size: 24818 byte(s)
Log Message:
Some changes for new MPI organization and direct charge-charge interactions

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