SUBROUTINE MPI_Abort (comm, errorcode, ierror)
INTEGER, INTENT(IN) :: comm, errorcode
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Accumulate (origin_addr, origin_count,    &
    origin_datatype, target_rank, target_disp, target_count,    &
    target_datatype, op, win, ierror)
<type>, INTENT(IN) :: origin_addr(*)
INTEGER(KIND=MPI_Address_kind), INTENT(IN) :: target_disp
INTEGER, INTENT(IN) :: origin_count, origin_datatype,target_rank,    &
    target_count, target_datatype, op, win
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Allgather (sendbuf, sendcount, sendtype, recvbuf,    &
     recvcount, recvtype, comm, ierror)
<type>, INTENT(IN) :: sendbuf(*)
<type>, INTENT(OUT) :: recvbuf(*)
INTEGER, INTENT(IN) :: sendcount, sendtype, recvcount, recvtype, comm
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Allgatherv (sendbuf, sendcount, sendtype, recvbuf,    &
     recvcounts, displs, recvtype, comm, ierror)
<type>, INTENT(IN) :: sendbuf(*)
<type>, INTENT(OUT) :: recvbuf(*)
INTEGER, INTENT(IN) :: sendcount, sendtype, recvcounts(*),    &
     displs(*), recvtype, comm
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Allreduce (sendbuf, recvbuf, count, datatype,    &
     op, comm, ierror)
<type>, INTENT(IN) :: sendbuf(*)
<type>, INTENT(OUT) :: recvbuf(*)
INTEGER, INTENT(IN) :: count, datatype, op, comm
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Alltoall (sendbuf, sendcount, sendtype, recvbuf,    &
     recvcount, recvtype, comm, ierror)
<type>, INTENT(IN) :: sendbuf(*)
<type>, INTENT(OUT) :: recvbuf(*)
INTEGER, INTENT(IN) :: sendcount, sendtype, recvcount, recvtype, comm
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Alltoallv (sendbuf, sendcounts, sdispls, sendtype,    &
     recvbuf, recvcounts, rdispls, recvtype, comm, ierror)
<type>, INTENT(IN) :: sendbuf(*)
<type>, INTENT(OUT) :: recvbuf(*)
INTEGER, INTENT(IN) :: sendcounts(*), sdispls(*), sendtype,    &
     recvcounts(*), rdispls(*), recvtype, comm
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Barrier (comm, ierror)
INTEGER, INTENT(IN) :: comm
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Bcast (buffer, count, datatype, root, comm, ierror)
<type>, INTENT(INOUT) :: buffer(*)
INTEGER, INTENT(IN) :: count, datatype, root, comm
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Bsend (buf, count, datatype, dest, tag, comm, ierror)
<type>, INTENT(IN) :: buf(*)
INTEGER, INTENT(IN) :: count, datatype, dest, tag, comm
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Buffer_attach ( buffer, size, ierror)
<type>, INTENT(INOUT) :: buffer(*)
INTEGER, INTENT(IN) :: size
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Buffer_detach ( buffer, size, ierror)
<type>, INTENT(INOUT) :: buffer(*)
INTEGER, INTENT(OUT) :: size
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Comm_free (comm, ierror)
INTEGER, INTENT(INOUT) :: comm
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Comm_get_attr (comm, keyval, attribute_val, flag, ierror)
INTEGER(KIND=MPI_ADDRESS_KIND), INTENT(OUT) :: attribute_val
LOGICAL, INTENT(OUT) :: flag
INTEGER, INTENT(IN) :: comm, keyval
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Comm_rank (comm, rank, ierror)
INTEGER, INTENT(IN) :: comm
INTEGER, INTENT(OUT) :: rank, ierror

SUBROUTINE MPI_Comm_set_errhandler (comm, errhandler, ierror)
INTEGER, INTENT(IN) :: comm, errhandler
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Comm_size (comm, size, ierror)
INTEGER, INTENT(IN) :: comm
INTEGER, INTENT(OUT) :: size, ierror

SUBROUTINE MPI_Comm_split (comm, color, key, newcomm, ierror)
INTEGER, INTENT(IN) :: comm, color, key
INTEGER, INTENT(OUT) :: newcomm, ierror

SUBROUTINE MPI_Error_string (errorcode, string, resultlen, ierror)
INTEGER, INTENT(IN) :: errorcode
CHARACTER*(*), INTENT(OUT) :: string
INTEGER, INTENT(OUT) :: resultlen, ierror

SUBROUTINE MPI_Finalize (ierror)
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Finalized (flag, ierror)
LOGICAL, INTENT(OUT) :: flag
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Gather (sendbuf, sendcount, sendtype, recvbuf,    &
     recvcount, recvtype, root, comm, ierror)
