ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-2.0/src/utils/oopseMPI.F90
Revision: 2262
Committed: Sun Jul 3 20:53:43 2005 UTC (19 years ago) by chuckv
File size: 27547 byte(s)
Log Message:
Added subroutine to set cuttoff for Interaction map and function in simulation.F90 to determine if a particular atype is present in a simulation.

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