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. Redistributions of source code must retain the above copyright |
10 |
!! notice, this list of conditions and the following disclaimer. |
11 |
!! |
12 |
!! 2. Redistributions in binary form must reproduce the above copyright |
13 |
!! notice, this list of conditions and the following disclaimer in the |
14 |
!! documentation and/or other materials provided with the |
15 |
!! distribution. |
16 |
!! |
17 |
!! This software is provided "AS IS," without a warranty of any |
18 |
!! kind. All express or implied conditions, representations and |
19 |
!! warranties, including any implied warranty of merchantability, |
20 |
!! fitness for a particular purpose or non-infringement, are hereby |
21 |
!! excluded. The University of Notre Dame and its licensors shall not |
22 |
!! be liable for any damages suffered by licensee as a result of |
23 |
!! using, modifying or distributing the software or its |
24 |
!! derivatives. In no event will the University of Notre Dame or its |
25 |
!! licensors be liable for any lost revenue, profit or data, or for |
26 |
!! direct, indirect, special, consequential, incidental or punitive |
27 |
!! damages, however caused and regardless of the theory of liability, |
28 |
!! arising out of the use of or inability to use software, even if the |
29 |
!! University of Notre Dame has been advised of the possibility of |
30 |
!! such damages. |
31 |
!! |
32 |
!! SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your |
33 |
!! research, please cite the appropriate papers when you publish your |
34 |
!! work. Good starting points are: |
35 |
!! |
36 |
!! [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005). |
37 |
!! [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006). |
38 |
!! [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008). |
39 |
!! [4] Vardeman & Gezelter, in progress (2009). |
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 OpenMDMPI |
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 OpenMDMPI |