<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div><br><br>Sent from my iPhone</div><div><br>On May 1, 2014, at 1:34 PM, Junchao Zhang <<a href="mailto:jczhang@mcs.anl.gov">jczhang@mcs.anl.gov</a>> wrote:<br><br></div><blockquote type="cite"><div><div dir="ltr"><div>Hello,</div><div>   I met a problem when implementing F08 binding in MPICH.  I have a file mpi_f08.F90, which contains all interfaces</div><div><br></div><div><div>module mpi_f08</div><div>..</div><div>
<div>interface MPI_Send</div><div>    subroutine MPI_Send_f08ts(buf, count, datatype, dest, tag, comm, ierror)</div><div>        use :: mpi_f08_types, only : MPI_Datatype, MPI_Comm</div><div>        implicit none</div><div>
        type(*), dimension(..), intent(in) :: buf</div><div>        integer, intent(in) :: count, dest, tag</div><div>        type(MPI_Datatype), intent(in) :: datatype</div><div>        type(MPI_Comm), intent(in) :: comm</div>
<div>        integer, optional, intent(out) :: ierror</div><div>    end subroutine MPI_Send_f08ts</div><div>end interface MPI_Send</div></div></div>..<div>end module mpi_f08</div><div><br></div><div>Then for each subroutine, I create a separate file which implement the wrapper function in Fortran.  For example, send_f08ts.F90 has<br>
</div><div><br></div><div><div>subroutine MPI_Send_f08ts(buf, count, datatype, dest, tag, comm, ierror)</div><div>    use :: mpi_f08, only : MPI_Datatype, MPI_Comm</div><div>    use, intrinsic :: iso_c_binding, only : c_int</div>
<div>    use :: mpi_c_interface, only : c_Datatype, c_Comm</div><div>    use :: mpi_c_interface, only : MPIR_Send_cdesc</div><div><br></div><div>    implicit none</div><div>    ..</div><div>end subroutine MPI_Send_f08ts</div>
</div><div><br></div><div>Bill Long pointed out problems of the implementation. 1) When users supply a bad argument to MPI_Send(), the compiler complains "<span style="font-family:arial,sans-serif;font-size:13px">No specific match can be found for the generic subprogram call MPI_SEND</span>", instead of pointing out the offending arg. 2) The wrapper is not in a module, which <span style="font-family:arial,sans-serif;font-size:13px">eliminates many of the advantages of using modern Fortran.</span></div>
<div><span style="font-family:arial,sans-serif;font-size:13px">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. </span></div><div><span style="font-family:arial,sans-serif;font-size:13px">Thank you very much.</span></div>
<div><br></div></div></div></blockquote><div><br></div><div>I recall 2 was very intentional by MPI forum. I'll let others provide details.</div><div><br></div><div>Jeff</div><br><blockquote type="cite"><div><div dir="ltr"><div><div><div dir="ltr">--Junchao Zhang</div></div>
</div></div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>mpiwg-fortran mailing list</span><br><span><a href="mailto:mpiwg-fortran@lists.mpi-forum.org">mpiwg-fortran@lists.mpi-forum.org</a></span><br><span><a href="http://lists.mpi-forum.org/mailman/listinfo.cgi/mpiwg-fortran">http://lists.mpi-forum.org/mailman/listinfo.cgi/mpiwg-fortran</a></span></div></blockquote></body></html>