> On 24 Oct 2017, at 06:21, Barry Smith <[email protected]> wrote:
> 
>>>> - With PetscSFBcastBegin() / PetscSFBcastEnd() you currently still have to 
>>>> use the C MPI types in the Fortran calling code, rather than the Fortran 
>>>> ones. I think it is a bit confusing to have to mix the two up in the same 
>>>> code. If you put MPI_INTEGER instead of MPI_INT for example, it dies in 
>>>> F90Array1dAccess() with 'unsupported MPI_Datatype'. Could the Fortran MPI 
>>>> types be supported in these routines just by adding them as alternatives 
>>>> into the conditionals?
>>>  Hmm, Jed will need to provide wisdom the Linux manual page for MPI_INTEGER 
>>> clearly states:
>>> 
>>> Note that the Fortran types should only be used in Fortran programs, and 
>>> the C types should only be used in C programs. For example, it is in error 
>>> to use MPI_INT for a Fortran INTEGER. Datatypes are of type MPI_Datatype in 
>>> C and of type INTEGER in Fortran.
>>> 
>>>  If this is true then there is no place we can do the change properly.
>> 
>> Yes, I first thought that MPI_Type_f2c() would convert Fortran MPI datatypes 
>> to the C ones (e.g. turn MPI_INTEGER into MPI_INT), so that the C side of 
>> the interface wouldn't have to worry about the Fortran MPI datatypes, but it 
>> doesn't really seem to do that.
> 
>  Do did I. Its existence seems to contradict the statement in the Linux 
> manual page. Well wait for Jed.

A fortran INTEGER may have a different width to a C int.  Hence the 
distinction.  The MPI_XXX_f2c functions convert handles on the fortran side to 
handles on the C side (MPI_XXX_c2f does the opposite).  Perhaps the standard 
sheds some light:

Moving handles from Fortran to C

http://mpi-forum.org/docs/mpi-3.1/mpi31-report/node446.htm#Node446

Interlanguage communication

http://mpi-forum.org/docs/mpi-3.1/mpi31-report/node456.htm#Node456

Lawrence

Reply via email to