Support for mpi_f08
climbfuji opened this issue · 2 comments
Is your feature request related to a problem? Please describe.
At JCSDA, we are seeing that our partners developing the Unified Forecast System (NOAA; UFS), NEPTUNE (NAVY), and others are moving away from the MPI F90 implementation to the MPI F08 implementation. As far as I understand, fckit
doesn't support that yet. Interfaces that convert the old MPI communicator used in fckit
(an integer) to the new MPI communicator (type(MPI_comm)
) need to be put in place.
Is there are plan to move away from the old MPI F90 implementation, or to support both in fckit
?
Describe the solution you'd like
The MPI F08 implementation has many advantages, one being that it provides interfaces for all Fortran/MPI data types. This means one can compile MPI codes with gfortran-10+
without having to add -fallow-argument-mismatch
, which can cover up real argument mismatches that one would like to detect.
Describe alternatives you've considered
No response
Additional context
No response
Organisation
JCSDA
Hello @climbfuji , in fact fckit does not use any Fortran MPI interface. It is using the MPI C library via eckit, and creates wrappers around it.
However, there is indeed a mechanism to interoperate with Fortran MPI calls via the (older) Fortran integer as a handle. Internally in eckit this would then use functions MPI_Comm_c2f
and MPI_Comm_f2c
.
In Fortran you could jump between mpi_f08 type(MPI_Comm) :: comm
and mpi INTEGER :: comm
as follows:
type(MPI_Comm) :: mpi_f08_comm
integer :: comm
mpi_f08_comm%mpi_val = comm
or vice versa:
type(MPI_Comm) :: mpi_f08_comm
integer :: comm
comm = mpi_f08_comm%mpi_val
In summary there is no need to change anything in fckit as it does not expose any Fortran MPI types or routines directly.
Thanks for the insight @wdeconinck. I'll close this issue since there's no need to change anything.