Granted, an error, not a clarification.  Does any implementation do this now (define Type_status in mpif.h/mpi module)? If not, it is easier to consider this an error.

Bill

William Gropp
Director and Chief Scientist, NCSA
Thomas M. Siebel Chair in Computer Science
University of Illinois Urbana-Champaign






On Jul 10, 2020, at 8:39 AM, Jeff Squyres (jsquyres) <jsquyres@cisco.com> wrote:

Gah.  Closer reading shows that MPI-3.1 page 658 actually has mpif.h/mpi module bindings for MPI_Status_f2f08 and _f082f that include TYPE(MPI_Status) dummy parameters.

So the standard text actually strongly infers that TYPE(MPI_Status) is supposed to be defined in mpif.h and the mpi module.

Granted, a user *could* do something like this, but I can't believe that this is what we intended users to do:

-----
! This is super ugly IMNSHO
use :: mpi_f08, only : MPI_Status
implicit none
include 'mpif.h'
-----

Do we really want to change the spec to state that the _f2f08 and _f082f subroutines are only available in the mpi_f08 module?

I think that that would be a *change*, not a *clarification*.

That being said, we might be able to squint at this and call it an "error" in MPI-3.1.  

But *that* being said, it's *not* actually a technical error.  It's just that we seemed to have missed the implication back then that TYPE(MPI_Status) would need to be defined in mpif.h and the mpi module.  That's not a technical *problem* -- it's just a little weird.




On Jul 10, 2020, at 8:49 AM, William Gropp <wgropp@illinois.edu> wrote:

That certainly was not my understanding - I expected that these would be defined only for F08, allowing code in F08 to move status data to/from the integer status array for the prior Fortran bindings. I am in favor of clarifying the standard to make this clear.

Bill

William Gropp
Director and Chief Scientist, NCSA
Thomas M. Siebel Chair in Computer Science
University of Illinois Urbana-Champaign






On Jul 9, 2020, at 7:54 PM, Jeff Squyres (jsquyres) via mpiwg-fortran <mpiwg-fortran@lists.mpi-forum.org> wrote:

MPI-3.1 Figure 17.1 (in section 17.2.5, starting on page 656) defines the following routines:

1. MPI_Status_c2f() (from MPI-2)
2. MPI_Status_f2c() (from MPI-2)
3. MPI_Status_c2f08() (new in MPI-3)
4. MPI_Status_f082c() (new in MPI-3)
5. MPI_Status_f2f08() (new in MPI-3)
6. MPI_Status_f082f() (new in MPI-3)

All of the functions are fairly straightforward to implement in C.

But per the bottom part of Figure 17.1, two of the routines are supposed to be implemented in Fortran: #5 and #6.

Does this mean that TYPE(MPI_Status) needs to be defined in mpif.h and the mpi module?

I'm not sure how an MPI application would be able to invoke functions #5 and #6 without a definition of TYPE(MPI_Status) -- or even have a variable of that type that they need to convert to INTEGER(MPI_STATUS_SIZE).

--
Jeff Squyres
jsquyres@cisco.com

_______________________________________________
mpiwg-fortran mailing list
mpiwg-fortran@lists.mpi-forum.org
https://lists.mpi-forum.org/mailman/listinfo/mpiwg-fortran



--
Jeff Squyres
jsquyres@cisco.com