1
1
openmpi/ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr-interfaces.h.in

3969 строки
98 KiB
C
Исходник Обычный вид История

== Highlights == 1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler 1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release 1. The mpi module has been re-implemented and is significantly "mo' bettah" 1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk. == More details == Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7. Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey: * Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort) * The Fortran J3 committee * Tobias Burnus/gfortran * Tony !Goetz/Absoft * Terry !Donte/Oracle * ...and probably others whom I'm forgetting :-( There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax. Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time. As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory: {{{ ompi/mpi/fortran/ base/ - glue code mpif-h/ - what used to be ompi/mpi/f77 use-mpi-tkr/ - what used to be ompi/mpi/f90 use-mpi-ignore-tkr/ - new mpi module implementation use-mpi-f08/ - new mpi_f08 module implementation }}} There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version. Other things that were done: * ompi_info grew a few new output fields to describe what level of Fortran support is included * Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added * The old Fortran MPI libraries were renamed: * libmpi_f77 -> libmpi_mpifh * libmpi_f90 -> libmpi_usempi * The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example: {{{ shell$ ./configure CC=icc CXX=icpc FC=ifort ... }}} All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches). I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed. This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
! -*- fortran -*-
!
! Copyright (c) 2006-2012 Cisco Systems, Inc. All rights reserved.
! Copyright (c) 2007 Los Alamos National Security, LLC. All rights
! reserved.
! $COPYRIGHT$
!
! Additional copyrights may follow
!
! $HEADER$
interface MPI_Abort
subroutine MPI_Abort(comm, errorcode, ierr)
integer, intent(in) :: comm
integer, intent(in) :: errorcode
integer, intent(out) :: ierr
end subroutine MPI_Abort
end interface
interface MPI_Accumulate
subroutine MPI_Accumulate(origin_addr, origin_count, origin_datatype, target_rank, target_disp, &
target_count, target_datatype, op, win, ierr)
include 'mpif-config.h'
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ origin_addr
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: origin_addr
integer, intent(in) :: origin_count
integer, intent(in) :: origin_datatype
integer, intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer, intent(in) :: target_count
integer, intent(in) :: target_datatype
integer, intent(in) :: op
integer, intent(in) :: win
integer, intent(out) :: ierr
end subroutine MPI_Accumulate
end interface
interface MPI_Add_error_class
subroutine MPI_Add_error_class(errorclass, ierr)
integer, intent(out) :: errorclass
integer, intent(out) :: ierr
end subroutine MPI_Add_error_class
end interface
interface MPI_Add_error_code
subroutine MPI_Add_error_code(errorclass, errorcode, ierr)
integer, intent(in) :: errorclass
integer, intent(out) :: errorcode
integer, intent(out) :: ierr
end subroutine MPI_Add_error_code
end interface
interface MPI_Add_error_string
subroutine MPI_Add_error_string(errorcode, string, ierr)
integer, intent(in) :: errorcode
character(len=*), intent(in) :: string
integer, intent(out) :: ierr
end subroutine MPI_Add_error_string
end interface
interface MPI_Address
subroutine MPI_Address(location, address, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ location
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: location
integer, intent(out) :: address
integer, intent(out) :: ierr
end subroutine MPI_Address
end interface
interface MPI_Allgather
subroutine MPI_Allgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, &
recvtype, comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, intent(in) :: sendcount
integer, intent(in) :: sendtype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: recvcount
integer, intent(in) :: recvtype
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Allgather
end interface
interface MPI_Allgatherv
subroutine MPI_Allgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, &
displs, recvtype, comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, intent(in) :: sendcount
integer, intent(in) :: sendtype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, dimension(*), intent(in) :: recvcounts
integer, dimension(*), intent(in) :: displs
integer, intent(in) :: recvtype
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Allgatherv
end interface
interface MPI_Alloc_mem
subroutine MPI_Alloc_mem(size, info, baseptr, ierr)
include 'mpif-config.h'
integer(kind=MPI_ADDRESS_KIND), intent(in) :: size
integer, intent(in) :: info
integer(kind=MPI_ADDRESS_KIND), intent(out) :: baseptr
integer, intent(out) :: ierr
end subroutine MPI_Alloc_mem
end interface
interface MPI_Allreduce
subroutine MPI_Allreduce(sendbuf, recvbuf, count, datatype, op, &
comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: op
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Allreduce
end interface
interface MPI_Alltoall
subroutine MPI_Alltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount, &
recvtype, comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, intent(in) :: sendcount
integer, intent(in) :: sendtype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: recvcount
integer, intent(in) :: recvtype
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Alltoall
end interface
interface MPI_Alltoallv
subroutine MPI_Alltoallv(sendbuf, sendcounts, sdispls, sendtype, recvbuf, &
recvcounts, rdispls, recvtype, comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, dimension(*), intent(in) :: sendcounts
integer, dimension(*), intent(in) :: sdispls
integer, intent(in) :: sendtype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, dimension(*), intent(in) :: recvcounts
integer, dimension(*), intent(in) :: rdispls
integer, intent(in) :: recvtype
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Alltoallv
end interface
interface MPI_Alltoallw
subroutine MPI_Alltoallw(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, &
recvcounts, rdispls, recvtypes, comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, dimension(*), intent(in) :: sendcounts
integer, dimension(*), intent(in) :: sdispls
integer, dimension(*), intent(in) :: sendtypes
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, dimension(*), intent(in) :: recvcounts
integer, dimension(*), intent(in) :: rdispls
integer, dimension(*), intent(in) :: recvtypes
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Alltoallw
end interface
interface MPI_Attr_delete
subroutine MPI_Attr_delete(comm, keyval, ierr)
integer, intent(in) :: comm
integer, intent(in) :: keyval
integer, intent(out) :: ierr
end subroutine MPI_Attr_delete
end interface
interface MPI_Attr_get
subroutine MPI_Attr_get(comm, keyval, attribute_val, flag, ierr)
integer, intent(in) :: comm
integer, intent(in) :: keyval
integer, intent(out) :: attribute_val
logical, intent(out) :: flag
integer, intent(out) :: ierr
end subroutine MPI_Attr_get
end interface
interface MPI_Attr_put
subroutine MPI_Attr_put(comm, keyval, attribute_val, ierr)
integer, intent(in) :: comm
integer, intent(in) :: keyval
integer, intent(in) :: attribute_val
integer, intent(out) :: ierr
end subroutine MPI_Attr_put
end interface
interface MPI_Barrier
subroutine MPI_Barrier(comm, ierr)
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Barrier
end interface
interface MPI_Bcast
subroutine MPI_Bcast(buffer, count, datatype, root, comm&
, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buffer
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buffer
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: root
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Bcast
end interface
interface MPI_Bsend
subroutine MPI_Bsend(buf, count, datatype, dest, tag, &
comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: dest
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Bsend
end interface
interface MPI_Bsend_init
subroutine MPI_Bsend_init(buf, count, datatype, dest, tag, &
comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: dest
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Bsend_init
end interface
interface MPI_Buffer_attach
subroutine MPI_Buffer_attach(buffer, size, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buffer
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buffer
integer, intent(in) :: size
integer, intent(out) :: ierr
end subroutine MPI_Buffer_attach
end interface
interface MPI_Buffer_detach
subroutine MPI_Buffer_detach(buffer, size, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buffer
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buffer
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Buffer_detach
end interface
interface MPI_Cancel
subroutine MPI_Cancel(request, ierr)
integer, intent(in) :: request
integer, intent(out) :: ierr
end subroutine MPI_Cancel
end interface
interface MPI_Cart_coords
subroutine MPI_Cart_coords(comm, rank, maxdims, coords, ierr)
integer, intent(in) :: comm
integer, intent(in) :: rank
integer, intent(in) :: maxdims
integer, dimension(*), intent(out) :: coords
integer, intent(out) :: ierr
end subroutine MPI_Cart_coords
end interface
interface MPI_Cart_create
subroutine MPI_Cart_create(old_comm, ndims, dims, periods, reorder, &
comm_cart, ierr)
integer, intent(in) :: old_comm
integer, intent(in) :: ndims
integer, dimension(*), intent(in) :: dims
logical, dimension(*), intent(in) :: periods
logical, intent(in) :: reorder
integer, intent(out) :: comm_cart
integer, intent(out) :: ierr
end subroutine MPI_Cart_create
end interface
interface MPI_Cart_get
subroutine MPI_Cart_get(comm, maxdims, dims, periods, coords&
, ierr)
integer, intent(in) :: comm
integer, intent(in) :: maxdims
integer, dimension(*), intent(out) :: dims
logical, dimension(*), intent(out) :: periods
integer, dimension(*), intent(out) :: coords
integer, intent(out) :: ierr
end subroutine MPI_Cart_get
end interface
interface MPI_Cart_map
subroutine MPI_Cart_map(comm, ndims, dims, periods, newrank&
, ierr)
integer, intent(in) :: comm
integer, intent(in) :: ndims
integer, dimension(*), intent(in) :: dims
logical, dimension(*), intent(in) :: periods
integer, intent(out) :: newrank
integer, intent(out) :: ierr
end subroutine MPI_Cart_map
end interface
interface MPI_Cart_rank
subroutine MPI_Cart_rank(comm, coords, rank, ierr)
integer, intent(in) :: comm
integer, dimension(*), intent(in) :: coords
integer, intent(out) :: rank
integer, intent(out) :: ierr
end subroutine MPI_Cart_rank
end interface
interface MPI_Cart_shift
subroutine MPI_Cart_shift(comm, direction, disp, rank_source, rank_dest&
, ierr)
integer, intent(in) :: comm
integer, intent(in) :: direction
integer, intent(in) :: disp
integer, intent(out) :: rank_source
integer, intent(out) :: rank_dest
integer, intent(out) :: ierr
end subroutine MPI_Cart_shift
end interface
interface MPI_Cart_sub
subroutine MPI_Cart_sub(comm, remain_dims, new_comm, ierr)
integer, intent(in) :: comm
logical, dimension(*), intent(in) :: remain_dims
integer, intent(out) :: new_comm
integer, intent(out) :: ierr
end subroutine MPI_Cart_sub
end interface
interface MPI_Cartdim_get
subroutine MPI_Cartdim_get(comm, ndims, ierr)
integer, intent(in) :: comm
integer, intent(out) :: ndims
integer, intent(out) :: ierr
end subroutine MPI_Cartdim_get
end interface
interface MPI_Close_port
subroutine MPI_Close_port(port_name, ierr)
character(len=*), intent(in) :: port_name
integer, intent(out) :: ierr
end subroutine MPI_Close_port
end interface
interface MPI_Comm_accept
subroutine MPI_Comm_accept(port_name, info, root, comm, newcomm&
, ierr)
character(len=*), intent(in) :: port_name
integer, intent(in) :: info
integer, intent(in) :: root
integer, intent(in) :: comm
integer, intent(out) :: newcomm
integer, intent(out) :: ierr
end subroutine MPI_Comm_accept
end interface
interface MPI_Comm_call_errhandler
subroutine MPI_Comm_call_errhandler(comm, errorcode, ierr)
integer, intent(in) :: comm
integer, intent(in) :: errorcode
integer, intent(out) :: ierr
end subroutine MPI_Comm_call_errhandler
end interface
interface MPI_Comm_compare
subroutine MPI_Comm_compare(comm1, comm2, result, ierr)
integer, intent(in) :: comm1
integer, intent(in) :: comm2
integer, intent(out) :: result
integer, intent(out) :: ierr
end subroutine MPI_Comm_compare
end interface
interface MPI_Comm_connect
subroutine MPI_Comm_connect(port_name, info, root, comm, newcomm&
, ierr)
character(len=*), intent(in) :: port_name
integer, intent(in) :: info
integer, intent(in) :: root
integer, intent(in) :: comm
integer, intent(out) :: newcomm
integer, intent(out) :: ierr
end subroutine MPI_Comm_connect
end interface
interface MPI_Comm_create
subroutine MPI_Comm_create(comm, group, newcomm, ierr)
integer, intent(in) :: comm
integer, intent(in) :: group
integer, intent(out) :: newcomm
integer, intent(out) :: ierr
end subroutine MPI_Comm_create
end interface
interface MPI_Comm_create_errhandler
subroutine MPI_Comm_create_errhandler(function, errhandler, ierr)
external :: function
integer, intent(out) :: errhandler
integer, intent(out) :: ierr
end subroutine MPI_Comm_create_errhandler
end interface
interface MPI_Comm_create_keyval
subroutine MPI_Comm_create_keyval(comm_copy_attr_fn, comm_delete_attr_fn, comm_keyval, extra_state, ierr)
include 'mpif-config.h'
external :: comm_copy_attr_fn
external :: comm_delete_attr_fn
integer, intent(out) :: comm_keyval
integer(kind=MPI_ADDRESS_KIND), intent(in) :: extra_state
integer, intent(out) :: ierr
end subroutine MPI_Comm_create_keyval
end interface
interface MPI_Comm_delete_attr
subroutine MPI_Comm_delete_attr(comm, comm_keyval, ierr)
integer, intent(in) :: comm
integer, intent(in) :: comm_keyval
integer, intent(out) :: ierr
end subroutine MPI_Comm_delete_attr
end interface
interface MPI_Comm_disconnect
subroutine MPI_Comm_disconnect(comm, ierr)
integer, intent(inout) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Comm_disconnect
end interface
interface MPI_Comm_dup
subroutine MPI_Comm_dup(comm, newcomm, ierr)
integer, intent(in) :: comm
integer, intent(out) :: newcomm
integer, intent(out) :: ierr
end subroutine MPI_Comm_dup
end interface
interface MPI_Comm_free
subroutine MPI_Comm_free(comm, ierr)
integer, intent(inout) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Comm_free
end interface
interface MPI_Comm_free_keyval
subroutine MPI_Comm_free_keyval(comm_keyval, ierr)
integer, intent(inout) :: comm_keyval
integer, intent(out) :: ierr
end subroutine MPI_Comm_free_keyval
end interface
interface MPI_Comm_get_attr
subroutine MPI_Comm_get_attr(comm, comm_keyval, attribute_val, flag, ierr)
include 'mpif-config.h'
integer, intent(in) :: comm
integer, intent(in) :: comm_keyval
integer(kind=MPI_ADDRESS_KIND), intent(out) :: attribute_val
logical, intent(out) :: flag
integer, intent(out) :: ierr
end subroutine MPI_Comm_get_attr
end interface
interface MPI_Comm_get_errhandler
subroutine MPI_Comm_get_errhandler(comm, erhandler, ierr)
integer, intent(in) :: comm
integer, intent(out) :: erhandler
integer, intent(out) :: ierr
end subroutine MPI_Comm_get_errhandler
end interface
interface MPI_Comm_get_name
subroutine MPI_Comm_get_name(comm, comm_name, resultlen, ierr)
integer, intent(in) :: comm
character(len=*), intent(out) :: comm_name
integer, intent(out) :: resultlen
integer, intent(out) :: ierr
end subroutine MPI_Comm_get_name
end interface
interface MPI_Comm_get_parent
subroutine MPI_Comm_get_parent(parent, ierr)
integer, intent(out) :: parent
integer, intent(out) :: ierr
end subroutine MPI_Comm_get_parent
end interface
interface MPI_Comm_group
subroutine MPI_Comm_group(comm, group, ierr)
integer, intent(in) :: comm
integer, intent(out) :: group
integer, intent(out) :: ierr
end subroutine MPI_Comm_group
end interface
interface MPI_Comm_join
subroutine MPI_Comm_join(fd, intercomm, ierr)
integer, intent(in) :: fd
integer, intent(out) :: intercomm
integer, intent(out) :: ierr
end subroutine MPI_Comm_join
end interface
interface MPI_Comm_rank
subroutine MPI_Comm_rank(comm, rank, ierr)
integer, intent(in) :: comm
integer, intent(out) :: rank
integer, intent(out) :: ierr
end subroutine MPI_Comm_rank
end interface
interface MPI_Comm_remote_group
subroutine MPI_Comm_remote_group(comm, group, ierr)
integer, intent(in) :: comm
integer, intent(out) :: group
integer, intent(out) :: ierr
end subroutine MPI_Comm_remote_group
end interface
interface MPI_Comm_remote_size
subroutine MPI_Comm_remote_size(comm, size, ierr)
integer, intent(in) :: comm
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Comm_remote_size
end interface
interface MPI_Comm_set_attr
subroutine MPI_Comm_set_attr(comm, comm_keyval, attribute_val, ierr)
include 'mpif-config.h'
integer, intent(in) :: comm
integer, intent(in) :: comm_keyval
integer(kind=MPI_ADDRESS_KIND), intent(in) :: attribute_val
integer, intent(out) :: ierr
end subroutine MPI_Comm_set_attr
end interface
interface MPI_Comm_set_errhandler
subroutine MPI_Comm_set_errhandler(comm, errhandler, ierr)
integer, intent(in) :: comm
integer, intent(in) :: errhandler
integer, intent(out) :: ierr
end subroutine MPI_Comm_set_errhandler
end interface
interface MPI_Comm_set_name
subroutine MPI_Comm_set_name(comm, comm_name, ierr)
integer, intent(in) :: comm
character(len=*), intent(in) :: comm_name
integer, intent(out) :: ierr
end subroutine MPI_Comm_set_name
end interface
interface MPI_Comm_size
subroutine MPI_Comm_size(comm, size, ierr)
integer, intent(in) :: comm
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Comm_size
end interface
interface MPI_Comm_spawn
subroutine MPI_Comm_spawn(command, argv, maxprocs, info, root, &
comm, intercomm, array_of_errcodes, ierr)
character(len=*), intent(in) :: command
character(len=*), dimension(*), intent(in) :: argv
integer, intent(in) :: maxprocs
integer, intent(in) :: info
integer, intent(in) :: root
integer, intent(in) :: comm
integer, intent(out) :: intercomm
integer, dimension(*), intent(out) :: array_of_errcodes
integer, intent(out) :: ierr
end subroutine MPI_Comm_spawn
end interface
interface MPI_Comm_spawn_multiple
subroutine MPI_Comm_spawn_multiple(count, array_of_commands, array_of_argv, array_of_maxprocs, array_of_info, &
root, comm, intercomm, array_of_errcodes, ierr)
integer, intent(in) :: count
character(len=*), dimension(*), intent(in) :: array_of_commands
character(len=*), dimension(count,*), intent(in) :: array_of_argv
integer, dimension(*), intent(in) :: array_of_maxprocs
integer, dimension(*), intent(in) :: array_of_info
integer, intent(in) :: root
integer, intent(in) :: comm
integer, intent(out) :: intercomm
integer, dimension(*), intent(out) :: array_of_errcodes
integer, intent(out) :: ierr
end subroutine MPI_Comm_spawn_multiple
end interface
interface MPI_Comm_split
subroutine MPI_Comm_split(comm, color, key, newcomm, ierr)
integer, intent(in) :: comm
integer, intent(in) :: color
integer, intent(in) :: key
integer, intent(out) :: newcomm
integer, intent(out) :: ierr
end subroutine MPI_Comm_split
end interface
interface MPI_Comm_split
subroutine MPI_Comm_split_type(comm, split_type, key, info, newcomm, ierr)
integer, intent(in) :: comm
integer, intent(in) :: split_type
integer, intent(in) :: key
integer, intent(in) :: info
integer, intent(out) :: newcomm
integer, intent(out) :: ierr
end subroutine MPI_Comm_split_type
end interface
interface MPI_Comm_test_inter
subroutine MPI_Comm_test_inter(comm, flag, ierr)
integer, intent(in) :: comm
logical, intent(out) :: flag
integer, intent(out) :: ierr
end subroutine MPI_Comm_test_inter
end interface
interface MPI_Dims_create
subroutine MPI_Dims_create(nnodes, ndims, dims, ierr)
integer, intent(in) :: nnodes
integer, intent(in) :: ndims
integer, dimension(*), intent(inout) :: dims
integer, intent(out) :: ierr
end subroutine MPI_Dims_create
end interface
interface MPI_Errhandler_create
subroutine MPI_Errhandler_create(function, errhandler, ierr)
external :: function
integer, intent(out) :: errhandler
integer, intent(out) :: ierr
end subroutine MPI_Errhandler_create
end interface
interface MPI_Errhandler_free
subroutine MPI_Errhandler_free(errhandler, ierr)
integer, intent(inout) :: errhandler
integer, intent(out) :: ierr
end subroutine MPI_Errhandler_free
end interface
interface MPI_Errhandler_get
subroutine MPI_Errhandler_get(comm, errhandler, ierr)
integer, intent(in) :: comm
integer, intent(out) :: errhandler
integer, intent(out) :: ierr
end subroutine MPI_Errhandler_get
end interface
interface MPI_Errhandler_set
subroutine MPI_Errhandler_set(comm, errhandler, ierr)
integer, intent(in) :: comm
integer, intent(in) :: errhandler
integer, intent(out) :: ierr
end subroutine MPI_Errhandler_set
end interface
interface MPI_Error_class
subroutine MPI_Error_class(errorcode, errorclass, ierr)
integer, intent(in) :: errorcode
integer, intent(out) :: errorclass
integer, intent(out) :: ierr
end subroutine MPI_Error_class
end interface
interface MPI_Error_string
subroutine MPI_Error_string(errorcode, string, resultlen, ierr)
integer, intent(in) :: errorcode
character(len=*), intent(out) :: string
integer, intent(out) :: resultlen
integer, intent(out) :: ierr
end subroutine MPI_Error_string
end interface
interface MPI_Exscan
subroutine MPI_Exscan(sendbuf, recvbuf, count, datatype, op, &
comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: op
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Exscan
end interface
interface MPI_Finalize
subroutine MPI_Finalize(ierr)
integer, intent(out) :: ierr
end subroutine MPI_Finalize
end interface
interface MPI_Finalized
subroutine MPI_Finalized(flag, ierr)
logical, intent(out) :: flag
integer, intent(out) :: ierr
end subroutine MPI_Finalized
end interface
interface MPI_Free_mem
subroutine MPI_Free_mem(base, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ base
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: base
integer, intent(out) :: ierr
end subroutine MPI_Free_mem
end interface
interface MPI_Gather
subroutine MPI_Gather(sendbuf, sendcount, sendtype, recvbuf, recvcount, &
recvtype, root, comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, intent(in) :: sendcount
integer, intent(in) :: sendtype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: recvcount
integer, intent(in) :: recvtype
integer, intent(in) :: root
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Gather
end interface
interface MPI_Gatherv
subroutine MPI_Gatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, &
displs, recvtype, root, comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, intent(in) :: sendcount
integer, intent(in) :: sendtype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, dimension(*), intent(in) :: recvcounts
integer, dimension(*), intent(in) :: displs
integer, intent(in) :: recvtype
integer, intent(in) :: root
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Gatherv
end interface
interface MPI_Get
subroutine MPI_Get(origin_addr, origin_count, origin_datatype, target_rank, target_disp, &
target_count, target_datatype, win, ierr)
include 'mpif-config.h'
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ origin_addr
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: origin_addr
integer, intent(in) :: origin_count
integer, intent(in) :: origin_datatype
integer, intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer, intent(in) :: target_count
integer, intent(in) :: target_datatype
integer, intent(in) :: win
integer, intent(out) :: ierr
end subroutine MPI_Get
end interface
interface MPI_Get_address
subroutine MPI_Get_address(location, address, ierr)
include 'mpif-config.h'
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ location
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: location
integer(kind=MPI_ADDRESS_KIND), intent(out) :: address
integer, intent(out) :: ierr
end subroutine MPI_Get_address
end interface
interface MPI_Get_count
subroutine MPI_Get_count(status, datatype, count, ierr)
include 'mpif-config.h'
integer, dimension(MPI_STATUS_SIZE), intent(in) :: status
integer, intent(in) :: datatype
integer, intent(out) :: count
integer, intent(out) :: ierr
end subroutine MPI_Get_count
end interface
interface MPI_Get_elements
subroutine MPI_Get_elements(status, datatype, count, ierr)
include 'mpif-config.h'
integer, dimension(MPI_STATUS_SIZE), intent(in) :: status
integer, intent(in) :: datatype
integer, intent(out) :: count
integer, intent(out) :: ierr
end subroutine MPI_Get_elements
end interface
interface MPI_Get_library_version
subroutine MPI_Get_library_version(version, resultlen, ierr)
character(len=*), intent(out) :: version
integer, intent(out) :: resultlen
integer, intent(out) :: ierr
end subroutine MPI_Get_library_version
end interface
interface MPI_Get_processor_name
subroutine MPI_Get_processor_name(name, resultlen, ierr)
character(len=*), intent(out) :: name
integer, intent(out) :: resultlen
integer, intent(out) :: ierr
end subroutine MPI_Get_processor_name
end interface
interface MPI_Get_version
subroutine MPI_Get_version(version, subversion, ierr)
integer, intent(out) :: version
integer, intent(out) :: subversion
integer, intent(out) :: ierr
end subroutine MPI_Get_version
end interface
interface MPI_Graph_create
subroutine MPI_Graph_create(comm_old, nnodes, index, edges, reorder, &
comm_graph, ierr)
integer, intent(in) :: comm_old
integer, intent(in) :: nnodes
integer, dimension(*), intent(in) :: index
integer, dimension(*), intent(in) :: edges
logical, intent(in) :: reorder
integer, intent(out) :: comm_graph
integer, intent(out) :: ierr
end subroutine MPI_Graph_create
end interface
interface MPI_Graph_get
subroutine MPI_Graph_get(comm, maxindex, maxedges, index, edges&
, ierr)
integer, intent(in) :: comm
integer, intent(in) :: maxindex
integer, intent(in) :: maxedges
integer, dimension(*), intent(out) :: index
integer, dimension(*), intent(out) :: edges
integer, intent(out) :: ierr
end subroutine MPI_Graph_get
end interface
interface MPI_Graph_map
subroutine MPI_Graph_map(comm, nnodes, index, edges, newrank&
, ierr)
integer, intent(in) :: comm
integer, intent(in) :: nnodes
integer, dimension(*), intent(in) :: index
integer, dimension(*), intent(in) :: edges
integer, intent(out) :: newrank
integer, intent(out) :: ierr
end subroutine MPI_Graph_map
end interface
interface MPI_Graph_neighbors
subroutine MPI_Graph_neighbors(comm, rank, maxneighbors, neighbors, ierr)
integer, intent(in) :: comm
integer, intent(in) :: rank
integer, intent(in) :: maxneighbors
integer, dimension(*), intent(out) :: neighbors
integer, intent(out) :: ierr
end subroutine MPI_Graph_neighbors
end interface
interface MPI_Graph_neighbors_count
subroutine MPI_Graph_neighbors_count(comm, rank, nneighbors, ierr)
integer, intent(in) :: comm
integer, intent(in) :: rank
integer, intent(out) :: nneighbors
integer, intent(out) :: ierr
end subroutine MPI_Graph_neighbors_count
end interface
interface MPI_Graphdims_get
subroutine MPI_Graphdims_get(comm, nnodes, nedges, ierr)
integer, intent(in) :: comm
integer, intent(out) :: nnodes
integer, intent(out) :: nedges
integer, intent(out) :: ierr
end subroutine MPI_Graphdims_get
end interface
interface MPI_Grequest_complete
subroutine MPI_Grequest_complete(request, ierr)
integer, intent(in) :: request
integer, intent(out) :: ierr
end subroutine MPI_Grequest_complete
end interface
interface MPI_Grequest_start
subroutine MPI_Grequest_start(query_fn, free_fn, cancel_fn, extra_state, request&
, ierr)
include 'mpif-config.h'
external :: query_fn
external :: free_fn
external :: cancel_fn
integer(kind=MPI_ADDRESS_KIND), intent(in) :: extra_state
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Grequest_start
end interface
interface MPI_Group_compare
subroutine MPI_Group_compare(group1, group2, result, ierr)
integer, intent(in) :: group1
integer, intent(in) :: group2
integer, intent(out) :: result
integer, intent(out) :: ierr
end subroutine MPI_Group_compare
end interface
interface MPI_Group_difference
subroutine MPI_Group_difference(group1, group2, newgroup, ierr)
integer, intent(in) :: group1
integer, intent(in) :: group2
integer, intent(out) :: newgroup
integer, intent(out) :: ierr
end subroutine MPI_Group_difference
end interface
interface MPI_Group_excl
subroutine MPI_Group_excl(group, n, ranks, newgroup, ierr)
integer, intent(in) :: group
integer, intent(in) :: n
integer, dimension(*), intent(in) :: ranks
integer, intent(out) :: newgroup
integer, intent(out) :: ierr
end subroutine MPI_Group_excl
end interface
interface MPI_Group_free
subroutine MPI_Group_free(group, ierr)
integer, intent(inout) :: group
integer, intent(out) :: ierr
end subroutine MPI_Group_free
end interface
interface MPI_Group_incl
subroutine MPI_Group_incl(group, n, ranks, newgroup, ierr)
integer, intent(in) :: group
integer, intent(in) :: n
integer, dimension(*), intent(in) :: ranks
integer, intent(out) :: newgroup
integer, intent(out) :: ierr
end subroutine MPI_Group_incl
end interface
interface MPI_Group_intersection
subroutine MPI_Group_intersection(group1, group2, newgroup, ierr)
integer, intent(in) :: group1
integer, intent(in) :: group2
integer, intent(out) :: newgroup
integer, intent(out) :: ierr
end subroutine MPI_Group_intersection
end interface
interface MPI_Group_range_excl
subroutine MPI_Group_range_excl(group, n, ranges, newgroup, ierr)
integer, intent(in) :: group
integer, intent(in) :: n
integer, dimension(3, *), intent(in) :: ranges
integer, intent(out) :: newgroup
integer, intent(out) :: ierr
end subroutine MPI_Group_range_excl
end interface
interface MPI_Group_range_incl
subroutine MPI_Group_range_incl(group, n, ranges, newgroup, ierr)
integer, intent(in) :: group
integer, intent(in) :: n
integer, dimension(3, *), intent(in) :: ranges
integer, intent(out) :: newgroup
integer, intent(out) :: ierr
end subroutine MPI_Group_range_incl
end interface
interface MPI_Group_rank
subroutine MPI_Group_rank(group, rank, ierr)
integer, intent(in) :: group
integer, intent(out) :: rank
integer, intent(out) :: ierr
end subroutine MPI_Group_rank
end interface
interface MPI_Group_size
subroutine MPI_Group_size(group, size, ierr)
integer, intent(in) :: group
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Group_size
end interface
interface MPI_Group_translate_ranks
subroutine MPI_Group_translate_ranks(group1, n, ranks1, group2, ranks2&
, ierr)
integer, intent(in) :: group1
integer, intent(in) :: n
integer, dimension(*), intent(in) :: ranks1
integer, intent(in) :: group2
integer, dimension(*), intent(out) :: ranks2
integer, intent(out) :: ierr
end subroutine MPI_Group_translate_ranks
end interface
interface MPI_Group_union
subroutine MPI_Group_union(group1, group2, newgroup, ierr)
integer, intent(in) :: group1
integer, intent(in) :: group2
integer, intent(out) :: newgroup
integer, intent(out) :: ierr
end subroutine MPI_Group_union
end interface
interface MPI_Iallgather
subroutine MPI_Iallgather(sendbuf, sendcount, sendtype, recvbuf, recvcount, &
recvtype, comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, intent(in) :: sendcount
integer, intent(in) :: sendtype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: recvcount
integer, intent(in) :: recvtype
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Iallgather
end interface
interface MPI_Iallgatherv
subroutine MPI_Iallgatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, &
displs, recvtype, comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, intent(in) :: sendcount
integer, intent(in) :: sendtype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, dimension(*), intent(in) :: recvcounts
integer, dimension(*), intent(in) :: displs
integer, intent(in) :: recvtype
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Iallgatherv
end interface
interface MPI_Iallreduce
subroutine MPI_Iallreduce(sendbuf, recvbuf, count, datatype, op, &
comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: op
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Iallreduce
end interface
interface MPI_Ialltoall
subroutine MPI_Ialltoall(sendbuf, sendcount, sendtype, recvbuf, recvcount, &
recvtype, comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, intent(in) :: sendcount
integer, intent(in) :: sendtype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: recvcount
integer, intent(in) :: recvtype
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Ialltoall
end interface
interface MPI_Ialltoallv
subroutine MPI_Ialltoallv(sendbuf, sendcounts, sdispls, sendtype, recvbuf, &
recvcounts, rdispls, recvtype, comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, dimension(*), intent(in) :: sendcounts
integer, dimension(*), intent(in) :: sdispls
integer, intent(in) :: sendtype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, dimension(*), intent(in) :: recvcounts
integer, dimension(*), intent(in) :: rdispls
integer, intent(in) :: recvtype
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Ialltoallv
end interface
interface MPI_Ialltoallw
subroutine MPI_Ialltoallw(sendbuf, sendcounts, sdispls, sendtypes, recvbuf, &
recvcounts, rdispls, recvtypes, comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, dimension(*), intent(in) :: sendcounts
integer, dimension(*), intent(in) :: sdispls
integer, dimension(*), intent(in) :: sendtypes
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, dimension(*), intent(in) :: recvcounts
integer, dimension(*), intent(in) :: rdispls
integer, dimension(*), intent(in) :: recvtypes
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Ialltoallw
end interface
interface MPI_Ibarrier
subroutine MPI_Ibarrier(comm, request, ierr)
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Ibarrier
end interface
interface MPI_Ibcast
subroutine MPI_Ibcast(buffer, count, datatype, root, comm&
, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buffer
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buffer
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: root
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Ibcast
end interface
interface MPI_Iexscan
subroutine MPI_Iexscan(sendbuf, recvbuf, count, datatype, op, &
comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: op
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Iexscan
end interface
== Highlights == 1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler 1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release 1. The mpi module has been re-implemented and is significantly "mo' bettah" 1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk. == More details == Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7. Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey: * Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort) * The Fortran J3 committee * Tobias Burnus/gfortran * Tony !Goetz/Absoft * Terry !Donte/Oracle * ...and probably others whom I'm forgetting :-( There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax. Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time. As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory: {{{ ompi/mpi/fortran/ base/ - glue code mpif-h/ - what used to be ompi/mpi/f77 use-mpi-tkr/ - what used to be ompi/mpi/f90 use-mpi-ignore-tkr/ - new mpi module implementation use-mpi-f08/ - new mpi_f08 module implementation }}} There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version. Other things that were done: * ompi_info grew a few new output fields to describe what level of Fortran support is included * Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added * The old Fortran MPI libraries were renamed: * libmpi_f77 -> libmpi_mpifh * libmpi_f90 -> libmpi_usempi * The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example: {{{ shell$ ./configure CC=icc CXX=icpc FC=ifort ... }}} All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches). I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed. This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
interface MPI_Ibsend
subroutine MPI_Ibsend(buf, count, datatype, dest, tag, &
comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: dest
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Ibsend
end interface
interface MPI_Igather
subroutine MPI_Igather(sendbuf, sendcount, sendtype, recvbuf, recvcount, &
recvtype, root, comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, intent(in) :: sendcount
integer, intent(in) :: sendtype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: recvcount
integer, intent(in) :: recvtype
integer, intent(in) :: root
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Igather
end interface
interface MPI_Igatherv
subroutine MPI_Igatherv(sendbuf, sendcount, sendtype, recvbuf, recvcounts, &
displs, recvtype, root, comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, intent(in) :: sendcount
integer, intent(in) :: sendtype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, dimension(*), intent(in) :: recvcounts
integer, dimension(*), intent(in) :: displs
integer, intent(in) :: recvtype
integer, intent(in) :: root
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Igatherv
end interface
== Highlights == 1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler 1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release 1. The mpi module has been re-implemented and is significantly "mo' bettah" 1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk. == More details == Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7. Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey: * Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort) * The Fortran J3 committee * Tobias Burnus/gfortran * Tony !Goetz/Absoft * Terry !Donte/Oracle * ...and probably others whom I'm forgetting :-( There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax. Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time. As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory: {{{ ompi/mpi/fortran/ base/ - glue code mpif-h/ - what used to be ompi/mpi/f77 use-mpi-tkr/ - what used to be ompi/mpi/f90 use-mpi-ignore-tkr/ - new mpi module implementation use-mpi-f08/ - new mpi_f08 module implementation }}} There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version. Other things that were done: * ompi_info grew a few new output fields to describe what level of Fortran support is included * Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added * The old Fortran MPI libraries were renamed: * libmpi_f77 -> libmpi_mpifh * libmpi_f90 -> libmpi_usempi * The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example: {{{ shell$ ./configure CC=icc CXX=icpc FC=ifort ... }}} All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches). I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed. This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
interface MPI_Improbe
subroutine MPI_Improbe(source, tag, comm, flag, message, status, ierr)
include 'mpif-config.h'
integer, intent(in) :: source
integer, intent(in) :: tag
integer, intent(in) :: comm
logical, intent(out) :: flag
integer, intent(out) :: message
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
integer, intent(out) :: ierr
end subroutine MPI_Improbe
end interface
interface MPI_Imrecv
subroutine MPI_Imrecv(buf, count, datatype, message, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(inout) :: message
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Imrecv
end interface
interface MPI_Info_create
subroutine MPI_Info_create(info, ierr)
integer, intent(out) :: info
integer, intent(out) :: ierr
end subroutine MPI_Info_create
end interface
interface MPI_Info_delete
subroutine MPI_Info_delete(info, key, ierr)
integer, intent(in) :: info
character(len=*), intent(in) :: key
integer, intent(out) :: ierr
end subroutine MPI_Info_delete
end interface
interface MPI_Info_dup
subroutine MPI_Info_dup(info, newinfo, ierr)
integer, intent(in) :: info
integer, intent(out) :: newinfo
integer, intent(out) :: ierr
end subroutine MPI_Info_dup
end interface
interface MPI_Info_free
subroutine MPI_Info_free(info, ierr)
integer, intent(inout) :: info
integer, intent(out) :: ierr
end subroutine MPI_Info_free
end interface
interface MPI_Info_get
subroutine MPI_Info_get(info, key, valuelen, value, flag&
, ierr)
integer, intent(in) :: info
character(len=*), intent(in) :: key
integer, intent(in) :: valuelen
character(len=*), intent(out) :: value
logical, intent(out) :: flag
integer, intent(out) :: ierr
end subroutine MPI_Info_get
end interface
interface MPI_Info_get_nkeys
subroutine MPI_Info_get_nkeys(info, nkeys, ierr)
integer, intent(in) :: info
integer, intent(out) :: nkeys
integer, intent(out) :: ierr
end subroutine MPI_Info_get_nkeys
end interface
interface MPI_Info_get_nthkey
subroutine MPI_Info_get_nthkey(info, n, key, ierr)
integer, intent(in) :: info
integer, intent(in) :: n
character(len=*), intent(out) :: key
integer, intent(out) :: ierr
end subroutine MPI_Info_get_nthkey
end interface
interface MPI_Info_get_valuelen
subroutine MPI_Info_get_valuelen(info, key, valuelen, flag, ierr)
integer, intent(in) :: info
character(len=*), intent(in) :: key
integer, intent(out) :: valuelen
logical, intent(out) :: flag
integer, intent(out) :: ierr
end subroutine MPI_Info_get_valuelen
end interface
interface MPI_Info_set
subroutine MPI_Info_set(info, key, value, ierr)
integer, intent(in) :: info
character(len=*), intent(in) :: key
character(len=*), intent(in) :: value
integer, intent(out) :: ierr
end subroutine MPI_Info_set
end interface
interface MPI_Init
subroutine MPI_Init(ierr)
integer, intent(out) :: ierr
end subroutine MPI_Init
end interface
interface MPI_Init_thread
subroutine MPI_Init_thread(required, provided, ierr)
integer, intent(in) :: required
integer, intent(out) :: provided
integer, intent(out) :: ierr
end subroutine MPI_Init_thread
end interface
interface MPI_Initialized
subroutine MPI_Initialized(flag, ierr)
logical, intent(out) :: flag
integer, intent(out) :: ierr
end subroutine MPI_Initialized
end interface
interface MPI_Intercomm_create
subroutine MPI_Intercomm_create(local_comm, local_leader, bridge_comm, remote_leader, tag, &
newintercomm, ierr)
integer, intent(in) :: local_comm
integer, intent(in) :: local_leader
integer, intent(in) :: bridge_comm
integer, intent(in) :: remote_leader
integer, intent(in) :: tag
integer, intent(out) :: newintercomm
integer, intent(out) :: ierr
end subroutine MPI_Intercomm_create
end interface
interface MPI_Intercomm_merge
subroutine MPI_Intercomm_merge(intercomm, high, newintercomm, ierr)
integer, intent(in) :: intercomm
logical, intent(in) :: high
integer, intent(out) :: newintercomm
integer, intent(out) :: ierr
end subroutine MPI_Intercomm_merge
end interface
interface MPI_Iprobe
subroutine MPI_Iprobe(source, tag, comm, flag, status&
, ierr)
include 'mpif-config.h'
integer, intent(in) :: source
integer, intent(in) :: tag
integer, intent(in) :: comm
logical, intent(out) :: flag
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
integer, intent(out) :: ierr
end subroutine MPI_Iprobe
end interface
interface MPI_Irecv
subroutine MPI_Irecv(buf, count, datatype, source, tag, &
comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: source
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Irecv
end interface
interface MPI_Ireduce
subroutine MPI_Ireduce(sendbuf, recvbuf, count, datatype, op, &
root, comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: op
integer, intent(in) :: root
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Ireduce
end interface
interface MPI_Ireduce_scatter
subroutine MPI_Ireduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op, &
comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, dimension(*), intent(in) :: recvcounts
integer, intent(in) :: datatype
integer, intent(in) :: op
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Ireduce_scatter
end interface
interface MPI_Ireduce_scatter_block
subroutine MPI_Ireduce_scatter_block(sendbuf, recvbuf, recvcount, datatype, op, &
comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: recvcount
integer, intent(in) :: datatype
integer, intent(in) :: op
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Ireduce_scatter_block
end interface
== Highlights == 1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler 1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release 1. The mpi module has been re-implemented and is significantly "mo' bettah" 1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk. == More details == Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7. Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey: * Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort) * The Fortran J3 committee * Tobias Burnus/gfortran * Tony !Goetz/Absoft * Terry !Donte/Oracle * ...and probably others whom I'm forgetting :-( There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax. Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time. As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory: {{{ ompi/mpi/fortran/ base/ - glue code mpif-h/ - what used to be ompi/mpi/f77 use-mpi-tkr/ - what used to be ompi/mpi/f90 use-mpi-ignore-tkr/ - new mpi module implementation use-mpi-f08/ - new mpi_f08 module implementation }}} There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version. Other things that were done: * ompi_info grew a few new output fields to describe what level of Fortran support is included * Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added * The old Fortran MPI libraries were renamed: * libmpi_f77 -> libmpi_mpifh * libmpi_f90 -> libmpi_usempi * The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example: {{{ shell$ ./configure CC=icc CXX=icpc FC=ifort ... }}} All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches). I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed. This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
interface MPI_Irsend
subroutine MPI_Irsend(buf, count, datatype, dest, tag, &
comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: dest
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Irsend
end interface
interface MPI_Is_thread_main
subroutine MPI_Is_thread_main(flag, ierr)
logical, intent(out) :: flag
integer, intent(out) :: ierr
end subroutine MPI_Is_thread_main
end interface
interface MPI_Iscan
subroutine MPI_Iscan(sendbuf, recvbuf, count, datatype, op, &
comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: op
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Iscan
end interface
interface MPI_Iscatter
subroutine MPI_Iscatter(sendbuf, sendcount, sendtype, recvbuf, recvcount, &
recvtype, root, comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, intent(in) :: sendcount
integer, intent(in) :: sendtype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: recvcount
integer, intent(in) :: recvtype
integer, intent(in) :: root
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Iscatter
end interface
interface MPI_Iscatterv
subroutine MPI_Iscatterv(sendbuf, sendcounts, displs, sendtype, recvbuf, &
recvcount, recvtype, root, comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, dimension(*), intent(in) :: sendcounts
integer, dimension(*), intent(in) :: displs
integer, intent(in) :: sendtype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: recvcount
integer, intent(in) :: recvtype
integer, intent(in) :: root
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Iscatterv
end interface
== Highlights == 1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler 1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release 1. The mpi module has been re-implemented and is significantly "mo' bettah" 1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk. == More details == Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7. Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey: * Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort) * The Fortran J3 committee * Tobias Burnus/gfortran * Tony !Goetz/Absoft * Terry !Donte/Oracle * ...and probably others whom I'm forgetting :-( There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax. Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time. As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory: {{{ ompi/mpi/fortran/ base/ - glue code mpif-h/ - what used to be ompi/mpi/f77 use-mpi-tkr/ - what used to be ompi/mpi/f90 use-mpi-ignore-tkr/ - new mpi module implementation use-mpi-f08/ - new mpi_f08 module implementation }}} There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version. Other things that were done: * ompi_info grew a few new output fields to describe what level of Fortran support is included * Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added * The old Fortran MPI libraries were renamed: * libmpi_f77 -> libmpi_mpifh * libmpi_f90 -> libmpi_usempi * The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example: {{{ shell$ ./configure CC=icc CXX=icpc FC=ifort ... }}} All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches). I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed. This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
interface MPI_Isend
subroutine MPI_Isend(buf, count, datatype, dest, tag, &
comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: dest
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Isend
end interface
interface MPI_Issend
subroutine MPI_Issend(buf, count, datatype, dest, tag, &
comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: dest
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Issend
end interface
interface MPI_Keyval_create
subroutine MPI_Keyval_create(copy_fn, delete_fn, keyval, extra_state, ierr)
external :: copy_fn
external :: delete_fn
integer, intent(out) :: keyval
integer, intent(in) :: extra_state
integer, intent(out) :: ierr
end subroutine MPI_Keyval_create
end interface
interface MPI_Keyval_free
subroutine MPI_Keyval_free(keyval, ierr)
integer, intent(inout) :: keyval
integer, intent(out) :: ierr
end subroutine MPI_Keyval_free
end interface
interface MPI_Lookup_name
subroutine MPI_Lookup_name(service_name, info, port_name, ierr)
character(len=*), intent(in) :: service_name
integer, intent(in) :: info
character(len=*), intent(out) :: port_name
integer, intent(out) :: ierr
end subroutine MPI_Lookup_name
end interface
interface MPI_Mprobe
subroutine MPI_Mprobe(source, tag, comm, message, status, ierr)
include 'mpif-config.h'
integer, intent(in) :: source
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, intent(out) :: message
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
integer, intent(out) :: ierr
end subroutine MPI_Mprobe
end interface
interface MPI_Mrecv
subroutine MPI_Mrecv(buf, count, datatype, message, status, ierr)
include 'mpif-config.h'
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(inout) :: message
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
integer, intent(out) :: ierr
end subroutine MPI_Mrecv
end interface
interface MPI_Op_commutative
subroutine MPI_Op_commutative(op, commute, ierr)
integer, intent(in) :: op
logical, intent(out) :: commute
integer, intent(out) :: ierr
end subroutine MPI_Op_commutative
end interface
interface MPI_Op_create
subroutine MPI_Op_create(function, commute, op, ierr)
external :: function
logical, intent(in) :: commute
integer, intent(out) :: op
integer, intent(out) :: ierr
end subroutine MPI_Op_create
end interface
interface MPI_Op_free
subroutine MPI_Op_free(op, ierr)
integer, intent(inout) :: op
integer, intent(out) :: ierr
end subroutine MPI_Op_free
end interface
interface MPI_Open_port
subroutine MPI_Open_port(info, port_name, ierr)
integer, intent(in) :: info
character(len=*), intent(out) :: port_name
integer, intent(out) :: ierr
end subroutine MPI_Open_port
end interface
interface MPI_Pack
subroutine MPI_Pack(inbuf, incount, datatype, outbuf, outsize, &
position, comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ inbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: inbuf
integer, intent(in) :: incount
integer, intent(in) :: datatype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ outbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: outbuf
integer, intent(in) :: outsize
integer, intent(inout) :: position
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Pack
end interface
interface MPI_Pack_external
subroutine MPI_Pack_external(datarep, inbuf, incount, datatype, outbuf, &
outsize, position, ierr)
include 'mpif-config.h'
character(len=*), intent(in) :: datarep
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ inbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: inbuf
integer, intent(in) :: incount
integer, intent(in) :: datatype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ outbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: outbuf
integer(kind=MPI_ADDRESS_KIND), intent(in) :: outsize
integer(kind=MPI_ADDRESS_KIND), intent(inout) :: position
integer, intent(out) :: ierr
end subroutine MPI_Pack_external
end interface
interface MPI_Pack_external_size
subroutine MPI_Pack_external_size(datarep, incount, datatype, size, ierr)
include 'mpif-config.h'
character(len=*), intent(in) :: datarep
integer, intent(in) :: incount
integer, intent(in) :: datatype
integer(kind=MPI_ADDRESS_KIND), intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Pack_external_size
end interface
interface MPI_Pack_size
subroutine MPI_Pack_size(incount, datatype, comm, size, ierr)
integer, intent(in) :: incount
integer, intent(in) :: datatype
integer, intent(in) :: comm
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Pack_size
end interface
interface MPI_Pcontrol
subroutine MPI_Pcontrol(level)
integer, intent(in) :: level
end subroutine MPI_Pcontrol
end interface
interface MPI_Probe
subroutine MPI_Probe(source, tag, comm, status, ierr)
include 'mpif-config.h'
integer, intent(in) :: source
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
integer, intent(out) :: ierr
end subroutine MPI_Probe
end interface
interface MPI_Publish_name
subroutine MPI_Publish_name(service_name, info, port_name, ierr)
character(len=*), intent(in) :: service_name
integer, intent(in) :: info
character(len=*), intent(in) :: port_name
integer, intent(out) :: ierr
end subroutine MPI_Publish_name
end interface
interface MPI_Put
subroutine MPI_Put(origin_addr, origin_count, origin_datatype, target_rank, target_disp, &
target_count, target_datatype, win, ierr)
include 'mpif-config.h'
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ origin_addr
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: origin_addr
integer, intent(in) :: origin_count
integer, intent(in) :: origin_datatype
integer, intent(in) :: target_rank
integer(kind=MPI_ADDRESS_KIND), intent(in) :: target_disp
integer, intent(in) :: target_count
integer, intent(in) :: target_datatype
integer, intent(in) :: win
integer, intent(out) :: ierr
end subroutine MPI_Put
end interface
interface MPI_Query_thread
subroutine MPI_Query_thread(provided, ierr)
integer, intent(out) :: provided
integer, intent(out) :: ierr
end subroutine MPI_Query_thread
end interface
interface MPI_Recv
subroutine MPI_Recv(buf, count, datatype, source, tag, &
comm, status, ierr)
include 'mpif-config.h'
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: source
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
integer, intent(out) :: ierr
end subroutine MPI_Recv
end interface
interface MPI_Recv_init
subroutine MPI_Recv_init(buf, count, datatype, source, tag, &
comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: source
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Recv_init
end interface
interface MPI_Reduce
subroutine MPI_Reduce(sendbuf, recvbuf, count, datatype, op, &
root, comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: op
integer, intent(in) :: root
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Reduce
end interface
interface MPI_Reduce_local
subroutine MPI_Reduce_local(inbuf, inout, count, datatype, op, &
ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ inbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: inbuf
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ inout
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: inout
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: op
integer, intent(out) :: ierr
end subroutine MPI_Reduce_local
end interface
interface MPI_Reduce_scatter
subroutine MPI_Reduce_scatter(sendbuf, recvbuf, recvcounts, datatype, op, &
comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, dimension(*), intent(in) :: recvcounts
integer, intent(in) :: datatype
integer, intent(in) :: op
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Reduce_scatter
end interface
interface MPI_Reduce_scatter_block
subroutine MPI_Reduce_scatter_block(sendbuf, recvbuf, recvcount, datatype, op, &
comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: recvcount
integer, intent(in) :: datatype
integer, intent(in) :: op
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Reduce_scatter_block
end interface
== Highlights == 1. New mpifort wrapper compiler: you can utilize mpif.h, use mpi, and use mpi_f08 through this one wrapper compiler 1. mpif77 and mpif90 still exist, but are sym links to mpifort and may be removed in a future release 1. The mpi module has been re-implemented and is significantly "mo' bettah" 1. The mpi_f08 module offers many, many improvements over mpif.h and the mpi module This stuff is coming from a VERY long-lived mercurial branch (3 years!); it'll almost certainly take a few SVN commits and a bunch of testing before I get it correctly committed to the SVN trunk. == More details == Craig Rasmussen and I have been working with the MPI-3 Fortran WG and Fortran J3 committees for a long, long time to make a prototype MPI-3 Fortran bindings implementation. We think we're at a stable enough state to bring this stuff back to the trunk, with the goal of including it in OMPI v1.7. Special thanks go out to everyone who has been incredibly patient and helpful to us in this journey: * Rolf Rabenseifner/HLRS (mastermind/genius behind the entire MPI-3 Fortran effort) * The Fortran J3 committee * Tobias Burnus/gfortran * Tony !Goetz/Absoft * Terry !Donte/Oracle * ...and probably others whom I'm forgetting :-( There's still opportunities for optimization in the mpi_f08 implementation, but by and large, it is as far along as it can be until Fortran compilers start implementing the new F08 dimension(..) syntax. Note that gfortran is currently unsupported for the mpi_f08 module and the new mpi module. gfortran users will a) fall back to the same mpi module implementation that is in OMPI v1.5.x, and b) not get the new mpi_f08 module. The gfortran maintainers are actively working hard to add the necessary features to support both the new mpi_f08 module and the new mpi module implementations. This will take some time. As mentioned above, ompi/mpi/f77 and ompi/mpi/f90 no longer exist. All the fortran bindings implementations have been collated under ompi/mpi/fortran; each implementation has its own subdirectory: {{{ ompi/mpi/fortran/ base/ - glue code mpif-h/ - what used to be ompi/mpi/f77 use-mpi-tkr/ - what used to be ompi/mpi/f90 use-mpi-ignore-tkr/ - new mpi module implementation use-mpi-f08/ - new mpi_f08 module implementation }}} There's also a prototype 6-function-MPI implementation under use-mpi-f08-desc that emulates the new F08 dimension(..) syntax that isn't fully available in Fortran compilers yet. We did that to prove it to ourselves that it could be done once the compilers fully support it. This directory/implementation will likely eventually replace the use-mpi-f08 version. Other things that were done: * ompi_info grew a few new output fields to describe what level of Fortran support is included * Existing Fortran examples in examples/ were renamed; new mpi_f08 examples were added * The old Fortran MPI libraries were renamed: * libmpi_f77 -> libmpi_mpifh * libmpi_f90 -> libmpi_usempi * The configury for Fortran was consolidated and significantly slimmed down. Note that the F77 env variable is now IGNORED for configure; you should only use FC. Example: {{{ shell$ ./configure CC=icc CXX=icpc FC=ifort ... }}} All of this work was done in a Mercurial branch off the SVN trunk, and hosted at Bitbucket. This branch has got to be one of OMPI's longest-running branches. Its first commit was Tue Apr 07 23:01:46 2009 -0400 -- it's over 3 years old! :-) We think we've pulled in all relevant changes from the OMPI trunk (e.g., Fortran implementations of the new MPI-3 MPROBE stuff for mpif.h, use mpi, and use mpi_f08, and the recent Fujitsu Fortran patches). I anticipate some instability when we bring this stuff into the trunk, simply because it touches a LOT of code in the MPI layer in the OMPI code base. We'll try our best to make it as pain-free as possible, but please bear with us when it is committed. This commit was SVN r26283.
2012-04-18 19:57:29 +04:00
interface MPI_Register_datarep
subroutine MPI_Register_datarep(datarep, read_conversion_fn, write_conversion_fn, dtype_file_extent_fn, extra_state&
, ierr)
include 'mpif-config.h'
character(len=*), intent(in) :: datarep
external :: read_conversion_fn
external :: write_conversion_fn
external :: dtype_file_extent_fn
integer(kind=MPI_ADDRESS_KIND), intent(in) :: extra_state
integer, intent(out) :: ierr
end subroutine MPI_Register_datarep
end interface
interface MPI_Request_free
subroutine MPI_Request_free(request, ierr)
integer, intent(inout) :: request
integer, intent(out) :: ierr
end subroutine MPI_Request_free
end interface
interface MPI_Request_get_status
subroutine MPI_Request_get_status(request, flag, status, ierr)
include 'mpif-config.h'
integer, intent(in) :: request
logical, intent(out) :: flag
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
integer, intent(out) :: ierr
end subroutine MPI_Request_get_status
end interface
interface MPI_Rsend
subroutine MPI_Rsend(ibuf, count, datatype, dest, tag, &
comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ ibuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: ibuf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: dest
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Rsend
end interface
interface MPI_Rsend_init
subroutine MPI_Rsend_init(buf, count, datatype, dest, tag, &
comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: dest
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Rsend_init
end interface
interface MPI_Scan
subroutine MPI_Scan(sendbuf, recvbuf, count, datatype, op, &
comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: op
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Scan
end interface
interface MPI_Scatter
subroutine MPI_Scatter(sendbuf, sendcount, sendtype, recvbuf, recvcount, &
recvtype, root, comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, intent(in) :: sendcount
integer, intent(in) :: sendtype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: recvcount
integer, intent(in) :: recvtype
integer, intent(in) :: root
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Scatter
end interface
interface MPI_Scatterv
subroutine MPI_Scatterv(sendbuf, sendcounts, displs, sendtype, recvbuf, &
recvcount, recvtype, root, comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, dimension(*), intent(in) :: sendcounts
integer, dimension(*), intent(in) :: displs
integer, intent(in) :: sendtype
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: recvcount
integer, intent(in) :: recvtype
integer, intent(in) :: root
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Scatterv
end interface
interface MPI_Send
subroutine MPI_Send(buf, count, datatype, dest, tag, &
comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: dest
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Send
end interface
interface MPI_Send_init
subroutine MPI_Send_init(buf, count, datatype, dest, tag, &
comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: dest
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Send_init
end interface
interface MPI_Sendrecv
subroutine MPI_Sendrecv(sendbuf, sendcount, sendtype, dest, sendtag, &
recvbuf, recvcount, recvtype, source, recvtag, comm, status, ierr)
include 'mpif-config.h'
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ sendbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: sendbuf
integer, intent(in) :: sendcount
integer, intent(in) :: sendtype
integer, intent(in) :: dest
integer, intent(in) :: sendtag
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ recvbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: recvbuf
integer, intent(in) :: recvcount
integer, intent(in) :: recvtype
integer, intent(in) :: source
integer, intent(in) :: recvtag
integer, intent(in) :: comm
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
integer, intent(out) :: ierr
end subroutine MPI_Sendrecv
end interface
interface MPI_Sendrecv_replace
subroutine MPI_Sendrecv_replace(buf, count, datatype, dest, sendtag, &
source, recvtag, comm, status, ierr)
include 'mpif-config.h'
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: dest
integer, intent(in) :: sendtag
integer, intent(in) :: source
integer, intent(in) :: recvtag
integer, intent(in) :: comm
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
integer, intent(out) :: ierr
end subroutine MPI_Sendrecv_replace
end interface
interface MPI_Sizeof
! JMS choice
subroutine MPI_Sizeof(x, size, ierr)
character, intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof
subroutine MPI_Sizeof0DL(x, size, ierr)
logical, intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof0DL
subroutine MPI_Sizeof0DI1(x, size, ierr)
integer*1, intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof0DI1
subroutine MPI_Sizeof0DI2(x, size, ierr)
integer*2, intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof0DI2
subroutine MPI_Sizeof0DI4(x, size, ierr)
integer*4, intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof0DI4
subroutine MPI_Sizeof0DI8(x, size, ierr)
integer*8, intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof0DI8
subroutine MPI_Sizeof0DR4(x, size, ierr)
real*4, intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof0DR4
subroutine MPI_Sizeof0DR8(x, size, ierr)
real*8, intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof0DR8
subroutine MPI_Sizeof0DC8(x, size, ierr)
complex*8, intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof0DC8
subroutine MPI_Sizeof0DC16(x, size, ierr)
complex*16, intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof0DC16
subroutine MPI_Sizeof1DCH(x, size, ierr)
character, dimension(*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof1DCH
subroutine MPI_Sizeof1DL(x, size, ierr)
logical, dimension(*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof1DL
subroutine MPI_Sizeof1DI1(x, size, ierr)
integer*1, dimension(*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof1DI1
subroutine MPI_Sizeof1DI2(x, size, ierr)
integer*2, dimension(*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof1DI2
subroutine MPI_Sizeof1DI4(x, size, ierr)
integer*4, dimension(*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof1DI4
subroutine MPI_Sizeof1DI8(x, size, ierr)
integer*8, dimension(*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof1DI8
subroutine MPI_Sizeof1DR4(x, size, ierr)
real*4, dimension(*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof1DR4
subroutine MPI_Sizeof1DR8(x, size, ierr)
real*8, dimension(*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof1DR8
subroutine MPI_Sizeof1DC8(x, size, ierr)
complex*8, dimension(*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof1DC8
subroutine MPI_Sizeof1DC16(x, size, ierr)
complex*16, dimension(*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof1DC16
subroutine MPI_Sizeof2DCH(x, size, ierr)
character, dimension(1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof2DCH
subroutine MPI_Sizeof2DL(x, size, ierr)
logical, dimension(1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof2DL
subroutine MPI_Sizeof2DI1(x, size, ierr)
integer*1, dimension(1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof2DI1
subroutine MPI_Sizeof2DI2(x, size, ierr)
integer*2, dimension(1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof2DI2
subroutine MPI_Sizeof2DI4(x, size, ierr)
integer*4, dimension(1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof2DI4
subroutine MPI_Sizeof2DI8(x, size, ierr)
integer*8, dimension(1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof2DI8
subroutine MPI_Sizeof2DR4(x, size, ierr)
real*4, dimension(1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof2DR4
subroutine MPI_Sizeof2DR8(x, size, ierr)
real*8, dimension(1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof2DR8
subroutine MPI_Sizeof2DC8(x, size, ierr)
complex*8, dimension(1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof2DC8
subroutine MPI_Sizeof2DC16(x, size, ierr)
complex*16, dimension(1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof2DC16
subroutine MPI_Sizeof3DCH(x, size, ierr)
character, dimension(1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof3DCH
subroutine MPI_Sizeof3DL(x, size, ierr)
logical, dimension(1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof3DL
subroutine MPI_Sizeof3DI1(x, size, ierr)
integer*1, dimension(1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof3DI1
subroutine MPI_Sizeof3DI2(x, size, ierr)
integer*2, dimension(1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof3DI2
subroutine MPI_Sizeof3DI4(x, size, ierr)
integer*4, dimension(1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof3DI4
subroutine MPI_Sizeof3DI8(x, size, ierr)
integer*8, dimension(1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof3DI8
subroutine MPI_Sizeof3DR4(x, size, ierr)
real*4, dimension(1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof3DR4
subroutine MPI_Sizeof3DR8(x, size, ierr)
real*8, dimension(1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof3DR8
subroutine MPI_Sizeof3DC8(x, size, ierr)
complex*8, dimension(1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof3DC8
subroutine MPI_Sizeof3DC16(x, size, ierr)
complex*16, dimension(1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof3DC16
subroutine MPI_Sizeof4DCH(x, size, ierr)
character, dimension(1,1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof4DCH
subroutine MPI_Sizeof4DL(x, size, ierr)
logical, dimension(1,1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof4DL
subroutine MPI_Sizeof4DI1(x, size, ierr)
integer*1, dimension(1,1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof4DI1
subroutine MPI_Sizeof4DI2(x, size, ierr)
integer*2, dimension(1,1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof4DI2
subroutine MPI_Sizeof4DI4(x, size, ierr)
integer*4, dimension(1,1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof4DI4
subroutine MPI_Sizeof4DI8(x, size, ierr)
integer*8, dimension(1,1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof4DI8
subroutine MPI_Sizeof4DR4(x, size, ierr)
real*4, dimension(1,1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof4DR4
subroutine MPI_Sizeof4DR8(x, size, ierr)
real*8, dimension(1,1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof4DR8
subroutine MPI_Sizeof4DC8(x, size, ierr)
complex*8, dimension(1,1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof4DC8
subroutine MPI_Sizeof4DC16(x, size, ierr)
complex*16, dimension(1,1,1,*), intent(in) :: x
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Sizeof4DC16
end interface
interface MPI_Ssend
subroutine MPI_Ssend(buf, count, datatype, dest, tag, &
comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: dest
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Ssend
end interface
interface MPI_Ssend_init
subroutine MPI_Ssend_init(buf, count, datatype, dest, tag, &
comm, request, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: dest
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, intent(out) :: request
integer, intent(out) :: ierr
end subroutine MPI_Ssend_init
end interface
interface MPI_Start
subroutine MPI_Start(request, ierr)
integer, intent(inout) :: request
integer, intent(out) :: ierr
end subroutine MPI_Start
end interface
interface MPI_Startall
subroutine MPI_Startall(count, array_of_requests, ierr)
integer, intent(in) :: count
integer, dimension(*), intent(inout) :: array_of_requests
integer, intent(out) :: ierr
end subroutine MPI_Startall
end interface
interface MPI_Status_set_cancelled
subroutine MPI_Status_set_cancelled(status, flag, ierr)
include 'mpif-config.h'
integer, dimension(MPI_STATUS_SIZE), intent(inout) :: status
logical, intent(in) :: flag
integer, intent(out) :: ierr
end subroutine MPI_Status_set_cancelled
end interface
interface MPI_Status_set_elements
subroutine MPI_Status_set_elements(status, datatype, count, ierr)
include 'mpif-config.h'
integer, dimension(MPI_STATUS_SIZE), intent(inout) :: status
integer, intent(in) :: datatype
integer, intent(in) :: count
integer, intent(out) :: ierr
end subroutine MPI_Status_set_elements
end interface
interface MPI_Test
subroutine MPI_Test(request, flag, status, ierr)
include 'mpif-config.h'
integer, intent(inout) :: request
logical, intent(out) :: flag
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
integer, intent(out) :: ierr
end subroutine MPI_Test
end interface
interface MPI_Test_cancelled
subroutine MPI_Test_cancelled(status, flag, ierr)
include 'mpif-config.h'
integer, dimension(MPI_STATUS_SIZE), intent(in) :: status
logical, intent(out) :: flag
integer, intent(out) :: ierr
end subroutine MPI_Test_cancelled
end interface
interface MPI_Testall
subroutine MPI_TestallS(count, array_of_requests, flag, array_of_statuses, ierr)
include 'mpif-config.h'
integer, intent(in) :: count
integer, dimension(count), intent(inout) :: array_of_requests
logical, intent(out) :: flag
integer, dimension(MPI_STATUS_SIZE, count), intent(out) :: array_of_statuses
integer, intent(out) :: ierr
end subroutine MPI_TestallS
subroutine MPI_TestallI(count, array_of_requests, flag, array_of_statuses, ierr)
include 'mpif-config.h'
integer, intent(in) :: count
integer, dimension(count), intent(inout) :: array_of_requests
logical, intent(out) :: flag
double precision, intent(out) :: array_of_statuses
integer, intent(out) :: ierr
end subroutine MPI_TestallI
end interface
interface MPI_Testany
subroutine MPI_Testany(count, array_of_requests, index, flag, status&
, ierr)
include 'mpif-config.h'
integer, intent(in) :: count
integer, dimension(count), intent(inout) :: array_of_requests
integer, intent(out) :: index
logical, intent(out) :: flag
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
integer, intent(out) :: ierr
end subroutine MPI_Testany
end interface
interface MPI_Testsome
subroutine MPI_TestsomeS(incount, array_of_requests, outcount, array_of_indices, array_of_statuses&
, ierr)
include 'mpif-config.h'
integer, intent(in) :: incount
integer, dimension(incount), intent(inout) :: array_of_requests
integer, intent(out) :: outcount
integer, dimension(*), intent(out) :: array_of_indices
integer, dimension(MPI_STATUS_SIZE, incount), intent(out) :: array_of_statuses
integer, intent(out) :: ierr
end subroutine MPI_TestsomeS
subroutine MPI_TestsomeI(incount, array_of_requests, outcount, array_of_indices, array_of_statuses&
, ierr)
include 'mpif-config.h'
integer, intent(in) :: incount
integer, dimension(incount), intent(inout) :: array_of_requests
integer, intent(out) :: outcount
integer, dimension(*), intent(out) :: array_of_indices
double precision, intent(out) :: array_of_statuses
integer, intent(out) :: ierr
end subroutine MPI_TestsomeI
end interface
interface MPI_Topo_test
subroutine MPI_Topo_test(comm, status, ierr)
integer, intent(in) :: comm
integer, intent(out) :: status
integer, intent(out) :: ierr
end subroutine MPI_Topo_test
end interface
interface MPI_Type_commit
subroutine MPI_Type_commit(type, ierr)
integer, intent(inout) :: type
integer, intent(out) :: ierr
end subroutine MPI_Type_commit
end interface
interface MPI_Type_contiguous
subroutine MPI_Type_contiguous(count, oldtype, newtype, ierr)
integer, intent(in) :: count
integer, intent(in) :: oldtype
integer, intent(out) :: newtype
integer, intent(out) :: ierr
end subroutine MPI_Type_contiguous
end interface
interface MPI_Type_create_darray
subroutine MPI_Type_create_darray(size, rank, ndims, gsize_array, distrib_array, &
darg_array, psize_array, order, oldtype, newtype, ierr)
integer, intent(in) :: size
integer, intent(in) :: rank
integer, intent(in) :: ndims
integer, dimension(*), intent(in) :: gsize_array
integer, dimension(*), intent(in) :: distrib_array
integer, dimension(*), intent(in) :: darg_array
integer, dimension(*), intent(in) :: psize_array
integer, intent(in) :: order
integer, intent(in) :: oldtype
integer, intent(out) :: newtype
integer, intent(out) :: ierr
end subroutine MPI_Type_create_darray
end interface
interface MPI_Type_create_f90_complex
subroutine MPI_Type_create_f90_complex(p, r, newtype, ierr)
integer, intent(in) :: p
integer, intent(in) :: r
integer, intent(out) :: newtype
integer, intent(out) :: ierr
end subroutine MPI_Type_create_f90_complex
end interface
interface MPI_Type_create_f90_integer
subroutine MPI_Type_create_f90_integer(r, newtype, ierr)
integer, intent(in) :: r
integer, intent(out) :: newtype
integer, intent(out) :: ierr
end subroutine MPI_Type_create_f90_integer
end interface
interface MPI_Type_create_f90_real
subroutine MPI_Type_create_f90_real(p, r, newtype, ierr)
integer, intent(in) :: p
integer, intent(in) :: r
integer, intent(out) :: newtype
integer, intent(out) :: ierr
end subroutine MPI_Type_create_f90_real
end interface
interface MPI_Type_create_hindexed
subroutine MPI_Type_create_hindexed(count, array_of_blocklengths, array_of_displacements, oldtype, newtype&
, ierr)
include 'mpif-config.h'
integer, intent(in) :: count
integer, dimension(*), intent(in) :: array_of_blocklengths
integer(kind=MPI_ADDRESS_KIND), dimension(*), intent(in) :: array_of_displacements
integer, intent(in) :: oldtype
integer, intent(out) :: newtype
integer, intent(out) :: ierr
end subroutine MPI_Type_create_hindexed
end interface
interface MPI_Type_create_hvector
subroutine MPI_Type_create_hvector(count, blocklength, stride, oldtype, newtype&
, ierr)
include 'mpif-config.h'
integer, intent(in) :: count
integer, intent(in) :: blocklength
integer(kind=MPI_ADDRESS_KIND), intent(in) :: stride
integer, intent(in) :: oldtype
integer, intent(out) :: newtype
integer, intent(out) :: ierr
end subroutine MPI_Type_create_hvector
end interface
interface MPI_Type_create_indexed_block
subroutine MPI_Type_create_indexed_block(count, blocklength, array_of_displacements, oldtype, newtype&
, ierr)
integer, intent(in) :: count
integer, intent(in) :: blocklength
integer, dimension(*), intent(in) :: array_of_displacements
integer, intent(in) :: oldtype
integer, intent(out) :: newtype
integer, intent(out) :: ierr
end subroutine MPI_Type_create_indexed_block
end interface
interface MPI_Type_create_keyval
subroutine MPI_Type_create_keyval(type_copy_attr_fn, type_delete_attr_fn, type_keyval, extra_state, ierr)
include 'mpif-config.h'
external :: type_copy_attr_fn
external :: type_delete_attr_fn
integer, intent(out) :: type_keyval
integer(kind=MPI_ADDRESS_KIND), intent(in) :: extra_state
integer, intent(out) :: ierr
end subroutine MPI_Type_create_keyval
end interface
interface MPI_Type_create_resized
subroutine MPI_Type_create_resized(oldtype, lb, extent, newtype, ierr)
include 'mpif-config.h'
integer, intent(in) :: oldtype
integer(kind=MPI_ADDRESS_KIND), intent(in) :: lb
integer(kind=MPI_ADDRESS_KIND), intent(in) :: extent
integer, intent(out) :: newtype
integer, intent(out) :: ierr
end subroutine MPI_Type_create_resized
end interface
interface MPI_Type_create_struct
subroutine MPI_Type_create_struct(count, array_of_block_lengths, array_of_displacements, array_of_types, newtype&
, ierr)
include 'mpif-config.h'
integer, intent(in) :: count
integer, dimension(*), intent(in) :: array_of_block_lengths
integer(kind=MPI_ADDRESS_KIND), dimension(*), intent(in) :: array_of_displacements
integer, dimension(*), intent(in) :: array_of_types
integer, intent(out) :: newtype
integer, intent(out) :: ierr
end subroutine MPI_Type_create_struct
end interface
interface MPI_Type_create_subarray
subroutine MPI_Type_create_subarray(ndims, size_array, subsize_array, start_array, order, &
oldtype, newtype, ierr)
integer, intent(in) :: ndims
integer, dimension(*), intent(in) :: size_array
integer, dimension(*), intent(in) :: subsize_array
integer, dimension(*), intent(in) :: start_array
integer, intent(in) :: order
integer, intent(in) :: oldtype
integer, intent(out) :: newtype
integer, intent(out) :: ierr
end subroutine MPI_Type_create_subarray
end interface
interface MPI_Type_delete_attr
subroutine MPI_Type_delete_attr(type, type_keyval, ierr)
integer, intent(in) :: type
integer, intent(in) :: type_keyval
integer, intent(out) :: ierr
end subroutine MPI_Type_delete_attr
end interface
interface MPI_Type_dup
subroutine MPI_Type_dup(type, newtype, ierr)
integer, intent(in) :: type
integer, intent(out) :: newtype
integer, intent(out) :: ierr
end subroutine MPI_Type_dup
end interface
interface MPI_Type_extent
subroutine MPI_Type_extent(type, extent, ierr)
integer, intent(in) :: type
integer, intent(out) :: extent
integer, intent(out) :: ierr
end subroutine MPI_Type_extent
end interface
interface MPI_Type_free
subroutine MPI_Type_free(type, ierr)
integer, intent(inout) :: type
integer, intent(out) :: ierr
end subroutine MPI_Type_free
end interface
interface MPI_Type_free_keyval
subroutine MPI_Type_free_keyval(type_keyval, ierr)
integer, intent(inout) :: type_keyval
integer, intent(out) :: ierr
end subroutine MPI_Type_free_keyval
end interface
interface MPI_Type_get_attr
subroutine MPI_Type_get_attr(type, type_keyval, attribute_val, flag, ierr)
include 'mpif-config.h'
integer, intent(in) :: type
integer, intent(in) :: type_keyval
integer(kind=MPI_ADDRESS_KIND), intent(out) :: attribute_val
logical, intent(out) :: flag
integer, intent(out) :: ierr
end subroutine MPI_Type_get_attr
end interface
interface MPI_Type_get_contents
subroutine MPI_Type_get_contents(mtype, max_integers, max_addresses, max_datatypes, array_of_integers, &
array_of_addresses, array_of_datatypes, ierr)
include 'mpif-config.h'
integer, intent(in) :: mtype
integer, intent(in) :: max_integers
integer, intent(in) :: max_addresses
integer, intent(in) :: max_datatypes
integer, dimension(*), intent(out) :: array_of_integers
integer(kind=MPI_ADDRESS_KIND), dimension(*), intent(out) :: array_of_addresses
integer, dimension(*), intent(out) :: array_of_datatypes
integer, intent(out) :: ierr
end subroutine MPI_Type_get_contents
end interface
interface MPI_Type_get_envelope
subroutine MPI_Type_get_envelope(type, num_integers, num_addresses, num_datatypes, combiner&
, ierr)
integer, intent(in) :: type
integer, intent(out) :: num_integers
integer, intent(out) :: num_addresses
integer, intent(out) :: num_datatypes
integer, intent(out) :: combiner
integer, intent(out) :: ierr
end subroutine MPI_Type_get_envelope
end interface
interface MPI_Type_get_extent
subroutine MPI_Type_get_extent(type, lb, extent, ierr)
include 'mpif-config.h'
integer, intent(in) :: type
integer(kind=MPI_ADDRESS_KIND), intent(out) :: lb
integer(kind=MPI_ADDRESS_KIND), intent(out) :: extent
integer, intent(out) :: ierr
end subroutine MPI_Type_get_extent
end interface
interface MPI_Type_get_name
subroutine MPI_Type_get_name(type, type_name, resultlen, ierr)
integer, intent(in) :: type
character(len=*), intent(out) :: type_name
integer, intent(out) :: resultlen
integer, intent(out) :: ierr
end subroutine MPI_Type_get_name
end interface
interface MPI_Type_get_true_extent
subroutine MPI_Type_get_true_extent(datatype, true_lb, true_extent, ierr)
include 'mpif-config.h'
integer, intent(in) :: datatype
integer(kind=MPI_ADDRESS_KIND), intent(out) :: true_lb
integer(kind=MPI_ADDRESS_KIND), intent(out) :: true_extent
integer, intent(out) :: ierr
end subroutine MPI_Type_get_true_extent
end interface
interface MPI_Type_hindexed
subroutine MPI_Type_hindexed(count, array_of_blocklengths, array_of_displacements, oldtype, newtype&
, ierr)
integer, intent(in) :: count
integer, dimension(*), intent(in) :: array_of_blocklengths
integer, dimension(*), intent(in) :: array_of_displacements
integer, intent(in) :: oldtype
integer, intent(out) :: newtype
integer, intent(out) :: ierr
end subroutine MPI_Type_hindexed
end interface
interface MPI_Type_hvector
subroutine MPI_Type_hvector(count, blocklength, stride, oldtype, newtype&
, ierr)
integer, intent(in) :: count
integer, intent(in) :: blocklength
integer, intent(in) :: stride
integer, intent(in) :: oldtype
integer, intent(out) :: newtype
integer, intent(out) :: ierr
end subroutine MPI_Type_hvector
end interface
interface MPI_Type_indexed
subroutine MPI_Type_indexed(count, array_of_blocklengths, array_of_displacements, oldtype, newtype&
, ierr)
integer, intent(in) :: count
integer, dimension(*), intent(in) :: array_of_blocklengths
integer, dimension(*), intent(in) :: array_of_displacements
integer, intent(in) :: oldtype
integer, intent(out) :: newtype
integer, intent(out) :: ierr
end subroutine MPI_Type_indexed
end interface
interface MPI_Type_lb
subroutine MPI_Type_lb(type, lb, ierr)
integer, intent(in) :: type
integer, intent(out) :: lb
integer, intent(out) :: ierr
end subroutine MPI_Type_lb
end interface
interface MPI_Type_match_size
subroutine MPI_Type_match_size(typeclass, size, type, ierr)
integer, intent(in) :: typeclass
integer, intent(in) :: size
integer, intent(out) :: type
integer, intent(out) :: ierr
end subroutine MPI_Type_match_size
end interface
interface MPI_Type_set_attr
subroutine MPI_Type_set_attr(type, type_keyval, attr_val, ierr)
include 'mpif-config.h'
integer, intent(in) :: type
integer, intent(in) :: type_keyval
integer(kind=MPI_ADDRESS_KIND), intent(in) :: attr_val
integer, intent(out) :: ierr
end subroutine MPI_Type_set_attr
end interface
interface MPI_Type_set_name
subroutine MPI_Type_set_name(type, type_name, ierr)
integer, intent(in) :: type
character(len=*), intent(in) :: type_name
integer, intent(out) :: ierr
end subroutine MPI_Type_set_name
end interface
interface MPI_Type_size
subroutine MPI_Type_size(type, size, ierr)
integer, intent(in) :: type
integer, intent(out) :: size
integer, intent(out) :: ierr
end subroutine MPI_Type_size
end interface
interface MPI_Type_struct
subroutine MPI_Type_struct(count, array_of_blocklengths, array_of_displacements, array_of_types, newtype&
, ierr)
integer, intent(in) :: count
integer, dimension(*), intent(in) :: array_of_blocklengths
integer, dimension(*), intent(in) :: array_of_displacements
integer, dimension(*), intent(in) :: array_of_types
integer, intent(out) :: newtype
integer, intent(out) :: ierr
end subroutine MPI_Type_struct
end interface
interface MPI_Type_ub
subroutine MPI_Type_ub(mtype, ub, ierr)
integer, intent(in) :: mtype
integer, intent(out) :: ub
integer, intent(out) :: ierr
end subroutine MPI_Type_ub
end interface
interface MPI_Type_vector
subroutine MPI_Type_vector(count, blocklength, stride, oldtype, newtype&
, ierr)
integer, intent(in) :: count
integer, intent(in) :: blocklength
integer, intent(in) :: stride
integer, intent(in) :: oldtype
integer, intent(out) :: newtype
integer, intent(out) :: ierr
end subroutine MPI_Type_vector
end interface
interface MPI_Unpack
subroutine MPI_Unpack(inbuf, insize, position, outbuf, outcount, &
datatype, comm, ierr)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ inbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: inbuf
integer, intent(in) :: insize
integer, intent(inout) :: position
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ outbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: outbuf
integer, intent(in) :: outcount
integer, intent(in) :: datatype
integer, intent(in) :: comm
integer, intent(out) :: ierr
end subroutine MPI_Unpack
end interface
interface MPI_Unpack_external
subroutine MPI_Unpack_external(datarep, inbuf, insize, position, outbuf, &
outcount, datatype, ierr)
include 'mpif-config.h'
character(len=*), intent(in) :: datarep
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ inbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: inbuf
integer(kind=MPI_ADDRESS_KIND), intent(in) :: insize
integer(kind=MPI_ADDRESS_KIND), intent(inout) :: position
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ outbuf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@ :: outbuf
integer, intent(in) :: outcount
integer, intent(in) :: datatype
integer, intent(out) :: ierr
end subroutine MPI_Unpack_external
end interface
interface MPI_Unpublish_name
subroutine MPI_Unpublish_name(service_name, info, port_name, ierr)
character(len=*), intent(in) :: service_name
integer, intent(in) :: info
character(len=*), intent(in) :: port_name
integer, intent(out) :: ierr
end subroutine MPI_Unpublish_name
end interface
interface MPI_Wait
subroutine MPI_Wait(request, status, ierr)
include 'mpif-config.h'
integer, intent(inout) :: request
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
integer, intent(out) :: ierr
end subroutine MPI_Wait
end interface
interface MPI_Waitall
subroutine MPI_WaitallS(count, array_of_requests, array_of_statuses, ierr)
include 'mpif-config.h'
integer, intent(in) :: count
integer, dimension(count), intent(inout) :: array_of_requests
integer, dimension(MPI_STATUS_SIZE, count), intent(out) :: array_of_statuses
integer, intent(out) :: ierr
end subroutine MPI_WaitallS
subroutine MPI_WaitallI(count, array_of_requests, array_of_statuses, ierr)
include 'mpif-config.h'
integer, intent(in) :: count
integer, dimension(count), intent(inout) :: array_of_requests
double precision, intent(out) :: array_of_statuses
integer, intent(out) :: ierr
end subroutine MPI_WaitallI
end interface
interface MPI_Waitany
subroutine MPI_Waitany(count, array_of_requests, index, status, ierr)
include 'mpif-config.h'
integer, intent(in) :: count
integer, dimension(count), intent(inout) :: array_of_requests
integer, intent(out) :: index
integer, dimension(MPI_STATUS_SIZE), intent(out) :: status
integer, intent(out) :: ierr
end subroutine MPI_Waitany
end interface
interface MPI_Waitsome
subroutine MPI_WaitsomeS(incount, array_of_requests, outcount, array_of_indices, array_of_statuses&
, ierr)
include 'mpif-config.h'
integer, intent(in) :: incount
integer, dimension(incount), intent(inout) :: array_of_requests
integer, intent(out) :: outcount
integer, dimension(*), intent(out) :: array_of_indices
integer, dimension(MPI_STATUS_SIZE, incount), intent(out) :: array_of_statuses
integer, intent(out) :: ierr
end subroutine MPI_WaitsomeS
subroutine MPI_WaitsomeI(incount, array_of_requests, outcount, array_of_indices, array_of_statuses&
, ierr)
include 'mpif-config.h'
integer, intent(in) :: incount
integer, dimension(incount), intent(inout) :: array_of_requests
integer, intent(out) :: outcount
integer, dimension(*), intent(out) :: array_of_indices
double precision, intent(out) :: array_of_statuses
integer, intent(out) :: ierr
end subroutine MPI_WaitsomeI
end interface
interface MPI_Win_call_errhandler
subroutine MPI_Win_call_errhandler(win, errorcode, ierr)
integer, intent(in) :: win
integer, intent(in) :: errorcode
integer, intent(out) :: ierr
end subroutine MPI_Win_call_errhandler
end interface
interface MPI_Win_complete
subroutine MPI_Win_complete(win, ierr)
integer, intent(in) :: win
integer, intent(out) :: ierr
end subroutine MPI_Win_complete
end interface
interface MPI_Win_create
subroutine MPI_Win_create(base, size, disp_unit, info, comm, &
win, ierr)
include 'mpif-config.h'
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ base
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: base
integer(kind=MPI_ADDRESS_KIND), intent(in) :: size
integer, intent(in) :: disp_unit
integer, intent(in) :: info
integer, intent(in) :: comm
integer, intent(out) :: win
integer, intent(out) :: ierr
end subroutine MPI_Win_create
end interface
interface MPI_Win_create_errhandler
subroutine MPI_Win_create_errhandler(function, errhandler, ierr)
external :: function
integer, intent(out) :: errhandler
integer, intent(out) :: ierr
end subroutine MPI_Win_create_errhandler
end interface
interface MPI_Win_create_keyval
subroutine MPI_Win_create_keyval(win_copy_attr_fn, win_delete_attr_fn, win_keyval, extra_state, ierr)
include 'mpif-config.h'
external :: win_copy_attr_fn
external :: win_delete_attr_fn
integer, intent(out) :: win_keyval
integer(kind=MPI_ADDRESS_KIND), intent(in) :: extra_state
integer, intent(out) :: ierr
end subroutine MPI_Win_create_keyval
end interface
interface MPI_Win_delete_attr
subroutine MPI_Win_delete_attr(win, win_keyval, ierr)
integer, intent(in) :: win
integer, intent(in) :: win_keyval
integer, intent(out) :: ierr
end subroutine MPI_Win_delete_attr
end interface
interface MPI_Win_fence
subroutine MPI_Win_fence(assert, win, ierr)
integer, intent(in) :: assert
integer, intent(in) :: win
integer, intent(out) :: ierr
end subroutine MPI_Win_fence
end interface
interface MPI_Win_free
subroutine MPI_Win_free(win, ierr)
integer, intent(inout) :: win
integer, intent(out) :: ierr
end subroutine MPI_Win_free
end interface
interface MPI_Win_free_keyval
subroutine MPI_Win_free_keyval(win_keyval, ierr)
integer, intent(inout) :: win_keyval
integer, intent(out) :: ierr
end subroutine MPI_Win_free_keyval
end interface
interface MPI_Win_get_attr
subroutine MPI_Win_get_attr(win, win_keyval, attribute_val, flag, ierr)
include 'mpif-config.h'
integer, intent(in) :: win
integer, intent(in) :: win_keyval
integer(kind=MPI_ADDRESS_KIND), intent(out) :: attribute_val
logical, intent(out) :: flag
integer, intent(out) :: ierr
end subroutine MPI_Win_get_attr
end interface
interface MPI_Win_get_errhandler
subroutine MPI_Win_get_errhandler(win, errhandler, ierr)
integer, intent(in) :: win
integer, intent(out) :: errhandler
integer, intent(out) :: ierr
end subroutine MPI_Win_get_errhandler
end interface
interface MPI_Win_get_group
subroutine MPI_Win_get_group(win, group, ierr)
integer, intent(in) :: win
integer, intent(out) :: group
integer, intent(out) :: ierr
end subroutine MPI_Win_get_group
end interface
interface MPI_Win_get_name
subroutine MPI_Win_get_name(win, win_name, resultlen, ierr)
integer, intent(in) :: win
character(len=*), intent(out) :: win_name
integer, intent(out) :: resultlen
integer, intent(out) :: ierr
end subroutine MPI_Win_get_name
end interface
interface MPI_Win_lock
subroutine MPI_Win_lock(lock_type, rank, assert, win, ierr)
integer, intent(in) :: lock_type
integer, intent(in) :: rank
integer, intent(in) :: assert
integer, intent(in) :: win
integer, intent(out) :: ierr
end subroutine MPI_Win_lock
end interface
interface MPI_Win_post
subroutine MPI_Win_post(group, assert, win, ierr)
integer, intent(in) :: group
integer, intent(in) :: assert
integer, intent(in) :: win
integer, intent(out) :: ierr
end subroutine MPI_Win_post
end interface
interface MPI_Win_set_attr
subroutine MPI_Win_set_attr(win, win_keyval, attribute_val, ierr)
include 'mpif-config.h'
integer, intent(in) :: win
integer, intent(in) :: win_keyval
integer(kind=MPI_ADDRESS_KIND), intent(in) :: attribute_val
integer, intent(out) :: ierr
end subroutine MPI_Win_set_attr
end interface
interface MPI_Win_set_errhandler
subroutine MPI_Win_set_errhandler(win, errhandler, ierr)
integer, intent(in) :: win
integer, intent(in) :: errhandler
integer, intent(out) :: ierr
end subroutine MPI_Win_set_errhandler
end interface
interface MPI_Win_set_name
subroutine MPI_Win_set_name(win, win_name, ierr)
integer, intent(in) :: win
character(len=*), intent(in) :: win_name
integer, intent(out) :: ierr
end subroutine MPI_Win_set_name
end interface
interface MPI_Win_start
subroutine MPI_Win_start(group, assert, win, ierr)
integer, intent(in) :: group
integer, intent(in) :: assert
integer, intent(in) :: win
integer, intent(out) :: ierr
end subroutine MPI_Win_start
end interface
interface MPI_Win_test
subroutine MPI_Win_test(win, flag, ierr)
integer, intent(in) :: win
logical, intent(out) :: flag
integer, intent(out) :: ierr
end subroutine MPI_Win_test
end interface
interface MPI_Win_unlock
subroutine MPI_Win_unlock(rank, win, ierr)
integer, intent(in) :: rank
integer, intent(in) :: win
integer, intent(out) :: ierr
end subroutine MPI_Win_unlock
end interface
interface MPI_Win_wait
subroutine MPI_Win_wait(win, ierr)
integer, intent(in) :: win
integer, intent(out) :: ierr
end subroutine MPI_Win_wait
end interface
interface MPI_Wtick
function MPI_Wtick()
double precision MPI_Wtick
end function MPI_Wtick
end interface
interface MPI_Wtime
function MPI_Wtime()
double precision MPI_Wtime
end function MPI_Wtime
end interface