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