<type>, INTENT(IN) :: sendbuf(*)
<type>, INTENT(OUT) :: recvbuf(*)
INTEGER, INTENT(IN) :: sendcount, sendtype, recvcount,    &
     recvtype, root, comm
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Gatherv (sendbuf, sendcount, sendtype, recvbuf,    &
     recvcounts, displs, recvtype, root, comm, ierror)
<type>, INTENT(IN) :: sendbuf(*)
<type>, INTENT(OUT) :: recvbuf(*)
INTEGER, INTENT(IN) :: sendcount, sendtype, recvcounts(*),    &
     displs(*), recvtype, root, comm
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Get (origin_addr, origin_count, origin_datatype,    &
     target_rank, target_disp, target_count, target_datatype,    &
     win, ierror)
<type>, INTENT(IN) :: origin_addr(*)
INTEGER(KIND=MPI_Address_kind), INTENT(IN) :: target_disp
INTEGER, INTENT(IN) :: origin_count, origin_datatype,    &
     target_rank, target_count, target_datatype, win
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Get_count (status, datatype, count, ierror)
INTEGER, INTENT(IN) :: status(MPI_STATUS_SIZE), datatype
INTEGER, INTENT(OUT) :: count, ierror

SUBROUTINE MPI_Get_processor_name (name, resultlen, ierror)
CHARACTER*(*), INTENT(OUT) :: name
INTEGER, INTENT(OUT) :: resultlen, ierror

SUBROUTINE MPI_Get_version (version, subversion, ierror)
INTEGER, INTENT(OUT) :: version, subversion, ierror 

SUBROUTINE MPI_Init (ierror)
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Initialized (flag, ierror)
LOGICAL, INTENT(OUT) :: flag
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Iprobe (source, tag, comm, flag, status, ierror)
INTEGER, INTENT(IN) :: source, tag, comm
LOGICAL, INTENT(OUT) :: flag
INTEGER, INTENT(OUT) :: status(MPI_STATUS_SIZE), ierror

SUBROUTINE MPI_Info_create (info, ierror)
INTEGER, INTENT(OUT) :: info, ierror

SUBROUTINE MPI_Info_free (info, ierror)
INTEGER, INTENT(INOUT) :: info
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Info_set (info, key, value, ierror)
INTEGER, INTENT(IN) :: info
CHARACTER*(*) :: key, value
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Irecv (buf, count, datatype, source, tag, comm,    &
     request, ierror)
<type>, INTENT(OUT) :: buf(*)
INTEGER, INTENT(IN) :: count, datatype, source, tag, comm
INTEGER, INTENT(OUT) ::  request, ierror

SUBROUTINE MPI_Isend (buf, count, datatype, dest, tag, comm,    &
    request, ierror)
<type>, INTENT(IN) :: buf(*)
INTEGER, INTENT(IN) :: count, datatype, dest, tag, comm
INTEGER, INTENT(OUT) :: request, ierror

SUBROUTINE MPI_Probe (source, tag, comm, status, ierror)
INTEGER, INTENT(IN) :: source, tag, comm
INTEGER, INTENT(OUT) ::  status(MPI_STATUS_SIZE), ierror

SUBROUTINE MPI_Put (origin_addr, origin_count, origin_datatype,    &
     target_rank, target_disp, target_count, target_datatype,    &
     win, ierror)
<type>, INTENT(IN) :: origin_addr(*)
INTEGER(KIND=MPI_Address_kind), INTENT(IN) :: target_disp
INTEGER, INTENT(IN) :: origin_count, origin_datatype,    &
     target_rank, target_count, target_datatype, win
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Recv (buf, count, datatype, source, tag, comm,    &
     status, ierror)
<type>, INTENT(OUT) :: buf(*)
INTEGER, INTENT(IN) :: count, datatype, source, tag, comm
INTEGER, INTENT(OUT) :: status(MPI_STATUS_SIZE), ierror

SUBROUTINE MPI_Reduce (sendbuf, recvbuf, count, datatype, op,    &
     root,  comm, ierror)
<type>, INTENT(IN) :: sendbuf(*)
<type>, INTENT(OUT) :: recvbuf(*)
INTEGER, INTENT(IN) :: count, datatype, op, root, comm
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Scatter (sendbuf, sendcount, sendtype, recvbuf,    &
     recvcount, recvtype, root, comm, ierror)
<type>, INTENT(IN) :: sendbuf(*)
<type>, INTENT(OUT) :: recvbuf(*)
INTEGER, INTENT(IN) :: sendcount, sendtype, recvcount, recvtype,    &
     root, comm
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Scatterv (sendbuf, sendcounts, displs, sendtype,    &
     recvbuf, recvcount, recvtype, root, comm, ierror)
