1 subroutine mpi_isend(buf,count,datatype,source,
2 & tag,comm,request,ierror)
3 integer buf(*), count,datatype,source,tag,comm,
9 subroutine mpi_irecv(buf,count,datatype,source,
10 & tag,comm,request,ierror)
11 integer buf(*), count,datatype,source,tag,comm,
17 subroutine mpi_send(buf,count,datatype,dest,tag,comm,ierror)
18 integer buf(*), count,datatype,dest,tag,comm,ierror
23 subroutine mpi_recv(buf,count,datatype,source,
24 & tag,comm,status,ierror)
25 integer buf(*), count,datatype,source,tag,comm,
31 subroutine mpi_comm_split(comm,color,key,newcomm,ierror)
32 integer comm,color,key,newcomm,ierror
36 subroutine mpi_comm_rank(comm, rank,ierr)
38 integer comm, rank,ierr
43 subroutine mpi_comm_size(comm, size, ierr)
45 integer comm, size, ierr
50 double precision function mpi_wtime()
53 c This function must measure wall clock time, not CPU time.
54 c Since there is no portable timer in Fortran (77)
55 c we call a routine compiled in C (though the C source may have
58 c The following is not ok for "official" results because it reports
59 c CPU time not wall clock time. It may be useful for developing/testing
60 c on timeshared Crays, though.
69 c may be valid to call this in single processor case
70 subroutine mpi_barrier(comm,ierror)
74 c may be valid to call this in single processor case
75 subroutine mpi_bcast(buf, nitems, type, root, comm, ierr)
77 integer buf(*), nitems, type, root, comm, ierr
81 subroutine mpi_comm_dup(oldcomm, newcomm,ierror)
82 integer oldcomm, newcomm,ierror
87 subroutine mpi_error()
88 print *, 'mpi_error called'
92 subroutine mpi_abort(comm, errcode, ierr)
94 integer comm, errcode, ierr
95 print *, 'mpi_abort called'
99 subroutine mpi_finalize(ierr)
103 subroutine mpi_init(ierr)
108 c assume double precision, which is all SP uses
109 subroutine mpi_reduce(inbuf, outbuf, nitems,
110 $ type, op, root, comm, ierr)
113 integer nitems, type, op, root, comm, ierr
114 double precision inbuf(*), outbuf(*)
116 if (type .eq. mpi_double_precision) then
117 call mpi_reduce_dp(inbuf, outbuf, nitems,
118 $ type, op, root, comm, ierr)
119 else if (type .eq. mpi_double_complex) then
120 call mpi_reduce_dc(inbuf, outbuf, nitems,
121 $ type, op, root, comm, ierr)
122 else if (type .eq. mpi_complex) then
123 call mpi_reduce_complex(inbuf, outbuf, nitems,
124 $ type, op, root, comm, ierr)
125 else if (type .eq. mpi_real) then
126 call mpi_reduce_real(inbuf, outbuf, nitems,
127 $ type, op, root, comm, ierr)
128 else if (type .eq. mpi_integer) then
129 call mpi_reduce_int(inbuf, outbuf, nitems,
130 $ type, op, root, comm, ierr)
132 print *, 'mpi_reduce: unknown type ', type
138 subroutine mpi_reduce_real(inbuf, outbuf, nitems,
139 $ type, op, root, comm, ierr)
141 integer nitems, type, op, root, comm, ierr, i
142 real inbuf(*), outbuf(*)
150 subroutine mpi_reduce_dp(inbuf, outbuf, nitems,
151 $ type, op, root, comm, ierr)
153 integer nitems, type, op, root, comm, ierr, i
154 double precision inbuf(*), outbuf(*)
162 subroutine mpi_reduce_dc(inbuf, outbuf, nitems,
163 $ type, op, root, comm, ierr)
165 integer nitems, type, op, root, comm, ierr, i
166 double complex inbuf(*), outbuf(*)
175 subroutine mpi_reduce_complex(inbuf, outbuf, nitems,
176 $ type, op, root, comm, ierr)
178 integer nitems, type, op, root, comm, ierr, i
179 complex inbuf(*), outbuf(*)
187 subroutine mpi_reduce_int(inbuf, outbuf, nitems,
188 $ type, op, root, comm, ierr)
190 integer nitems, type, op, root, comm, ierr, i
191 integer inbuf(*), outbuf(*)
199 subroutine mpi_allreduce(inbuf, outbuf, nitems,
200 $ type, op, comm, ierr)
202 integer nitems, type, op, comm, ierr
203 double precision inbuf(*), outbuf(*)
205 call mpi_reduce(inbuf, outbuf, nitems,
206 $ type, op, 0, comm, ierr)
210 subroutine mpi_alltoall(inbuf, nitems, type, outbuf, nitems_dum,
211 $ type_dum, comm, ierr)
214 integer nitems, type, comm, ierr, nitems_dum, type_dum
215 double precision inbuf(*), outbuf(*)
216 if (type .eq. mpi_double_precision) then
217 call mpi_alltoall_dp(inbuf, outbuf, nitems,
219 else if (type .eq. mpi_double_complex) then
220 call mpi_alltoall_dc(inbuf, outbuf, nitems,
222 else if (type .eq. mpi_complex) then
223 call mpi_alltoall_complex(inbuf, outbuf, nitems,
225 else if (type .eq. mpi_real) then
226 call mpi_alltoall_real(inbuf, outbuf, nitems,
228 else if (type .eq. mpi_integer) then
229 call mpi_alltoall_int(inbuf, outbuf, nitems,
232 print *, 'mpi_alltoall: unknown type ', type
237 subroutine mpi_alltoall_dc(inbuf, outbuf, nitems,
240 integer nitems, type, comm, ierr, i
241 double complex inbuf(*), outbuf(*)
250 subroutine mpi_alltoall_complex(inbuf, outbuf, nitems,
253 integer nitems, type, comm, ierr, i
254 double complex inbuf(*), outbuf(*)
262 subroutine mpi_alltoall_dp(inbuf, outbuf, nitems,
265 integer nitems, type, comm, ierr, i
266 double precision inbuf(*), outbuf(*)
274 subroutine mpi_alltoall_real(inbuf, outbuf, nitems,
277 integer nitems, type, comm, ierr, i
278 real inbuf(*), outbuf(*)
286 subroutine mpi_alltoall_int(inbuf, outbuf, nitems,
289 integer nitems, type, comm, ierr, i
290 integer inbuf(*), outbuf(*)
298 subroutine mpi_wait(request,status,ierror)
299 integer request,status,ierror
304 subroutine mpi_waitall(count,requests,status,ierror)
305 integer count,requests(*),status(*),ierror