MPAS-Dev / MPAS-Model

Repository for MPAS models and shared framework releases.
239 stars 319 forks source link

Use more mpi_f08 features in mpi_f08_test for better detection of valid mpi_f08 module #1202

Closed islas closed 2 months ago

islas commented 3 months ago

Use more mpi_f08 features in mpi_f08_test for odd cases where certain MPI implementations not compiled with mpi_f08 enabled still pass the current check.

Using OpenMPI 4.0.0 and gfortran 11.4.1 compiling without mpi_f08 features the MPI wrapper will still link and supply mpi_f08 (-lmpi_usempif08) despite not being valid or usable. This causes the use mpi_f08 and some features to compile fine, but other mpi_f08 features to not exist and fail compilation.

mgduda commented 2 months ago

@islas When you configured OpenMPI, did you add a flag to explicitly disable mpi_f08?

islas commented 2 months ago

@mgduda Nope, I used --enable-mpi-fortran. From OpenMPI 4.0.0 :

  --enable-mpi-fortran    specify which Fortran MPI bindings to build: yes,
                          none (or no), best-effort, mpifh (build only mpif.h
                          support), usempi (build mpif.h and the mpi module),
                          or usempif08 (or all, build mpifh, the mpi module,
                          and the mpi_f08 module) (default: "yes" if Fortran
                          compiler found)

Though the mpi_f08 module exists in lib/ it fails to compile with :

gfortran -I/home/aislas/dependencies//openmpi/include -I/home/aislas/dependencies//openmpi/lib -Wl,-rpath -Wl,/home/aislas/dependencies//openmpi/lib -Wl,--enable-new-dtags -L/home/aislas/dependencies//openmpi/lib -lmpi_usempif08 -lmpi_usempi_ignore_tkr -lmpi_mpifh -lmpi -o test_f08 mpi_f08_test.f90 -std=f2008
mpi_f08_test.f90:5:53:

    5 |   type (MPI_Datatype), parameter :: MPI_INTEGERKIND = MPI_INTEGER
      |                                                     1
Error: Parameter ‘mpi_integer’ at (1) has not been declared or is a variable, which does not reduce to a constant expression

Wrapper expanded with -showme and -std=f2008 added to manual compilation of the test program. Given the older version of OpenMPI, it wouldn't surprise me if this is a bug.

Also re-configuring OpenMPI with --enable-mpi-fortran=usempif08 yields the same results.