<type>, INTENT(IN) :: sendbuf(*)
<type>, INTENT(OUT) :: recvbuf(*)
INTEGER, INTENT(IN) :: sendcounts(*), displs(*), sendtype,    &
     recvcount, recvtype, root, comm
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Send (buf, count, datatype, dest, tag, comm, ierror)
<type>, INTENT(IN) buf(*)
INTEGER, INTENT(IN) :: count, datatype, dest, tag, comm
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Sendrecv (sendbuf, sendcount, sendtype, dest,   &
     sendtag,  recvbuf, recvcount, recvtype, source, recvtag,    &
     comm, status, ierror)
<type>, INTENT(IN) :: sendbuf(*)
<type>, INTENT(OUT) :: recvbuf(*)
INTEGER, INTENT(IN) :: sendcount, sendtype, dest, sendtag,   &
     recvcount, recvtype, source, recvtag, comm
INTEGER, INTENT(OUT) :: status(MPI_STATUS_SIZE), ierror

SUBROUTINE MPI_Sendrecv_replace (buf, count, datatype, dest,    &
     sendtag, source, recvtag, comm, status, ierror)
<type>, INTENT(INOUT) :: buf(*)
INTEGER, INTENT(IN) :: count, datatype, dest, sendtag, source,    &
     recvtag, comm
INTEGER, INTENT(OUT) :: status(MPI_STATUS_SIZE), ierror

SUBROUTINE MPI_Sizeof (x, size, error)
<type>, INTENT(IN) :: x
INTEGER, INTENT(OUT) :: size, error

SUBROUTINE MPI_Ssend (buf, count, datatype, dest, tag, comm, ierror)
<type>, INTENT(IN) buf(*)
INTEGER, INTENT(IN) :: count, datatype, dest, tag, comm
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Test (request, flag, status, ierror)
LOGICAL, INTENT(OUT) :: flag
INTEGER, INTENT(INOUT) :: request
INTEGER, INTENT(OUT) :: status(MPI_STATUS_SIZE), ierror

SUBROUTINE MPI_Testall (count, array_of_requests, flag,    &
     array_of_statuses, ierror)
LOGICAL, INTENT(OUT) :: flag
INTEGER, INTENT(IN) :: count
INTEGER, INTENT(INOUT) ::array_of_requests(*),    &
     array_of_statuses(MPI_STATUS_SIZE,*)
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Testany (count, array_of_requests, index,    &
     flag, status, ierror)
LOGICAL, INTENT(OUT) :: flag
INTEGER, INTENT(IN) :: count
INTEGER, INTENT(INOUT) :: array_of_requests(*)
INTEGER, INTENT(OUT) :: index, status(MPI_STATUS_SIZE), ierror

SUBROUTINE MPI_Type_commit (datatype, ierror)
INTEGER, INTENT(IN) :: datatype
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Type_create_f90_complex (p, r, newtype, ierror)
INTEGER, INTENT(IN) :: p, r
INTEGER, INTENT(OUT) :: newtype, ierror

SUBROUTINE MPI_Type_create_f90_integer (r, newtype, ierror)
INTEGER, INTENT(IN) :: r
INTEGER, INTENT(OUT) :: newtype, ierror

SUBROUTINE MPI_Type_create_f90_real (p, r, newtype, ierror)
INTEGER, INTENT(IN) :: p, r
INTEGER, INTENT(OUT) :: newtype, ierror

SUBROUTINE MPI_Type_free (datatype, ierror)
INTEGER, INTENT(INOUT) :: datatype
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Wait (request, status, ierror)
INTEGER, INTENT(INOUT) :: request
INTEGER, INTENT(OUT) :: status(MPI_STATUS_SIZE), ierror

SUBROUTINE MPI_Waitall (count, array_of_requests,    &
     array_of_statuses, ierror)
INTEGER, INTENT(IN) :: count
INTEGER, INTENT(INOUT) :: array_of_requests(*),    &
     array_of_statuses(MPI_STATUS_SIZE,*)
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Waitany (count, array_of_requests, index,    &
     status, ierror)
INTEGER, INTENT(IN) :: count
INTEGER, INTENT(INOUT) :: array_of_requests(*)
INTEGER, INTENT(OUT) :: status(MPI_STATUS_SIZE), ierror

SUBROUTINE MPI_Win_create (base, size, disp_unit, info, comm,    &
     win, ierror)
<type>, INTENT(IN) :: base(*)
INTEGER(KIND=MPI_Address_kind), INTENT(IN) :: size
INTEGER, INTENT(IN) :: disp_unit, info, comm
INTEGER, INTENT(OUT) :: win, ierror

SUBROUTINE MPI_Win_fence (assert, win, ierror)
INTEGER, INTENT(IN) :: assert, win
INTEGER, INTENT(OUT) :: ierror

SUBROUTINE MPI_Win_free(win, ierror)
INTEGER, INTENT(INOUT) :: win
INTEGER, INTENT(OUT) :: ierror

FUNCTION MPI_Wtick ()
DOUBLE precision :: MPI_Wtick

FUNCTION MPI_Wtime ()
DOUBLE precision :: MPI_Wtime
