blob: 2550aa3452809f2a5b9033ce09bec883e466e3c6 [file] [log] [blame]
subroutine mpi_isend(buf,count,datatype,source,
& tag,comm,request,ierror)
integer buf(*), count,datatype,source,tag,comm,
& request,ierror
call mpi_error()
return
end
subroutine mpi_irecv(buf,count,datatype,source,
& tag,comm,request,ierror)
integer buf(*), count,datatype,source,tag,comm,
& request,ierror
call mpi_error()
return
end
subroutine mpi_send(buf,count,datatype,dest,tag,comm,ierror)
integer buf(*), count,datatype,dest,tag,comm,ierror
call mpi_error()
return
end
subroutine mpi_recv(buf,count,datatype,source,
& tag,comm,status,ierror)
integer buf(*), count,datatype,source,tag,comm,
& status(*),ierror
call mpi_error()
return
end
subroutine mpi_comm_split(comm,color,key,newcomm,ierror)
integer comm,color,key,newcomm,ierror
return
end
subroutine mpi_comm_rank(comm, rank,ierr)
implicit none
integer comm, rank,ierr
rank = 0
return
end
subroutine mpi_comm_size(comm, size, ierr)
implicit none
integer comm, size, ierr
size = 1
return
end
double precision function mpi_wtime()
implicit none
double precision t
c This function must measure wall clock time, not CPU time.
c Since there is no portable timer in Fortran (77)
c we call a routine compiled in C (though the C source may have
c to be tweaked).
call wtime(t)
c The following is not ok for "official" results because it reports
c CPU time not wall clock time. It may be useful for developing/testing
c on timeshared Crays, though.
c call second(t)
mpi_wtime = t
return
end
c may be valid to call this in single processor case
subroutine mpi_barrier(comm,ierror)
return
end
c may be valid to call this in single processor case
subroutine mpi_bcast(buf, nitems, type, root, comm, ierr)
implicit none
integer buf(*), nitems, type, root, comm, ierr
return
end
subroutine mpi_comm_dup(oldcomm, newcomm,ierror)
integer oldcomm, newcomm,ierror
newcomm= oldcomm
return
end
subroutine mpi_error()
print *, 'mpi_error called'
stop
end
subroutine mpi_abort(comm, errcode, ierr)
implicit none
integer comm, errcode, ierr
print *, 'mpi_abort called'
stop
end
subroutine mpi_finalize(ierr)
return
end
subroutine mpi_init(ierr)
return
end
c assume double precision, which is all SP uses
subroutine mpi_reduce(inbuf, outbuf, nitems,
$ type, op, root, comm, ierr)
implicit none
include 'mpif.h'
integer nitems, type, op, root, comm, ierr
double precision inbuf(*), outbuf(*)
if (type .eq. mpi_double_precision) then
call mpi_reduce_dp(inbuf, outbuf, nitems,
$ type, op, root, comm, ierr)
else if (type .eq. mpi_double_complex) then
call mpi_reduce_dc(inbuf, outbuf, nitems,
$ type, op, root, comm, ierr)
else if (type .eq. mpi_complex) then
call mpi_reduce_complex(inbuf, outbuf, nitems,
$ type, op, root, comm, ierr)
else if (type .eq. mpi_real) then
call mpi_reduce_real(inbuf, outbuf, nitems,
$ type, op, root, comm, ierr)
else if (type .eq. mpi_integer) then
call mpi_reduce_int(inbuf, outbuf, nitems,
$ type, op, root, comm, ierr)
else
print *, 'mpi_reduce: unknown type ', type
end if
return
end
subroutine mpi_reduce_real(inbuf, outbuf, nitems,
$ type, op, root, comm, ierr)
implicit none
integer nitems, type, op, root, comm, ierr, i
real inbuf(*), outbuf(*)
do i = 1, nitems
outbuf(i) = inbuf(i)
end do
return
end
subroutine mpi_reduce_dp(inbuf, outbuf, nitems,
$ type, op, root, comm, ierr)
implicit none
integer nitems, type, op, root, comm, ierr, i
double precision inbuf(*), outbuf(*)
do i = 1, nitems
outbuf(i) = inbuf(i)
end do
return
end
subroutine mpi_reduce_dc(inbuf, outbuf, nitems,
$ type, op, root, comm, ierr)
implicit none
integer nitems, type, op, root, comm, ierr, i
double complex inbuf(*), outbuf(*)
do i = 1, nitems
outbuf(i) = inbuf(i)
end do
return
end
subroutine mpi_reduce_complex(inbuf, outbuf, nitems,
$ type, op, root, comm, ierr)
implicit none
integer nitems, type, op, root, comm, ierr, i
complex inbuf(*), outbuf(*)
do i = 1, nitems
outbuf(i) = inbuf(i)
end do
return
end
subroutine mpi_reduce_int(inbuf, outbuf, nitems,
$ type, op, root, comm, ierr)
implicit none
integer nitems, type, op, root, comm, ierr, i
integer inbuf(*), outbuf(*)
do i = 1, nitems
outbuf(i) = inbuf(i)
end do
return
end
subroutine mpi_allreduce(inbuf, outbuf, nitems,
$ type, op, comm, ierr)
implicit none
integer nitems, type, op, comm, ierr
double precision inbuf(*), outbuf(*)
call mpi_reduce(inbuf, outbuf, nitems,
$ type, op, 0, comm, ierr)
return
end
subroutine mpi_alltoall(inbuf, nitems, type, outbuf, nitems_dum,
$ type_dum, comm, ierr)
implicit none
include 'mpif.h'
integer nitems, type, comm, ierr, nitems_dum, type_dum
double precision inbuf(*), outbuf(*)
if (type .eq. mpi_double_precision) then
call mpi_alltoall_dp(inbuf, outbuf, nitems,
$ type, comm, ierr)
else if (type .eq. mpi_double_complex) then
call mpi_alltoall_dc(inbuf, outbuf, nitems,
$ type, comm, ierr)
else if (type .eq. mpi_complex) then
call mpi_alltoall_complex(inbuf, outbuf, nitems,
$ type, comm, ierr)
else if (type .eq. mpi_real) then
call mpi_alltoall_real(inbuf, outbuf, nitems,
$ type, comm, ierr)
else if (type .eq. mpi_integer) then
call mpi_alltoall_int(inbuf, outbuf, nitems,
$ type, comm, ierr)
else
print *, 'mpi_alltoall: unknown type ', type
end if
return
end
subroutine mpi_alltoall_dc(inbuf, outbuf, nitems,
$ type, comm, ierr)
implicit none
integer nitems, type, comm, ierr, i
double complex inbuf(*), outbuf(*)
do i = 1, nitems
outbuf(i) = inbuf(i)
end do
return
end
subroutine mpi_alltoall_complex(inbuf, outbuf, nitems,
$ type, comm, ierr)
implicit none
integer nitems, type, comm, ierr, i
double complex inbuf(*), outbuf(*)
do i = 1, nitems
outbuf(i) = inbuf(i)
end do
return
end
subroutine mpi_alltoall_dp(inbuf, outbuf, nitems,
$ type, comm, ierr)
implicit none
integer nitems, type, comm, ierr, i
double precision inbuf(*), outbuf(*)
do i = 1, nitems
outbuf(i) = inbuf(i)
end do
return
end
subroutine mpi_alltoall_real(inbuf, outbuf, nitems,
$ type, comm, ierr)
implicit none
integer nitems, type, comm, ierr, i
real inbuf(*), outbuf(*)
do i = 1, nitems
outbuf(i) = inbuf(i)
end do
return
end
subroutine mpi_alltoall_int(inbuf, outbuf, nitems,
$ type, comm, ierr)
implicit none
integer nitems, type, comm, ierr, i
integer inbuf(*), outbuf(*)
do i = 1, nitems
outbuf(i) = inbuf(i)
end do
return
end
subroutine mpi_wait(request,status,ierror)
integer request,status,ierror
call mpi_error()
return
end
subroutine mpi_waitall(count,requests,status,ierror)
integer count,requests(*),status(*),ierror
call mpi_error()
return
end