ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/utils/oopseMPI.F90
Revision: 2204
Committed: Fri Apr 15 22:04:00 2005 UTC (19 years, 3 months ago) by gezelter
File size: 26761 byte(s)
Log Message:
xemacs has been drafted to perform our indentation services

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 gezelter 2204
53 gezelter 1612 include "mpif.h"
54    
55     private :: dp
56    
57    
58 gezelter 2204 ! 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 gezelter 1612
65 gezelter 2204 SUBROUTINE MPI_FINALIZE(IERROR)
66     INTEGER IERROR
67     END SUBROUTINE MPI_FINALIZE
68 gezelter 1612
69 gezelter 2204 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 gezelter 1612 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 gezelter 2204 ! 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 gezelter 1612 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 gezelter 2204 end interface
166 gezelter 1612
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 gezelter 2204 end interface
179 gezelter 1612
180    
181    
182     contains
183    
184    
185    
186 gezelter 2204 !! MPI BCAST FUNCTIONS
187 gezelter 1612 subroutine mpi_bcast_t(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
188     IERROR)
189 gezelter 2204 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 gezelter 1612 end subroutine mpi_bcast_t
194    
195     subroutine mpi_bcast_char(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
196     IERROR)
197 gezelter 2204 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 gezelter 1612 end subroutine mpi_bcast_char
202    
203     subroutine mpi_bcast_int(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
204     IERROR)
205 gezelter 2204 integer :: BUFFER
206     integer :: COUNT, DATATYPE, ROOT, COMM, IERROR
207     external MPI_BCAST
208     call MPI_BCAST(BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR)
209 gezelter 1612 end subroutine mpi_bcast_int
210    
211     subroutine mpi_bcast_int_1d(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
212     IERROR)
213 gezelter 2204 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 gezelter 1612 end subroutine mpi_bcast_int_1d
218    
219     subroutine mpi_bcast_int_2d(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
220     IERROR)
221 gezelter 2204 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 gezelter 1612 end subroutine mpi_bcast_int_2d
226    
227     subroutine mpi_bcast_dp(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
228     IERROR)
229 gezelter 2204 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 gezelter 1612 end subroutine mpi_bcast_dp
234    
235     subroutine mpi_bcast_dp_1d(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
236     IERROR)
237 gezelter 2204 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 gezelter 1612 end subroutine mpi_bcast_dp_1d
242    
243     subroutine mpi_bcast_dp_2d(BUFFER, COUNT, DATATYPE, ROOT, COMM, &
244     IERROR)
245 gezelter 2204 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 gezelter 1612 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 gezelter 2204 !---------------------END MPIBCAST---------------------------------
270 gezelter 1612
271    
272 gezelter 2204 !--------------------MPISEND-------------------------------------
273 gezelter 1612 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 gezelter 2204
336 gezelter 1612 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 gezelter 2204 ! ----------------END MPISEND------------------------------>
352 gezelter 1612
353 gezelter 2204 !------------------BEGIN MPIRECV-------------------------->
354 gezelter 1612
355     subroutine mpi_recv_T(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
356 gezelter 2204 STATUS, IERROR)
357     character(len=*), dimension(:) :: BUF
358     INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, &
359 gezelter 1612 STATUS(MPI_STATUS_SIZE), IERROR
360 gezelter 2204 EXTERNAL MPI_RECV
361     CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
362 gezelter 1612 IERROR)
363     end subroutine mpi_recv_T
364    
365     subroutine mpi_recv_char(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
366 gezelter 2204 STATUS, IERROR)
367     character(len=*) :: BUF
368     INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, &
369 gezelter 1612 STATUS(MPI_STATUS_SIZE), IERROR
370 gezelter 2204 EXTERNAL MPI_RECV
371     CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
372 gezelter 1612 IERROR)
373     end subroutine mpi_recv_char
374    
375     subroutine mpi_recv_int(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
376 gezelter 2204 STATUS, IERROR)
377     INTEGER :: BUF
378     INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, &
379 gezelter 1612 STATUS(MPI_STATUS_SIZE), IERROR
380 gezelter 2204 EXTERNAL MPI_RECV
381     CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
382 gezelter 1612 IERROR)
383     end subroutine mpi_recv_int
384    
385     subroutine mpi_recv_int_1d(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, &
386 gezelter 2204 STATUS, IERROR)
387     INTEGER, dimension(:) :: BUF
388     INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, &
389 gezelter 1612 STATUS(MPI_STATUS_SIZE), IERROR
390 gezelter 2204 EXTERNAL MPI_RECV
391     CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
392 gezelter 1612 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 gezelter 2204 STATUS(MPI_STATUS_SIZE), IERROR
399 gezelter 1612 EXTERNAL MPI_RECV
400     CALL MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, &
401 gezelter 2204 IERROR)
402 gezelter 1612 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 gezelter 2204 !-------------------------END MPIRECV------------------------------
454 gezelter 1612
455 gezelter 2204 !-------------------------MPI_ALLREDUCE----------------------------
456 gezelter 1612
457     SUBROUTINE MPI_ALLREDUCE_int(SENDBUF, RECVBUF, COUNT, DATATYPE, &
458 gezelter 2204 OP, COMM, IERROR)
459 gezelter 1612 INTEGER :: SENDBUF, RECVBUF
460     INTEGER COUNT, DATATYPE, OP, COMM, IERROR
461     EXTERNAL MPI_ALLREDUCE
462     CALL MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, &
463 gezelter 2204 COMM, IERROR)
464 gezelter 1612 END SUBROUTINE MPI_ALLREDUCE_INT
465    
466     SUBROUTINE MPI_ALLREDUCE_INT_1d(SENDBUF, RECVBUF, COUNT, DATATYPE, &
467 gezelter 2204 OP, COMM, IERROR)
468 gezelter 1612 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 gezelter 2204 COMM, IERROR)
473 gezelter 1612 END SUBROUTINE MPI_ALLREDUCE_INT_1D
474    
475     SUBROUTINE MPI_ALLREDUCE_INT_2D(SENDBUF, RECVBUF, COUNT, DATATYPE, &
476 gezelter 2204 OP, COMM, IERROR)
477 gezelter 1612 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 gezelter 2204 COMM, IERROR)
482 gezelter 1612 END SUBROUTINE MPI_ALLREDUCE_INT_2D
483    
484     SUBROUTINE MPI_ALLREDUCE_DP(SENDBUF, RECVBUF, COUNT, DATATYPE, &
485 gezelter 2204 OP, COMM, IERROR)
486 gezelter 1612 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 gezelter 2204 COMM, IERROR)
491 gezelter 1612 END SUBROUTINE MPI_ALLREDUCE_DP
492    
493     SUBROUTINE MPI_ALLREDUCE_DP_1d(SENDBUF, RECVBUF, COUNT, DATATYPE, &
494 gezelter 2204 OP, COMM, IERROR)
495 gezelter 1612 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 gezelter 2204 COMM, IERROR)
500 gezelter 1612 END SUBROUTINE MPI_ALLREDUCE_DP_1D
501    
502     SUBROUTINE MPI_ALLREDUCE_DP_2D(SENDBUF, RECVBUF, COUNT, DATATYPE, &
503 gezelter 2204 OP, COMM, IERROR)
504 gezelter 1612 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 gezelter 2204 COMM, IERROR)
509 gezelter 1612 END SUBROUTINE MPI_ALLREDUCE_DP_2D
510 gezelter 2204 !-----------------END MPI_ALLREDUCE-------------------------->
511 gezelter 1612
512 gezelter 2204 !----------------BEGIN MPI_REDUCE_SCATTER
513 gezelter 1612 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 gezelter 2204 !end ---------------------MPI_REDUCE_SCATTER----------------->
568 gezelter 1612
569 gezelter 2204 !BEGIN------------------- MPI_ALLGATHERV--------------------->
570 gezelter 1612 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 gezelter 2204 SUBROUTINE MPI_ALLGATHERV_DP(SENDBUF, SENDCOUNT, SENDTYPE, &
602 gezelter 1612 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 gezelter 2204 !--------------------------end MPI_ALLGATHERV----------------------->
632 gezelter 1612
633     SUBROUTINE MPI_ALLGATHER_DP(SENDBUF, SENDCOUNT, SENDTYPE, &
634 gezelter 2204 RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
635 gezelter 1612 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 gezelter 2204 RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
645 gezelter 1612 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 gezelter 2204 RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
654 gezelter 1612 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 gezelter 2204 RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
663 gezelter 1612 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 gezelter 2204 RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
673 gezelter 1612 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 gezelter 2204 RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
682 gezelter 1612 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 gezelter 2204 !-----------------------END MPI_ALLGATHER---------------------------
689 gezelter 1612
690     #endif
691     end module oopseMPI