[petsc-dev] type(*) not supported by multiple test fortran compilers we use
Jed Brown
jed at jedbrown.org
Sun Oct 29 14:17:45 CDT 2017
"Smith, Barry F." <bsmith at mcs.anl.gov> writes:
>> On Oct 26, 2017, at 7:55 AM, Jed Brown <jed at jedbrown.org> wrote:
>>
>> Which compilers don't work?
>
> Your time is no more valuable than anyone else's. You can see the failed red lines at
>
> ftp://ftp.mcs.anl.gov/pub/petsc/nightlylogs/archive/2017/10/29/next.html
>
> and click through to see the failures and compiler specifics. There are six red lines.
I asked the question because you must have clicked through those six
cases to determine that this was the cause, thus had the information at
your fingertips. Now I have dug around and found that PGI, Absoft, and
SunStudio are choking on type(*).
The Open MPI README says
- Absoft 11.5.2 plus a service pack from September 2012 (which Absoft
says is available upon request), or a version later than 11.5.2
(e.g., 11.5.3), is required to compile the Fortran mpi_f08
module.
I see that we're using Absoft 11.0, released in 2009. Any chance we
could upgrade?
SunStudio 12.1 was released in 2009. I don't know if current versions
support TS 29113.
PGI seems like the most significant deficiency. I confirmed that Open
MPI builds the mpi_f08 module using the pgfortran that is installed on
grind. I also found these autoconf tests in the Open MPI source.
# Vendor-neutral, TYPE(*) syntax
OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
[!], [type(*)],
[TYPE(*), DIMENSION(*)],
[happy=1], [happy=0])
# GCC compilers
AS_IF([test $happy -eq 0],
[OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
[!GCC\$ ATTRIBUTES NO_ARG_CHECK ::], [type(*), dimension(*)],
[!GCC\$ ATTRIBUTES NO_ARG_CHECK],
[happy=1], [happy=0])])
# Intel compilers
AS_IF([test $happy -eq 0],
[OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
[!DEC\$ ATTRIBUTES NO_ARG_CHECK ::], [real, dimension(*)],
[!DEC\$ ATTRIBUTES NO_ARG_CHECK],
[happy=1], [happy=0])])
# Solaris Studio compilers
# Note that due to a compiler bug, we have been advised by Oracle to
# use the "character(*)" type
AS_IF([test $happy -eq 0],
[OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
[!\$PRAGMA IGNORE_TKR], [character(*)],
[!\$PRAGMA IGNORE_TKR],
[happy=1], [happy=0])])
# Cray compilers
AS_IF([test $happy -eq 0],
[OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
[!DIR\$ IGNORE_TKR], [real, dimension(*)],
[!DIR\$ IGNORE_TKR],
[happy=1], [happy=0])])
# IBM compilers
AS_IF([test $happy -eq 0],
[OMPI_FORTRAN_CHECK_IGNORE_TKR_SUB(
[!IBM* IGNORE_TKR], [real, dimension(*)],
[!IBM* IGNORE_TKR],
[happy=1], [happy=0])])
The "Cray" one is used by PGI, so they use the syntax
!DIR$ IGNORE_TKR a
real :: a
in place of the TS29113/Fortran2015 version
type(*) :: a
I confirmed that this works in a stand-alone test. Their interfaces are
written like this (before preprocessing).
subroutine MPI_Send(buf, count, datatype, dest, tag, &
comm, ierror)
@OMPI_FORTRAN_IGNORE_TKR_PREDECL@ buf
@OMPI_FORTRAN_IGNORE_TKR_TYPE@, intent(in) :: buf
integer, intent(in) :: count
integer, intent(in) :: datatype
integer, intent(in) :: dest
integer, intent(in) :: tag
integer, intent(in) :: comm
integer, intent(out) :: ierror
end subroutine MPI_Send
More information about the petsc-dev
mailing list