[MPIWG Fortran] An implementation problem of F08 binding

Junchao Zhang jczhang at mcs.anl.gov
Thu May 1 13:34:00 CDT 2014


Hello,
   I met a problem when implementing F08 binding in MPICH.  I have a file
mpi_f08.F90, which contains all interfaces

module mpi_f08
..
interface MPI_Send
    subroutine MPI_Send_f08ts(buf, count, datatype, dest, tag, comm, ierror)
        use :: mpi_f08_types, only : MPI_Datatype, MPI_Comm
        implicit none
        type(*), dimension(..), intent(in) :: buf
        integer, intent(in) :: count, dest, tag
        type(MPI_Datatype), intent(in) :: datatype
        type(MPI_Comm), intent(in) :: comm
        integer, optional, intent(out) :: ierror
    end subroutine MPI_Send_f08ts
end interface MPI_Send
..
end module mpi_f08

Then for each subroutine, I create a separate file which implement the
wrapper function in Fortran.  For example, send_f08ts.F90 has

subroutine MPI_Send_f08ts(buf, count, datatype, dest, tag, comm, ierror)
    use :: mpi_f08, only : MPI_Datatype, MPI_Comm
    use, intrinsic :: iso_c_binding, only : c_int
    use :: mpi_c_interface, only : c_Datatype, c_Comm
    use :: mpi_c_interface, only : MPIR_Send_cdesc

    implicit none
    ..
end subroutine MPI_Send_f08ts

Bill Long pointed out problems of the implementation. 1) When users supply
a bad argument to MPI_Send(), the compiler complains "No specific match can
be found for the generic subprogram call MPI_SEND", instead of pointing out
the offending arg. 2) The wrapper is not in a module, which eliminates many
of the advantages of using modern Fortran.
I met the first problem in my testing. I was wondering if it is possible to
fix that, so I ask Fortran expert here for advices.
Thank you very much.

--Junchao Zhang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mpi-forum.org/pipermail/mpiwg-fortran/attachments/20140501/5e425c48/attachment.html>


More information about the mpiwg-fortran mailing list