2006-05-20 06:15:49 +04:00
|
|
|
! -*- fortran -*-
|
|
|
|
!
|
|
|
|
! Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana
|
|
|
|
! University Research and Technology
|
|
|
|
! Corporation. All rights reserved.
|
|
|
|
! Copyright (c) 2004-2005 The University of Tennessee and The University
|
|
|
|
! of Tennessee Research Foundation. All rights
|
|
|
|
! reserved.
|
2009-05-27 16:46:04 +04:00
|
|
|
! Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
2006-05-20 06:15:49 +04:00
|
|
|
! University of Stuttgart. All rights reserved.
|
|
|
|
! Copyright (c) 2004-2005 The Regents of the University of California.
|
|
|
|
! All rights reserved.
|
Fortran: Fix MPI_SIZEOF. What a disaster. :-(
What started as a simple ticket ended up reaching the way up to the
MPI Forum.
It turns out that we are supposed to have MPI_SIZEOF for all Fortran
interfaces: mpif.h, the mpi module, and the mpi_f08 module.
It further turns out that to properly support MPI_SIZEOF, your Fortran
compiler *has* support the INTERFACE keyword and ISO_FORTRAN_ENV. We
can't use "ignore TKR" functionality, because the whole point of
MPI_SIZEOF is that the implementation knows what type was passed to it
("ignore TKR" functionality, by definition, throws that information
away). Hence, we have to have an MPI_SIZEOF interface+implementation
for all intrinsic types, kinds, and ranks.
This commit therefore adds a perl script that generates both the
interfaces and implementations for MPI_SIZEOF in each of mpif.h, the
mpi module, and mpi_f08 module (yay consolidation!).
The perl script uses the results of some new configure tests:
* check if the Fortran compiler supports the INTERFACE keyword
* check if the Fortran compiler supports ISO_FORTRAN_ENV
* find the max array rank (i.e., dimension) that the compiler supports
If the Fortran compiler supports both INTERFACE and ISO_FORTRAN_ENV,
then we'll build the MPI_SIZEOF interfaces. If not, we'll skip
MPI_SIZEOF in mpif.h and the mpi module. Note that we won't build the
mpi_f08 module -- to include the MPI_SIZEOF interfaces -- if the
Fortran compiler doesn't support INTERFACE, ISO_FORTRAN_ENV, and a
whole bunch of ther modern Fortran stuff.
Since MPI_SIZEOF interfaces are now generated by the perl script, this
commit also removes all the old MPI_SIZEOF implementations (which were
laden with a zillion #if blocks).
cmr=v1.8.3
This commit was SVN r32764.
2014-09-19 17:44:52 +04:00
|
|
|
! Copyright (c) 2006-2014 Cisco Systems, Inc. All rights reserved.
|
2006-05-20 06:15:49 +04:00
|
|
|
! $COPYRIGHT$
|
2009-05-27 16:46:04 +04:00
|
|
|
!
|
2006-05-20 06:15:49 +04:00
|
|
|
! Additional copyrights may follow
|
2009-05-27 16:46:04 +04:00
|
|
|
!
|
2006-05-20 06:15:49 +04:00
|
|
|
! $HEADER$
|
|
|
|
!
|
|
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
2009-05-27 16:46:04 +04:00
|
|
|
! WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
2006-05-20 06:15:49 +04:00
|
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
!
|
2009-05-27 16:46:04 +04:00
|
|
|
! Do ***not*** copy this file to the directory where your Fortran
|
2006-05-20 06:15:49 +04:00
|
|
|
! fortran application is compiled unless it is absolutely necessary! Most
|
|
|
|
! modern Fortran compilers now support the -I command line flag, which
|
|
|
|
! tells the compiler where to find .h files (specifically, this one). For
|
|
|
|
! example:
|
|
|
|
!
|
2012-04-27 05:09:37 +04:00
|
|
|
! shell$ mpifort foo.f -o foo -I$OMPI_HOME/include
|
2006-05-20 06:15:49 +04:00
|
|
|
!
|
2009-05-27 16:46:04 +04:00
|
|
|
! will probably do the trick (assuming that you have set OMPI_HOME
|
2006-05-20 06:15:49 +04:00
|
|
|
! properly).
|
|
|
|
!
|
2012-04-27 05:09:37 +04:00
|
|
|
! That being said, OMPI's "mpifort" wrapper compiler should
|
2006-05-20 06:15:49 +04:00
|
|
|
! automatically include the -I option for you. The following command
|
|
|
|
! should be equivalent to the command listed above:
|
|
|
|
!
|
2012-04-27 05:09:37 +04:00
|
|
|
! shell$ mpifort foo.f -o foo
|
2006-05-20 06:15:49 +04:00
|
|
|
!
|
|
|
|
! You should not copy this file to your local directory because it is
|
|
|
|
! possible that this file will be changed between versions of Open MPI.
|
2009-05-27 16:46:04 +04:00
|
|
|
! Indeed, this mpif.h is incompatible with the mpif.f of other
|
|
|
|
! implementations of MPI. Using this mpif.h with other implementations
|
2006-05-20 06:15:49 +04:00
|
|
|
! of MPI, or with other versions of Open MPI will result in undefined
|
2009-05-27 16:46:04 +04:00
|
|
|
! behavior (to include incorrect results, segmentation faults,
|
2006-05-20 06:15:49 +04:00
|
|
|
! unexplainable "hanging" in your application, etc.). Always use the
|
2012-04-27 05:09:37 +04:00
|
|
|
! -I command line option instead (or let mpifort do it for you).
|
2006-05-20 06:15:49 +04:00
|
|
|
!
|
|
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
2009-05-27 16:46:04 +04:00
|
|
|
! WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
2006-05-20 06:15:49 +04:00
|
|
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
|
Many updates and bug fixes for the Fortran bindings. Sorry these
aren't separated out into individual commits; they represent a few
months of work in the Mercurial branch, and it seemed error-prone to
try to break them up into multiple SVN commits.
* Remove 2nd overloaded interfaces for MPI_TESTALL, MPI_TESTSOME,
MPI_WAITALL, and MPI_WAITSOME in the "mpi" module implementations
(because we're not allowed to have them, anyway -- it causes
complications in the profiling interface). This forced an MPI-2.2
errata in the MPI Forum; we applied the errata here (the array of
statuses parameter could not have a specific dimension specified in
the dummy argument). Fixes trac:3166.
* Similarly, fix type for MPI_ARGVS_NULL in Fortran
* Add MPI_3.0 function MPI_F_SYNC_REG (Fortran interfaces only).
* Add MPI-3.0 MPI_MESSAGE_NO_PROC in the mpi_f08 module.
* Added mpi_f08 handle comparison operators, per MPI-3.0 addendum to
the F08 proposal at the last Forum meeting.
* Added missing type(MPI_File) and type(Message) in mpi_f08 module.
* Fix --disable-mpi-io configure switch with all Fortran interfaces
* Re-factor the Fortran header files to be fundamentally simpler and
easier to maintain. Fortran constant values in the header files
are now generated by a script named mpif-values.pl during
autogen.pl (they were previously generated by mpif-common.pl, but
it was quite a bit more subtle/complex). A second commit will
follow this one to update svn:ignore values (just to ensure we
don't muck up the first commit with the SVN client getting confused
by the changed ignore values and new/changed files).
* Fix some dependencies for compile ordering in
ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am.
* Fix bad wording in several places (.m4 file name, ompi_info output,
etc.): we previoulsy said "F08 assumed shape" when we really meant
"F08 assumed rank" (for Fortran gurus, those are very different
things).
* Removed the GREEK/SVN version string from mpif.h. It really had no
purpose being there.
Still to be done:
* Handling of 2D array of strings in MPI_COMM_SPAWN_MULTIPLE still
isn't right yet. Not sure how many people really care about this
:-), but it is still broken.
This commit was SVN r26997.
The following Trac tickets were found above:
Ticket 3166 --> https://svn.open-mpi.org/trac/ompi/ticket/3166
2012-08-11 01:19:47 +04:00
|
|
|
include 'mpif-config.h'
|
|
|
|
include 'mpif-constants.h'
|
|
|
|
include 'mpif-handles.h'
|
|
|
|
@OMPI_MPIF_IO_CONSTANTS_INCLUDE@
|
|
|
|
@OMPI_MPIF_IO_HANDLES_INCLUDE@
|
|
|
|
include 'mpif-externals.h'
|
|
|
|
include 'mpif-sentinels.h'
|
Fortran: Fix MPI_SIZEOF. What a disaster. :-(
What started as a simple ticket ended up reaching the way up to the
MPI Forum.
It turns out that we are supposed to have MPI_SIZEOF for all Fortran
interfaces: mpif.h, the mpi module, and the mpi_f08 module.
It further turns out that to properly support MPI_SIZEOF, your Fortran
compiler *has* support the INTERFACE keyword and ISO_FORTRAN_ENV. We
can't use "ignore TKR" functionality, because the whole point of
MPI_SIZEOF is that the implementation knows what type was passed to it
("ignore TKR" functionality, by definition, throws that information
away). Hence, we have to have an MPI_SIZEOF interface+implementation
for all intrinsic types, kinds, and ranks.
This commit therefore adds a perl script that generates both the
interfaces and implementations for MPI_SIZEOF in each of mpif.h, the
mpi module, and mpi_f08 module (yay consolidation!).
The perl script uses the results of some new configure tests:
* check if the Fortran compiler supports the INTERFACE keyword
* check if the Fortran compiler supports ISO_FORTRAN_ENV
* find the max array rank (i.e., dimension) that the compiler supports
If the Fortran compiler supports both INTERFACE and ISO_FORTRAN_ENV,
then we'll build the MPI_SIZEOF interfaces. If not, we'll skip
MPI_SIZEOF in mpif.h and the mpi module. Note that we won't build the
mpi_f08 module -- to include the MPI_SIZEOF interfaces -- if the
Fortran compiler doesn't support INTERFACE, ISO_FORTRAN_ENV, and a
whole bunch of ther modern Fortran stuff.
Since MPI_SIZEOF interfaces are now generated by the perl script, this
commit also removes all the old MPI_SIZEOF implementations (which were
laden with a zillion #if blocks).
cmr=v1.8.3
This commit was SVN r32764.
2014-09-19 17:44:52 +04:00
|
|
|
include 'mpif-sizeof.h'
|