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

# Content
1 !!
2 !! Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3 !!
4 !! The University of Notre Dame grants you ("Licensee") a
5 !! non-exclusive, royalty free, license to use, modify and
6 !! redistribute this software in source and binary code form, provided
7 !! that the following conditions are met:
8 !!
9 !! 1. Acknowledgement of the program authors must be made in any
10 !! publication of scientific results based in part on use of the
11 !! program. An acceptable form of acknowledgement is citation of
12 !! the article in which the program was described (Matthew
13 !! A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher
14 !! J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented
15 !! Parallel Simulation Engine for Molecular Dynamics,"
16 !! J. Comput. Chem. 26, pp. 252-271 (2005))
17 !!
18 !! 2. Redistributions of source code must retain the above copyright
19 !! notice, this list of conditions and the following disclaimer.
20 !!
21 !! 3. Redistributions in binary form must reproduce the above copyright
22 !! notice, this list of conditions and the following disclaimer in the
23 !! documentation and/or other materials provided with the
24 !! distribution.
25 !!
26 !! This software is provided "AS IS," without a warranty of any
27 !! kind. All express or implied conditions, representations and
28 !! warranties, including any implied warranty of merchantability,
29 !! fitness for a particular purpose or non-infringement, are hereby
30 !! excluded. The University of Notre Dame and its licensors shall not
31 !! be liable for any damages suffered by licensee as a result of
32 !! using, modifying or distributing the software or its
33 !! derivatives. In no event will the University of Notre Dame or its
34 !! licensors be liable for any lost revenue, profit or data, or for
35 !! direct, indirect, special, consequential, incidental or punitive
36 !! damages, however caused and regardless of the theory of liability,
37 !! arising out of the use of or inability to use software, even if the
38 !! University of Notre Dame has been advised of the possibility of
39 !! such damages.
40 !!
41
42 !! Wrapper interfaces for mpi.
43 !! This wrapper should work independently of mpi implimentation.
44 !! We only provide an explicit interface for routines we use.
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