[MPIWG Fortran] An implementation problem of F08 binding

Jeff Squyres (jsquyres) jsquyres at cisco.com
Thu May 1 14:51:43 CDT 2014

On May 1, 2014, at 2:34 PM, Junchao Zhang <jczhang at mcs.anl.gov> wrote:

> 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.

Maybe Tobias, CC'ed, can shed light on why this is...

> 2) The wrapper is not in a module, which eliminates many of the advantages of using modern Fortran.

Can you explain what you mean by this?  There's still lots of advantages for using modern Fortran...

Jeff Squyres
jsquyres at cisco.com
For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/

More information about the mpiwg-fortran mailing list