From 7390ab8a2388780ee68ab305b0500172213a783f Mon Sep 17 00:00:00 2001 From: Jeff Squyres Date: Fri, 10 Aug 2012 21:19:47 +0000 Subject: [PATCH] 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 --- autogen.pl | 9 +- ...e.m4 => fortran_check_f08_assumed_rank.m4} | 18 +- ompi/config/ompi_setup_mpi_fortran.m4 | 12 +- ompi/include/Makefile.am | 28 +- ompi/include/mpif-all-common.h | 336 ------------- ompi/include/mpif-common.h.fin | 388 --------------- ompi/include/mpif-common.pl | 471 ------------------ ompi/include/mpif-config.h.in | 48 +- ompi/include/mpif-externals.h | 44 ++ ompi/include/mpif-sentinels.h | 63 +++ ompi/include/mpif-values.pl | 460 +++++++++++++++++ ompi/include/mpif.h.in | 41 +- ompi/mca/io/configure.m4 | 15 +- ompi/mpi/fortran/base/constants.h | 4 +- .../base/mpi-f08-interfaces-callbacks.F90 | 4 + ompi/mpi/fortran/base/mpi-f08-interfaces.F90 | 28 +- ompi/mpi/fortran/base/mpi-f08-types.F90 | 176 ++++++- ompi/mpi/fortran/base/pmpi-f08-interfaces.F90 | 28 +- .../mpi/fortran/configure-fortran-output.h.in | 3 + ompi/mpi/fortran/mpif-h/Makefile.am | 1 + ompi/mpi/fortran/mpif-h/f_sync_reg_f.c | 73 +++ ompi/mpi/fortran/mpif-h/profile/Makefile.am | 1 + ompi/mpi/fortran/mpif-h/profile/defines.h | 1 + ompi/mpi/fortran/mpif-h/prototypes_mpi.h | 1 + ompi/mpi/fortran/use-mpi-f08/Makefile.am | 2 + ompi/mpi/fortran/use-mpi-f08/constants.c | 7 +- ompi/mpi/fortran/use-mpi-f08/constants.h.fin | 33 -- .../fortran/use-mpi-f08/f_sync_reg_f08.F90 | 18 + .../use-mpi-f08/mpi-f-interfaces-bind.h | 6 + .../use-mpi-f08/pmpi-f-interfaces-bind.h | 6 + .../use-mpi-f08/profile/pf_sync_reg_f08.F90 | 18 + .../use-mpi-f08/profile/ptestall_f08.F90 | 2 +- .../use-mpi-f08/profile/pwaitall_f08.F90 | 2 +- ompi/mpi/fortran/use-mpi-f08/testall_f08.F90 | 2 +- ompi/mpi/fortran/use-mpi-f08/waitall_f08.F90 | 2 +- .../fortran/use-mpi-ignore-tkr/Makefile.am | 12 +- .../mpi-ignore-tkr-interfaces.h.in | 69 +-- .../use-mpi-ignore-tkr/mpi-ignore-tkr.F90 | 14 +- ompi/mpi/fortran/use-mpi-tkr/Makefile.am | 20 +- .../fortran/use-mpi-tkr/{mpi.f90 => mpi.F90} | 12 +- .../scripts/mpi-f90-interfaces.h.sh | 54 +- ompi/runtime/ompi_mpi_init.c | 4 +- ompi/tools/ompi_info/param.c | 8 +- 43 files changed, 1057 insertions(+), 1487 deletions(-) rename ompi/config/{fortran_check_f08_assumed_shape.m4 => fortran_check_f08_assumed_rank.m4} (81%) delete mode 100644 ompi/include/mpif-all-common.h delete mode 100644 ompi/include/mpif-common.h.fin delete mode 100755 ompi/include/mpif-common.pl create mode 100644 ompi/include/mpif-externals.h create mode 100644 ompi/include/mpif-sentinels.h create mode 100755 ompi/include/mpif-values.pl create mode 100644 ompi/mpi/fortran/mpif-h/f_sync_reg_f.c delete mode 100644 ompi/mpi/fortran/use-mpi-f08/constants.h.fin create mode 100644 ompi/mpi/fortran/use-mpi-f08/f_sync_reg_f08.F90 create mode 100644 ompi/mpi/fortran/use-mpi-f08/profile/pf_sync_reg_f08.F90 rename ompi/mpi/fortran/use-mpi-tkr/{mpi.f90 => mpi.F90} (81%) diff --git a/autogen.pl b/autogen.pl index e4d6611348..f65c8aa4f8 100755 --- a/autogen.pl +++ b/autogen.pl @@ -1092,12 +1092,13 @@ if ($include_arg) { ++$step; verbose "\n$step. Running template-generating scripts\n\n"; -# These scripts generate files that are used by configure (i.e., we -# generate one .h.in file from another .h.in file so that humans don't -# have to maintain two copies). +# These scripts generate fortran header files of different types, but +# guaranteed to have the same value (i.e., so humans don't have to +# maintain two sets of files, and potentially have values get out of +# sync). my @scripts; -push(@scripts, "ompi/include/mpif-common.pl"); +push(@scripts, "ompi/include/mpif-values.pl"); foreach my $s (@scripts) { verbose "=== $s\n"; diff --git a/ompi/config/fortran_check_f08_assumed_shape.m4 b/ompi/config/fortran_check_f08_assumed_rank.m4 similarity index 81% rename from ompi/config/fortran_check_f08_assumed_shape.m4 rename to ompi/config/fortran_check_f08_assumed_rank.m4 index f8eece2a56..e539881461 100644 --- a/ompi/config/fortran_check_f08_assumed_shape.m4 +++ b/ompi/config/fortran_check_f08_assumed_rank.m4 @@ -22,23 +22,23 @@ dnl $HEADER$ # Does this compiler support the Fortran 2008 assumed shape syntax? -# OMPI_FORTRAN_CHECK_F08_ASSUMED_SHAPE([action if found], +# OMPI_FORTRAN_CHECK_F08_ASSUMED_RANK([action if found], # [action if not found]) # ---------------------------------------------------------------- -AC_DEFUN([OMPI_FORTRAN_CHECK_F08_ASSUMED_SHAPE], [ - AS_VAR_PUSHDEF([fortran_f08_assumed_shape], - [ompi_cv_fortran_f08_assumed_shape]) +AC_DEFUN([OMPI_FORTRAN_CHECK_F08_ASSUMED_RANK], [ + AS_VAR_PUSHDEF([fortran_f08_assumed_rank], + [ompi_cv_fortran_f08_assumed_rank]) AC_CACHE_CHECK([Fortran compiler F08 assumed shaped syntax], - fortran_f08_assumed_shape, - [_OMPI_FORTRAN_CHECK_F08_ASSUMED_SHAPE]) + fortran_f08_assumed_rank, + [_OMPI_FORTRAN_CHECK_F08_ASSUMED_RANK]) - AS_VAR_IF(fortran_f08_assumed_shape, [yes], [$1], [$2]) + AS_VAR_IF(fortran_f08_assumed_rank, [yes], [$1], [$2]) ]) ################################### -AC_DEFUN([_OMPI_FORTRAN_CHECK_F08_ASSUMED_SHAPE], [ +AC_DEFUN([_OMPI_FORTRAN_CHECK_F08_ASSUMED_RANK], [ OPAL_VAR_SCOPE_PUSH([happy]) # If we were called here, it means that the value was not cached, @@ -52,7 +52,7 @@ AC_DEFUN([_OMPI_FORTRAN_CHECK_F08_ASSUMED_SHAPE], [ [TYPE(*), DIMENSION(..)], [happy=yes], [happy=no]) - AS_VAR_SET(fortran_f08_assumed_shape, [$happy]); + AS_VAR_SET(fortran_f08_assumed_rank, [$happy]); # Now put the orignal CACHE_CHECK MSG_CHECKING back so that it can # output the MSG_RESULT. diff --git a/ompi/config/ompi_setup_mpi_fortran.m4 b/ompi/config/ompi_setup_mpi_fortran.m4 index f19f02ee16..8209d47452 100644 --- a/ompi/config/ompi_setup_mpi_fortran.m4 +++ b/ompi/config/ompi_setup_mpi_fortran.m4 @@ -39,7 +39,7 @@ AC_DEFUN([OMPI_SETUP_MPI_FORTRAN],[ OMPI_FORTRAN_HAVE_IGNORE_TKR=0 OMPI_FORTRAN_HAVE_OPTIONAL_ARGS=0 OMPI_FORTRAN_HAVE_BIND_C=0 - OMPI_FORTRAN_HAVE_F08_ASSUMED_SHAPE=0 + OMPI_FORTRAN_HAVE_F08_ASSUMED_RANK=0 OMPI_FORTRAN_HAVE_PRIVATE=0 # These macros control symbol names for Fortran/C interoperability @@ -396,16 +396,16 @@ end type test_mpi_handle], OMPI_FORTRAN_NEED_WRAPPER_ROUTINES=1 OMPI_FORTRAN_F08_PREDECL='!' OMPI_FORTRAN_F08_TYPE=real - OMPI_FORTRAN_HAVE_F08_ASSUMED_SHAPE=0 + OMPI_FORTRAN_HAVE_F08_ASSUMED_RANK=0 AS_IF([test $OMPI_WANT_FORTRAN_USEMPIF08_BINDINGS -eq 1 -a \ $OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS -eq 1], [ # Look for Fortran 2008 assumed shape syntax - OMPI_FORTRAN_CHECK_F08_ASSUMED_SHAPE( + OMPI_FORTRAN_CHECK_F08_ASSUMED_RANK( [ # If we have assumed shape, we can build the use # mpi_f08 module "better" OMPI_FORTRAN_F08_PREDECL='!' OMPI_FORTRAN_F08_TYPE='type(*), dimension(..)' - OMPI_FORTRAN_HAVE_F08_ASSUMED_SHAPE=1]) + OMPI_FORTRAN_HAVE_F08_ASSUMED_RANK=1]) # Which mpi_f08 implementation are we using? # a) partial, proof-of-concept that supports array @@ -587,8 +587,8 @@ end type test_mpi_handle], AC_DEFINE_UNQUOTED(OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS, $OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS, [For ompi_info: Whether we will build the MPI Fortran "use mpi_f08" bindings or not]) - AC_DEFINE_UNQUOTED(OMPI_FORTRAN_HAVE_F08_ASSUMED_SHAPE, - [$OMPI_FORTRAN_HAVE_F08_ASSUMED_SHAPE], + AC_DEFINE_UNQUOTED(OMPI_FORTRAN_HAVE_F08_ASSUMED_RANK, + [$OMPI_FORTRAN_HAVE_F08_ASSUMED_RANK], [For ompi_info: Whether the Fortran compiler supports the Fortran 2008 "assumed shape" syntax or not]) AC_DEFINE_UNQUOTED(OMPI_FORTRAN_HAVE_BIND_C, [$OMPI_FORTRAN_HAVE_BIND_C], diff --git a/ompi/include/Makefile.am b/ompi/include/Makefile.am index a2a3c516b9..1433643590 100644 --- a/ompi/include/Makefile.am +++ b/ompi/include/Makefile.am @@ -18,10 +18,7 @@ # $HEADER$ # -# mpif-common.h is not generated, but mpif.h and mpif-config.h are. -# See big comments in these files for an explanation. - -# note - headers and nodist_headers will go in ${includedir}/openmpi, +# Note - headers and nodist_headers will go in ${includedir}/openmpi, # not ${includedir}/ headers = nodist_headers = ompi_config.h @@ -34,9 +31,14 @@ pkginclude_HEADERS = if OMPI_BUILD_FORTRAN_MPIFH_BINDINGS include_HEADERS += \ - mpif-all-common.h \ - mpif-common.h \ - mpif-mpi-io.h + mpif.h \ + mpif-constants.h \ + mpif-externals.h \ + mpif-handles.h \ + mpif-io-constants.h \ + mpif-io-handles.h \ + mpif-sentinels.h + endif # These files are always installed in $(includedir), but shouldn't be @@ -49,13 +51,21 @@ nodist_include_HEADERS = \ if OMPI_BUILD_FORTRAN_MPIFH_BINDINGS nodist_include_HEADERS += \ - mpif.h \ mpif-config.h endif include ompi/Makefile.include -EXTRA_DIST = $(headers) mpif-common.pl +# This is complicated, but mpif-values.pl generates +# several mpif-*.h files in this directory (during autogen.pl). +# Hence, if any of those files change, it's safer to just force the +# user to re-autogen. +#mpif.h: mpif-constants.h mpif-handles.h mpif-io-constants.h mpif-io-handles.h +# @ echo "ERROR: an mpi-*.h header file has changed" +# @ echo "ERROR: you must re-run autogen.pl (sorry!)" +# @ exit 1 + +EXTRA_DIST = $(headers) mpif-values.pl if WANT_INSTALL_HEADERS ompidir = $(includedir)/openmpi diff --git a/ompi/include/mpif-all-common.h b/ompi/include/mpif-all-common.h deleted file mode 100644 index 7008b5c362..0000000000 --- a/ompi/include/mpif-all-common.h +++ /dev/null @@ -1,336 +0,0 @@ -! -*- fortran -*- -! -! Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana -! University Research and Technology -! Corporation. All rights reserved. -! Copyright (c) 2004-2010 The University of Tennessee and The University -! of Tennessee Research Foundation. All rights -! reserved. -! Copyright (c) 2004-2007 High Performance Computing Center Stuttgart, -! University of Stuttgart. All rights reserved. -! Copyright (c) 2004-2005 The Regents of the University of California. -! All rights reserved. -! Copyright (c) 2006-2012 Cisco Systems, Inc. All rights reserved. -! Copyright (c) 2009 Oak Ridge National Labs. All rights reserved. -! $COPYRIGHT$ -! -! Additional copyrights may follow -! -! $HEADER$ -! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! -! Do ***not*** copy this file to the directory where your Fortran -! 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: -! -! shell$ mpif77 foo.f -o foo -I$OMPI_HOME/include -! -! will probably do the trick (assuming that you have set OMPI_HOME -! properly). -! -! That being said, OMPI's "mpif77" wrapper compiler should -! automatically include the -I option for you. The following command -! should be equivalent to the command listed above: -! -! shell$ mpif77 foo.f -o foo -! -! 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. -! Indeed, this mpif.h is incompatible with the mpif.f of other -! implementations of MPI. Using this mpif.h with other implementations -! of MPI, or with other versions of Open MPI will result in undefined -! behavior (to include incorrect results, segmentation faults, -! unexplainable "hanging" in your application, etc.). Always use the -! -I command line option instead (or let mpif77 do it for you). -! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -! -! This file contains the bulk of the Open MPI Fortran interface. It -! is included as a back-end file to both mpif.h (i.e., the -! standardized MPI Fortran header file) and mpi.f90 (the MPI-2 -! Fortran module source file, found in ompi/mpi/f90). -! -! This file is marginally different than mpif.h. mpif.h includes -! some "external" statements that are not suitable for use with the -! MPI-2 F90 module, and therefore cannot be included in the mpi.f90 -! source file. Hence, this file is essentially everything that -! needs to be in the standardized mpif.h *except* the "external" -! statements, and is therefore suitable to be included in mpi.f90. -! - -! -! First, however, include some output from configure. -! - include 'mpif-config.h' - -! -! MPI version -! - integer MPI_VERSION, MPI_SUBVERSION - - parameter (MPI_VERSION=2) - parameter (MPI_SUBVERSION=1) -! -! Miscellaneous constants -! - integer MPI_ANY_SOURCE, MPI_ANY_TAG - integer MPI_PROC_NULL - integer MPI_ROOT - integer MPI_UNDEFINED - integer MPI_CART, MPI_GRAPH, MPI_KEYVAL_INVALID - integer MPI_SOURCE, MPI_TAG, MPI_ERROR - integer MPI_TAG_UB, MPI_HOST, MPI_IO, MPI_WTIME_IS_GLOBAL - integer MPI_APPNUM, MPI_LASTUSEDCODE, MPI_UNIVERSE_SIZE - integer IMPI_CLIENT_SIZE, IMPI_CLIENT_COLOR - integer IMPI_HOST_SIZE, IMPI_HOST_COLOR - integer MPI_BSEND_OVERHEAD - integer MPI_ORDER_C, MPI_ORDER_FORTRAN - integer MPI_DISTRIBUTE_BLOCK, MPI_DISTRIBUTE_CYCLIC - integer MPI_DISTRIBUTE_NONE, MPI_DISTRIBUTE_DFLT_DARG - integer MPI_TYPECLASS_INTEGER, MPI_TYPECLASS_REAL - integer MPI_TYPECLASS_COMPLEX - integer MPI_MODE_NOCHECK, MPI_MODE_NOPRECEDE, MPI_MODE_NOPUT - integer MPI_MODE_NOSTORE, MPI_MODE_NOSUCCEED - integer MPI_LOCK_EXCLUSIVE, MPI_LOCK_SHARED - integer MPI_WIN_BASE, MPI_WIN_SIZE, MPI_WIN_DISP_UNIT - integer MPI_MESSAGE_NO_PROC - - parameter (MPI_ANY_SOURCE=-1) - parameter (MPI_ANY_TAG=-1) - parameter (MPI_PROC_NULL=-2) - parameter (MPI_ROOT=-4) - parameter (MPI_UNDEFINED=-32766) - parameter (MPI_CART=1) - parameter (MPI_GRAPH=2) - parameter (MPI_KEYVAL_INVALID=-1) - parameter (MPI_SOURCE=1) - parameter (MPI_TAG=2) - parameter (MPI_ERROR=3) - parameter (MPI_TAG_UB=0) - parameter (MPI_HOST=1) - parameter (MPI_IO=2) - parameter (MPI_WTIME_IS_GLOBAL=3) - parameter (MPI_APPNUM=4) - parameter (MPI_LASTUSEDCODE=5) - parameter (MPI_UNIVERSE_SIZE=6) - parameter (MPI_WIN_BASE=7) - parameter (MPI_WIN_SIZE=8) - parameter (MPI_WIN_DISP_UNIT=9) - parameter (IMPI_CLIENT_SIZE=10) - parameter (IMPI_CLIENT_COLOR=11) - parameter (IMPI_HOST_SIZE=12) - parameter (IMPI_HOST_COLOR=13) - - parameter (MPI_BSEND_OVERHEAD=128) - parameter (MPI_ORDER_C=0) - parameter (MPI_ORDER_FORTRAN=1) - parameter (MPI_DISTRIBUTE_BLOCK=0) - parameter (MPI_DISTRIBUTE_CYCLIC=1) - parameter (MPI_DISTRIBUTE_NONE=2) - parameter (MPI_DISTRIBUTE_DFLT_DARG=-1) - parameter (MPI_TYPECLASS_INTEGER=1) - parameter (MPI_TYPECLASS_REAL=2) - parameter (MPI_TYPECLASS_COMPLEX=3) - parameter (MPI_MODE_NOCHECK=1) - parameter (MPI_MODE_NOPRECEDE=2) - parameter (MPI_MODE_NOPUT=4) - parameter (MPI_MODE_NOSTORE=8) - parameter (MPI_MODE_NOSUCCEED=16) - parameter (MPI_LOCK_EXCLUSIVE=1) - parameter (MPI_LOCK_SHARED=2) - parameter (MPI_MESSAGE_NO_PROC=1) - -! -! MPI_Init_thread constants -! - integer MPI_THREAD_SINGLE, MPI_THREAD_FUNNELED - integer MPI_THREAD_SERIALIZED, MPI_THREAD_MULTIPLE - - parameter (MPI_THREAD_SINGLE=0) - parameter (MPI_THREAD_FUNNELED=1) - parameter (MPI_THREAD_SERIALIZED=2) - parameter (MPI_THREAD_MULTIPLE=3) -! -! error classes -! - integer MPI_SUCCESS - integer MPI_ERR_BUFFER - integer MPI_ERR_COUNT - integer MPI_ERR_TYPE - integer MPI_ERR_TAG - integer MPI_ERR_COMM - integer MPI_ERR_RANK - integer MPI_ERR_REQUEST - integer MPI_ERR_ROOT - integer MPI_ERR_GROUP - integer MPI_ERR_OP - integer MPI_ERR_TOPOLOGY - integer MPI_ERR_DIMS - integer MPI_ERR_ARG - integer MPI_ERR_UNKNOWN - integer MPI_ERR_TRUNCATE - integer MPI_ERR_OTHER - integer MPI_ERR_INTERN - integer MPI_ERR_IN_STATUS - integer MPI_ERR_PENDING - integer MPI_ERR_ACCESS - integer MPI_ERR_AMODE - integer MPI_ERR_ASSERT - integer MPI_ERR_BAD_FILE - integer MPI_ERR_BASE - integer MPI_ERR_CONVERSION - integer MPI_ERR_DISP - integer MPI_ERR_DUP_DATAREP - integer MPI_ERR_FILE_EXISTS - integer MPI_ERR_FILE_IN_USE - integer MPI_ERR_FILE - integer MPI_ERR_INFO_KEY - integer MPI_ERR_INFO_NOKEY - integer MPI_ERR_INFO_VALUE - integer MPI_ERR_INFO - integer MPI_ERR_IO - integer MPI_ERR_KEYVAL - integer MPI_ERR_LOCKTYPE - integer MPI_ERR_NAME - integer MPI_ERR_NO_MEM - integer MPI_ERR_NOT_SAME - integer MPI_ERR_NO_SPACE - integer MPI_ERR_NO_SUCH_FILE - integer MPI_ERR_PORT - integer MPI_ERR_QUOTA - integer MPI_ERR_READ_ONLY - integer MPI_ERR_RMA_CONFLICT - integer MPI_ERR_RMA_SYNC - integer MPI_ERR_SERVICE - integer MPI_ERR_SIZE - integer MPI_ERR_SPAWN - integer MPI_ERR_UNSUPPORTED_DATAREP - integer MPI_ERR_UNSUPPORTED_OPERATION - integer MPI_ERR_WIN - - integer MPI_ERR_SYSRESOURCE - integer MPI_ERR_LASTCODE - - parameter( MPI_SUCCESS = 0) - parameter( MPI_ERR_BUFFER = 1) - parameter( MPI_ERR_COUNT = 2) - parameter( MPI_ERR_TYPE = 3) - parameter( MPI_ERR_TAG = 4) - parameter( MPI_ERR_COMM = 5) - parameter( MPI_ERR_RANK = 6) - parameter( MPI_ERR_REQUEST = 7) - parameter( MPI_ERR_ROOT = 8) - parameter( MPI_ERR_GROUP = 9) - parameter( MPI_ERR_OP = 10) - parameter( MPI_ERR_TOPOLOGY = 11) - parameter( MPI_ERR_DIMS = 12) - parameter( MPI_ERR_ARG = 13) - parameter( MPI_ERR_UNKNOWN = 14) - parameter( MPI_ERR_TRUNCATE = 15) - parameter( MPI_ERR_OTHER = 16) - parameter( MPI_ERR_INTERN = 17) - parameter( MPI_ERR_IN_STATUS = 18) - parameter( MPI_ERR_PENDING = 19) - parameter( MPI_ERR_ACCESS = 20) - parameter( MPI_ERR_AMODE = 21) - parameter( MPI_ERR_ASSERT = 22) - parameter( MPI_ERR_BAD_FILE = 23) - parameter( MPI_ERR_BASE = 24) - parameter( MPI_ERR_CONVERSION = 25) - parameter( MPI_ERR_DISP = 26) - parameter( MPI_ERR_DUP_DATAREP = 27) - parameter( MPI_ERR_FILE_EXISTS = 28) - parameter( MPI_ERR_FILE_IN_USE = 29) - parameter( MPI_ERR_FILE = 30) - parameter( MPI_ERR_INFO_KEY = 31) - parameter( MPI_ERR_INFO_NOKEY = 32) - parameter( MPI_ERR_INFO_VALUE = 33) - parameter( MPI_ERR_INFO = 34) - parameter( MPI_ERR_IO = 35) - parameter( MPI_ERR_KEYVAL = 36) - parameter( MPI_ERR_LOCKTYPE = 37) - parameter( MPI_ERR_NAME = 38) - parameter( MPI_ERR_NO_MEM = 39) - parameter( MPI_ERR_NOT_SAME = 40) - parameter( MPI_ERR_NO_SPACE = 41) - parameter( MPI_ERR_NO_SUCH_FILE = 42) - parameter( MPI_ERR_PORT = 43) - parameter( MPI_ERR_QUOTA = 44) - parameter( MPI_ERR_READ_ONLY = 45) - parameter( MPI_ERR_RMA_CONFLICT = 46) - parameter( MPI_ERR_RMA_SYNC = 47) - parameter( MPI_ERR_SERVICE = 48) - parameter( MPI_ERR_SIZE = 49) - parameter( MPI_ERR_SPAWN = 50) - parameter( MPI_ERR_UNSUPPORTED_DATAREP = 51) - parameter( MPI_ERR_UNSUPPORTED_OPERATION= 52) - parameter( MPI_ERR_WIN = 53) - - parameter( MPI_ERR_SYSRESOURCE = -2) - parameter( MPI_ERR_LASTCODE = 54) - -! -! comparison results -! - integer MPI_IDENT, MPI_CONGRUENT, MPI_SIMILAR, MPI_UNEQUAL - - parameter (MPI_IDENT=0) - parameter (MPI_CONGRUENT=1) - parameter (MPI_SIMILAR=2) - parameter (MPI_UNEQUAL=3) -! -! datatype combiners -! - integer MPI_COMBINER_NAMED - integer MPI_COMBINER_DUP - integer MPI_COMBINER_CONTIGUOUS - integer MPI_COMBINER_VECTOR - integer MPI_COMBINER_HVECTOR_INTEGER - integer MPI_COMBINER_HVECTOR - integer MPI_COMBINER_INDEXED - integer MPI_COMBINER_HINDEXED_INTEGER - integer MPI_COMBINER_HINDEXED - integer MPI_COMBINER_INDEXED_BLOCK - integer MPI_COMBINER_STRUCT_INTEGER - integer MPI_COMBINER_STRUCT - integer MPI_COMBINER_SUBARRAY - integer MPI_COMBINER_DARRAY - integer MPI_COMBINER_F90_REAL - integer MPI_COMBINER_F90_COMPLEX - integer MPI_COMBINER_F90_INTEGER - integer MPI_COMBINER_RESIZED - integer MPI_COMBINER_HINDEXED_BLOCK - - parameter (MPI_COMBINER_NAMED=0) - parameter (MPI_COMBINER_DUP=1) - parameter (MPI_COMBINER_CONTIGUOUS=2) - parameter (MPI_COMBINER_VECTOR=3) - parameter (MPI_COMBINER_HVECTOR_INTEGER=4) - parameter (MPI_COMBINER_HVECTOR=5) - parameter (MPI_COMBINER_INDEXED=6) - parameter (MPI_COMBINER_HINDEXED_INTEGER=7) - parameter (MPI_COMBINER_HINDEXED=8) - parameter (MPI_COMBINER_INDEXED_BLOCK=9) - parameter (MPI_COMBINER_STRUCT_INTEGER=10) - parameter (MPI_COMBINER_STRUCT=11) - parameter (MPI_COMBINER_SUBARRAY=12) - parameter (MPI_COMBINER_DARRAY=13) - parameter (MPI_COMBINER_F90_REAL=14) - parameter (MPI_COMBINER_F90_COMPLEX=15) - parameter (MPI_COMBINER_F90_INTEGER=16) - parameter (MPI_COMBINER_RESIZED=17) - parameter (MPI_COMBINER_HINDEXED_BLOCK=18) - -! -! Communicator split type constants. -! - integer MPI_COMM_TYPE_SHARED - parameter (MPI_COMM_TYPE_SHARED=0) diff --git a/ompi/include/mpif-common.h.fin b/ompi/include/mpif-common.h.fin deleted file mode 100644 index fe6a2134c5..0000000000 --- a/ompi/include/mpif-common.h.fin +++ /dev/null @@ -1,388 +0,0 @@ -! -*- fortran -*- -! -! Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana -! University Research and Technology -! Corporation. All rights reserved. -! Copyright (c) 2004-2010 The University of Tennessee and The University -! of Tennessee Research Foundation. All rights -! reserved. -! Copyright (c) 2004-2007 High Performance Computing Center Stuttgart, -! University of Stuttgart. All rights reserved. -! Copyright (c) 2004-2005 The Regents of the University of California. -! All rights reserved. -! Copyright (c) 2006-2012 Cisco Systems, Inc. All rights reserved. -! Copyright (c) 2009 Oak Ridge National Labs. All rights reserved. -! $COPYRIGHT$ -! -! Additional copyrights may follow -! -! $HEADER$ -! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! -! Do ***not*** copy this file to the directory where your Fortran -! 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: -! -! shell$ mpif77 foo.f -o foo -I$OMPI_HOME/include -! -! will probably do the trick (assuming that you have set OMPI_HOME -! properly). -! -! That being said, OMPI's "mpif77" wrapper compiler should -! automatically include the -I option for you. The following command -! should be equivalent to the command listed above: -! -! shell$ mpif77 foo.f -o foo -! -! 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. -! Indeed, this mpif.h is incompatible with the mpif.f of other -! implementations of MPI. Using this mpif.h with other implementations -! of MPI, or with other versions of Open MPI will result in undefined -! behavior (to include incorrect results, segmentation faults, -! unexplainable "hanging" in your application, etc.). Always use the -! -I command line option instead (or let mpif77 do it for you). -! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -! -! This file contains the bulk of the Open MPI Fortran interface. It -! is included as a back-end file to both mpif.h (i.e., the -! standardized MPI Fortran header file) and mpi.f90 (the MPI-2 -! Fortran module source file, found in ompi/mpi/f90). -! -! This file is marginally different than mpif.h. mpif.h includes -! some "external" statements that are not suitable for use with the -! MPI-2 F90 module, and therefore cannot be included in the mpi.f90 -! source file. Hence, this file is essentially everything that -! needs to be in the standardized mpif.h *except* the "external" -! statements, and is therefore suitable to be included in mpi.f90. -! - -! -! First, however, include some output from configure. -! - include 'mpif-config.h' - -! -! MPI version -! - integer MPI_VERSION, MPI_SUBVERSION - - parameter (MPI_VERSION=2) - parameter (MPI_SUBVERSION=1) -! -! Miscellaneous constants -! - integer MPI_ANY_SOURCE, MPI_ANY_TAG - integer MPI_PROC_NULL - integer MPI_ROOT - integer MPI_UNDEFINED - integer MPI_CART, MPI_GRAPH, MPI_KEYVAL_INVALID - integer MPI_SOURCE, MPI_TAG, MPI_ERROR - integer MPI_TAG_UB, MPI_HOST, MPI_IO, MPI_WTIME_IS_GLOBAL - integer MPI_APPNUM, MPI_LASTUSEDCODE, MPI_UNIVERSE_SIZE - integer IMPI_CLIENT_SIZE, IMPI_CLIENT_COLOR - integer IMPI_HOST_SIZE, IMPI_HOST_COLOR - integer MPI_BSEND_OVERHEAD - integer MPI_ORDER_C, MPI_ORDER_FORTRAN - integer MPI_DISTRIBUTE_BLOCK, MPI_DISTRIBUTE_CYCLIC - integer MPI_DISTRIBUTE_NONE, MPI_DISTRIBUTE_DFLT_DARG - integer MPI_TYPECLASS_INTEGER, MPI_TYPECLASS_REAL - integer MPI_TYPECLASS_COMPLEX - integer MPI_MODE_NOCHECK, MPI_MODE_NOPRECEDE, MPI_MODE_NOPUT - integer MPI_MODE_NOSTORE, MPI_MODE_NOSUCCEED - integer MPI_LOCK_EXCLUSIVE, MPI_LOCK_SHARED - integer MPI_WIN_BASE, MPI_WIN_SIZE, MPI_WIN_DISP_UNIT - integer MPI_MESSAGE_NO_PROC - - parameter (MPI_ANY_SOURCE=-1) - parameter (MPI_ANY_TAG=-1) - parameter (MPI_PROC_NULL=-2) - parameter (MPI_ROOT=-4) - parameter (MPI_UNDEFINED=-32766) - parameter (MPI_CART=1) - parameter (MPI_GRAPH=2) - parameter (MPI_KEYVAL_INVALID=-1) - parameter (MPI_SOURCE=1) - parameter (MPI_TAG=2) - parameter (MPI_ERROR=3) - parameter (MPI_TAG_UB=0) - parameter (MPI_HOST=1) - parameter (MPI_IO=2) - parameter (MPI_WTIME_IS_GLOBAL=3) - parameter (MPI_APPNUM=4) - parameter (MPI_LASTUSEDCODE=5) - parameter (MPI_UNIVERSE_SIZE=6) - parameter (MPI_WIN_BASE=7) - parameter (MPI_WIN_SIZE=8) - parameter (MPI_WIN_DISP_UNIT=9) - parameter (IMPI_CLIENT_SIZE=10) - parameter (IMPI_CLIENT_COLOR=11) - parameter (IMPI_HOST_SIZE=12) - parameter (IMPI_HOST_COLOR=13) - - parameter (MPI_BSEND_OVERHEAD=128) - parameter (MPI_ORDER_C=0) - parameter (MPI_ORDER_FORTRAN=1) - parameter (MPI_DISTRIBUTE_BLOCK=0) - parameter (MPI_DISTRIBUTE_CYCLIC=1) - parameter (MPI_DISTRIBUTE_NONE=2) - parameter (MPI_DISTRIBUTE_DFLT_DARG=-1) - parameter (MPI_TYPECLASS_INTEGER=1) - parameter (MPI_TYPECLASS_REAL=2) - parameter (MPI_TYPECLASS_COMPLEX=3) - parameter (MPI_MODE_NOCHECK=1) - parameter (MPI_MODE_NOPRECEDE=2) - parameter (MPI_MODE_NOPUT=4) - parameter (MPI_MODE_NOSTORE=8) - parameter (MPI_MODE_NOSUCCEED=16) - parameter (MPI_LOCK_EXCLUSIVE=1) - parameter (MPI_LOCK_SHARED=2) - parameter (MPI_MESSAGE_NO_PROC=1) - -! -! MPI sentinel values -! -! Several of these types were chosen with care to match specific -! overloaded functions in the F90 bindings. They should also match -! the types of their corresponding C variables. Do not arbitrarily -! change their types without also updating the F90 bindings and -! their corresponding types in ompi/mpi/f77/constants.h and -! ompi/mpi/runtime/ompi_init.c! -! -! MPI_BOTTOM is only used where choice buffers can be used (meaning -! that we already have overloaded F90 bindings for all available -! types), so any type is fine. - integer MPI_BOTTOM -! MPI_IN_PLACE has the same rationale as MPI_BOTTOM. - integer MPI_IN_PLACE -! Making MPI_ARGV_NULL be the same type as the parameter that is -! exepected in the F90 binding for MPI_COMM_SPAWN means that we -! don't need another binding for MPI_COMM_SPAWN. - character MPI_ARGV_NULL(1) -! The array_of_argv parameter in the F90 bindings for -! MPI_COMM_SPAWN_MULTIPLE takes a variable number of dimensions -! (specified by the "count" parameter), so it's not possible to have -! a single variable match all possible values. Hence, make it an -! entirely different type (one that would never likely be used by a -! correct program, e.g., double) and have a separate F90 binding for -! matching just this type. - double precision MPI_ARGVS_NULL -! MPI_ERRCODES_IGNORE has similar rationale to MPI_ARGV_NULL. The -! F77 functions are all smart enough to check that the errcodes -! parameter is not ERRCODES_IGNORE before assigning values into it -! (hence, the fact that this is an array of only 1 element does not -! matter -- we'll never overrun it because we never assign values -! into it). - integer MPI_ERRCODES_IGNORE(1) -! MPI_STATUS_IGNORE has similar rationale to MPI_ERRCODES_IGNORE. - integer MPI_STATUS_IGNORE(MPI_STATUS_SIZE) -! MPI_STATUSES_IGNORE has similar rationale to MPI_ARGVS_NULL. - double precision MPI_STATUSES_IGNORE - - common/mpi_fortran_bottom/MPI_BOTTOM - common/mpi_fortran_in_place/MPI_IN_PLACE - common/mpi_fortran_argv_null/MPI_ARGV_NULL - common/mpi_fortran_argvs_null/MPI_ARGVS_NULL - common/mpi_fortran_errcodes_ignore/MPI_ERRCODES_IGNORE - common/mpi_fortran_status_ignore/MPI_STATUS_IGNORE - common/mpi_fortran_statuses_ignore/MPI_STATUSES_IGNORE -! -! MPI_Init_thread constants -! - integer MPI_THREAD_SINGLE, MPI_THREAD_FUNNELED - integer MPI_THREAD_SERIALIZED, MPI_THREAD_MULTIPLE - - parameter (MPI_THREAD_SINGLE=0) - parameter (MPI_THREAD_FUNNELED=1) - parameter (MPI_THREAD_SERIALIZED=2) - parameter (MPI_THREAD_MULTIPLE=3) -! -! error classes -! - integer MPI_SUCCESS - integer MPI_ERR_BUFFER - integer MPI_ERR_COUNT - integer MPI_ERR_TYPE - integer MPI_ERR_TAG - integer MPI_ERR_COMM - integer MPI_ERR_RANK - integer MPI_ERR_REQUEST - integer MPI_ERR_ROOT - integer MPI_ERR_GROUP - integer MPI_ERR_OP - integer MPI_ERR_TOPOLOGY - integer MPI_ERR_DIMS - integer MPI_ERR_ARG - integer MPI_ERR_UNKNOWN - integer MPI_ERR_TRUNCATE - integer MPI_ERR_OTHER - integer MPI_ERR_INTERN - integer MPI_ERR_IN_STATUS - integer MPI_ERR_PENDING - integer MPI_ERR_ACCESS - integer MPI_ERR_AMODE - integer MPI_ERR_ASSERT - integer MPI_ERR_BAD_FILE - integer MPI_ERR_BASE - integer MPI_ERR_CONVERSION - integer MPI_ERR_DISP - integer MPI_ERR_DUP_DATAREP - integer MPI_ERR_FILE_EXISTS - integer MPI_ERR_FILE_IN_USE - integer MPI_ERR_FILE - integer MPI_ERR_INFO_KEY - integer MPI_ERR_INFO_NOKEY - integer MPI_ERR_INFO_VALUE - integer MPI_ERR_INFO - integer MPI_ERR_IO - integer MPI_ERR_KEYVAL - integer MPI_ERR_LOCKTYPE - integer MPI_ERR_NAME - integer MPI_ERR_NO_MEM - integer MPI_ERR_NOT_SAME - integer MPI_ERR_NO_SPACE - integer MPI_ERR_NO_SUCH_FILE - integer MPI_ERR_PORT - integer MPI_ERR_QUOTA - integer MPI_ERR_READ_ONLY - integer MPI_ERR_RMA_CONFLICT - integer MPI_ERR_RMA_SYNC - integer MPI_ERR_SERVICE - integer MPI_ERR_SIZE - integer MPI_ERR_SPAWN - integer MPI_ERR_UNSUPPORTED_DATAREP - integer MPI_ERR_UNSUPPORTED_OPERATION - integer MPI_ERR_WIN - - integer MPI_ERR_SYSRESOURCE - integer MPI_ERR_LASTCODE - - parameter( MPI_SUCCESS = 0) - parameter( MPI_ERR_BUFFER = 1) - parameter( MPI_ERR_COUNT = 2) - parameter( MPI_ERR_TYPE = 3) - parameter( MPI_ERR_TAG = 4) - parameter( MPI_ERR_COMM = 5) - parameter( MPI_ERR_RANK = 6) - parameter( MPI_ERR_REQUEST = 7) - parameter( MPI_ERR_ROOT = 8) - parameter( MPI_ERR_GROUP = 9) - parameter( MPI_ERR_OP = 10) - parameter( MPI_ERR_TOPOLOGY = 11) - parameter( MPI_ERR_DIMS = 12) - parameter( MPI_ERR_ARG = 13) - parameter( MPI_ERR_UNKNOWN = 14) - parameter( MPI_ERR_TRUNCATE = 15) - parameter( MPI_ERR_OTHER = 16) - parameter( MPI_ERR_INTERN = 17) - parameter( MPI_ERR_IN_STATUS = 18) - parameter( MPI_ERR_PENDING = 19) - parameter( MPI_ERR_ACCESS = 20) - parameter( MPI_ERR_AMODE = 21) - parameter( MPI_ERR_ASSERT = 22) - parameter( MPI_ERR_BAD_FILE = 23) - parameter( MPI_ERR_BASE = 24) - parameter( MPI_ERR_CONVERSION = 25) - parameter( MPI_ERR_DISP = 26) - parameter( MPI_ERR_DUP_DATAREP = 27) - parameter( MPI_ERR_FILE_EXISTS = 28) - parameter( MPI_ERR_FILE_IN_USE = 29) - parameter( MPI_ERR_FILE = 30) - parameter( MPI_ERR_INFO_KEY = 31) - parameter( MPI_ERR_INFO_NOKEY = 32) - parameter( MPI_ERR_INFO_VALUE = 33) - parameter( MPI_ERR_INFO = 34) - parameter( MPI_ERR_IO = 35) - parameter( MPI_ERR_KEYVAL = 36) - parameter( MPI_ERR_LOCKTYPE = 37) - parameter( MPI_ERR_NAME = 38) - parameter( MPI_ERR_NO_MEM = 39) - parameter( MPI_ERR_NOT_SAME = 40) - parameter( MPI_ERR_NO_SPACE = 41) - parameter( MPI_ERR_NO_SUCH_FILE = 42) - parameter( MPI_ERR_PORT = 43) - parameter( MPI_ERR_QUOTA = 44) - parameter( MPI_ERR_READ_ONLY = 45) - parameter( MPI_ERR_RMA_CONFLICT = 46) - parameter( MPI_ERR_RMA_SYNC = 47) - parameter( MPI_ERR_SERVICE = 48) - parameter( MPI_ERR_SIZE = 49) - parameter( MPI_ERR_SPAWN = 50) - parameter( MPI_ERR_UNSUPPORTED_DATAREP = 51) - parameter( MPI_ERR_UNSUPPORTED_OPERATION= 52) - parameter( MPI_ERR_WIN = 53) - - parameter( MPI_ERR_SYSRESOURCE = -2) - parameter( MPI_ERR_LASTCODE = 54) - -! -! comparison results -! - integer MPI_IDENT, MPI_CONGRUENT, MPI_SIMILAR, MPI_UNEQUAL - - parameter (MPI_IDENT=0) - parameter (MPI_CONGRUENT=1) - parameter (MPI_SIMILAR=2) - parameter (MPI_UNEQUAL=3) -! -! datatype combiners -! - integer MPI_COMBINER_NAMED - integer MPI_COMBINER_DUP - integer MPI_COMBINER_CONTIGUOUS - integer MPI_COMBINER_VECTOR - integer MPI_COMBINER_HVECTOR_INTEGER - integer MPI_COMBINER_HVECTOR - integer MPI_COMBINER_INDEXED - integer MPI_COMBINER_HINDEXED_INTEGER - integer MPI_COMBINER_HINDEXED - integer MPI_COMBINER_INDEXED_BLOCK - integer MPI_COMBINER_STRUCT_INTEGER - integer MPI_COMBINER_STRUCT - integer MPI_COMBINER_SUBARRAY - integer MPI_COMBINER_DARRAY - integer MPI_COMBINER_F90_REAL - integer MPI_COMBINER_F90_COMPLEX - integer MPI_COMBINER_F90_INTEGER - integer MPI_COMBINER_RESIZED - integer MPI_COMBINER_HINDEXED_BLOCK - - parameter (MPI_COMBINER_NAMED=0) - parameter (MPI_COMBINER_DUP=1) - parameter (MPI_COMBINER_CONTIGUOUS=2) - parameter (MPI_COMBINER_VECTOR=3) - parameter (MPI_COMBINER_HVECTOR_INTEGER=4) - parameter (MPI_COMBINER_HVECTOR=5) - parameter (MPI_COMBINER_INDEXED=6) - parameter (MPI_COMBINER_HINDEXED_INTEGER=7) - parameter (MPI_COMBINER_HINDEXED=8) - parameter (MPI_COMBINER_INDEXED_BLOCK=9) - parameter (MPI_COMBINER_STRUCT_INTEGER=10) - parameter (MPI_COMBINER_STRUCT=11) - parameter (MPI_COMBINER_SUBARRAY=12) - parameter (MPI_COMBINER_DARRAY=13) - parameter (MPI_COMBINER_F90_REAL=14) - parameter (MPI_COMBINER_F90_COMPLEX=15) - parameter (MPI_COMBINER_F90_INTEGER=16) - parameter (MPI_COMBINER_RESIZED=17) - parameter (MPI_COMBINER_HINDEXED_BLOCK=18) - -! -! Communicator split type constants. -! - integer MPI_COMM_TYPE_SHARED - parameter (MPI_COMM_TYPE_SHARED=0) - -! -! Generated input below, located at bottom of mpif-common.h file -! - diff --git a/ompi/include/mpif-common.pl b/ompi/include/mpif-common.pl deleted file mode 100755 index b0592f8556..0000000000 --- a/ompi/include/mpif-common.pl +++ /dev/null @@ -1,471 +0,0 @@ -#!/usr/bin/env perl -# -# Copyright (c) 2011 Cisco Systems, Inc. All rights reserved. -# $COPYRIGHT$ -# -# Additional copyrights may follow -# -# $HEADER$ -# - -# This file generates common parameter values needed for the three -# MPI bindings. It creates the files: -# -# ompi/include/mpif-common.h -# ommp/mpi/fortran/use-mpi-f08/constants.h - -use strict; - -#---------------------------------------------------------------------------- - -# Read a file; return its contents in a string - -sub read_file { - my ($filename_in) = @_; - - open(FILE_IN, $filename_in) || die "Couldn't open file $filename_in"; - my $fin; - $fin .= $_ - while (); - close(FILE_IN); - - return $fin; -} - -#---------------------------------------------------------------------------- - -# Write an output file only if a) the output file does not already -# exist, or b) it exists, but its contents are different than $str. - -sub write_file { - my ($filename_out, $str) = @_; - - my $need_write = 0; - if (! -f $filename_out) { - $need_write = 1; - } else { - open(FILE_IN, $filename_out) || die "Couldn't open $filename_out"; - my $tmp; - $tmp .= $_ - while (); - close(FILE_IN); - if ($str ne $tmp) { - $need_write = 1; - } - } - - if ($need_write) { - open(FILE_OUT, ">$filename_out") || die "Couldn't open $filename_out"; - print FILE_OUT $str; - close(FILE_OUT); - print "created $filename_out\n"; - } else { - print "$filename_out unchanged; not written\n"; - } -} - -#---------------------------------------------------------------------------- - -print "creating Fortran header files (with common constants)...\n"; - -# Find the OMPI topdir. It is likely the pwd. -my $topdir; -if (-r "ompi/include/mpi.h.in") { - $topdir = "."; -} elsif (-r "include/mpi.h.in") { - $topdir = ".."; -} elsif (-r "mpi.h.in") { - $topdir = "../.."; -} else { - print "Please run this script from the Open MPI topdir or topdir/include/mpi\n"; - print "Aborting.\n"; - exit(1); -} - -#---------------------------------------------------------------------------- - -my $MPI_COMM_WORLD = 0; -my $MPI_COMM_SELF = 1; -my $MPI_GROUP_EMPTY = 1; -my $MPI_ERRORS_ARE_FATAL = 1; -my $MPI_ERRORS_RETURN = 2; - -# -# lookup table indices -# -my $MPI_MAX = 1; -my $MPI_MIN = 2; -my $MPI_SUM = 3; -my $MPI_PROD = 4; -my $MPI_LAND = 5; -my $MPI_BAND = 6; -my $MPI_LOR = 7; -my $MPI_BOR = 8; -my $MPI_LXOR = 9; -my $MPI_BXOR = 10; -my $MPI_MAXLOC = 11; -my $MPI_MINLOC = 12; -my $MPI_REPLACE = 13; - -# -# NULL "handles" (indices) -# -my $MPI_COMM_NULL = 2; -my $MPI_DATATYPE_NULL = 0; -my $MPI_ERRHANDLER_NULL = 0; -my $MPI_GROUP_NULL = 0; -my $MPI_INFO_NULL = 0; -my $MPI_MESSAGE_NULL = 0; -my $MPI_OP_NULL = 0; -my $MPI_REQUEST_NULL = 0; -my $MPI_WIN_NULL = 0; -my $MPI_MESSAGE_NULL = 0; - -my $MPI_BYTE = 1; -my $MPI_PACKED = 2; -my $MPI_UB = 3; -my $MPI_LB = 4; -my $MPI_CHARACTER = 5; -my $MPI_LOGICAL = 6; -my $MPI_INTEGER = 7; -my $MPI_INTEGER1 = 8; -my $MPI_INTEGER2 = 9; -my $MPI_INTEGER4 = 10; -my $MPI_INTEGER8 = 11; -my $MPI_INTEGER16 = 12; -my $MPI_REAL = 13; -my $MPI_REAL4 = 14; -my $MPI_REAL8 = 15; -my $MPI_REAL16 = 16; -my $MPI_DOUBLE_PRECISION = 17; -my $MPI_COMPLEX = 18; -my $MPI_COMPLEX8 = 19; -my $MPI_COMPLEX16 = 20; -my $MPI_COMPLEX32 = 21; -my $MPI_DOUBLE_COMPLEX = 22; -my $MPI_2REAL = 23; -my $MPI_2DOUBLE_PRECISION = 24; -my $MPI_2INTEGER = 25; -my $MPI_2COMPLEX = 26; -my $MPI_2DOUBLE_COMPLEX = 27; -my $MPI_REAL2 = 28; -my $MPI_LOGICAL1 = 29; -my $MPI_LOGICAL2 = 30; -my $MPI_LOGICAL4 = 31; -my $MPI_LOGICAL8 = 32; -my $MPI_WCHAR = 33; -my $MPI_CHAR = 34; -my $MPI_UNSIGNED_CHAR = 35; -my $MPI_SIGNED_CHAR = 36; -my $MPI_SHORT = 37; -my $MPI_UNSIGNED_SHORT = 38; -my $MPI_INT = 39; -my $MPI_UNSIGNED = 40; -my $MPI_LONG = 41; -my $MPI_UNSIGNED_LONG = 42; -my $MPI_LONG_LONG_INT = 43; -my $MPI_UNSIGNED_LONG_LONG = 44; -my $MPI_FLOAT = 45; -my $MPI_DOUBLE = 46; -my $MPI_LONG_DOUBLE = 47; -my $MPI_FLOAT_INT = 48; -my $MPI_DOUBLE_INT = 49; -my $MPI_LONGDBL_INT = 50; -my $MPI_LONG_INT = 51; -my $MPI_2INT = 52; -my $MPI_SHORT_INT = 53; -my $MPI_CXX_BOOL = 54; -my $MPI_CXX_CPLEX = 55; -my $MPI_CXX_DBLCPLEX = 56; -my $MPI_CXX_LDBLCPLEX = 57; -my $MPI_INT8_T = 58; -my $MPI_UINT8_T = 59; -my $MPI_INT16_T = 60; -my $MPI_UINT16_T = 61; -my $MPI_INT32_T = 62; -my $MPI_UINT32_T = 63; -my $MPI_INT64_T = 64; -my $MPI_UINT64_T = 65; -my $MPI_AINT = 66; -my $MPI_OFFSET = 67; - -# -# create ompi/include/mpif-common.h -# - -my $filename_in = "$topdir/ompi/include/mpif-common.h.fin"; -my $filename_out = $filename_in; -$filename_out =~ s/\.fin$//; - -my $input = read_file($filename_in); - -# Add warning to the top -$input = "! -*- fortran -*- -! WARNING! THIS IS A GENERATED FILE!! -! ANY EDITS YOU PUT HERE WILL BE LOST! -! ==> Instead, edit topdir/ompi/include/mpif-common.pl. - -$input"; - -# Add more to the end -$input .= "! -! NULL 'handles' (indices) -! - - integer MPI_GROUP_NULL, MPI_COMM_NULL, MPI_DATATYPE_NULL - integer MPI_REQUEST_NULL, MPI_OP_NULL, MPI_ERRHANDLER_NULL - integer MPI_INFO_NULL, MPI_WIN_NULL, MPI_MESSAGE_NULL - - parameter (MPI_GROUP_NULL=$MPI_GROUP_NULL) - parameter (MPI_COMM_NULL=$MPI_COMM_NULL) - parameter (MPI_DATATYPE_NULL=$MPI_DATATYPE_NULL) - parameter (MPI_REQUEST_NULL=$MPI_REQUEST_NULL) - parameter (MPI_OP_NULL=$MPI_OP_NULL) - parameter (MPI_ERRHANDLER_NULL=$MPI_ERRHANDLER_NULL) - parameter (MPI_INFO_NULL=$MPI_INFO_NULL) - parameter (MPI_WIN_NULL=$MPI_WIN_NULL) - parameter (MPI_MESSAGE_NULL=$MPI_MESSAGE_NULL) - - integer MPI_COMM_WORLD, MPI_COMM_SELF - integer MPI_GROUP_EMPTY - integer MPI_ERRORS_ARE_FATAL, MPI_ERRORS_RETURN - - integer OMPI_MPI_COMM_WORLD - integer OMPI_MPI_COMM_SELF - - parameter (MPI_COMM_WORLD=$MPI_COMM_WORLD) - parameter (MPI_COMM_SELF=$MPI_COMM_SELF) - parameter (MPI_GROUP_EMPTY=$MPI_GROUP_EMPTY) - parameter (MPI_ERRORS_ARE_FATAL=$MPI_ERRORS_ARE_FATAL) - parameter (MPI_ERRORS_RETURN=$MPI_ERRORS_RETURN) - -! -! lookup table indices -! - - integer MPI_MAX, MPI_MIN, MPI_SUM, MPI_PROD, MPI_LAND - integer MPI_BAND, MPI_LOR, MPI_BOR, MPI_LXOR, MPI_BXOR - integer MPI_MAXLOC, MPI_MINLOC, MPI_REPLACE - - parameter (MPI_MAX=$MPI_MAX) - parameter (MPI_MIN=$MPI_MIN) - parameter (MPI_SUM=$MPI_SUM) - parameter (MPI_PROD=$MPI_PROD) - parameter (MPI_LAND=$MPI_LAND) - parameter (MPI_BAND=$MPI_BAND) - parameter (MPI_LOR=$MPI_LOR) - parameter (MPI_BOR=$MPI_BOR) - parameter (MPI_LXOR=$MPI_LXOR) - parameter (MPI_BXOR=$MPI_BXOR) - parameter (MPI_MAXLOC=$MPI_MAXLOC) - parameter (MPI_MINLOC=$MPI_MINLOC) - parameter (MPI_REPLACE=$MPI_REPLACE) - - integer MPI_BYTE, MPI_PACKED, MPI_UB, MPI_LB - integer MPI_CHARACTER, MPI_LOGICAL - integer MPI_INTEGER, MPI_INTEGER1, MPI_INTEGER2, MPI_INTEGER4 - integer MPI_INTEGER8, MPI_INTEGER16 - integer MPI_REAL, MPI_REAL2, MPI_REAL4, MPI_REAL8, MPI_REAL16 - integer MPI_DOUBLE_PRECISION - integer MPI_COMPLEX, MPI_COMPLEX8, MPI_COMPLEX16, MPI_COMPLEX32 - integer MPI_DOUBLE_COMPLEX - integer MPI_2REAL, MPI_2DOUBLE_PRECISION, MPI_2INTEGER - integer MPI_2COMPLEX, MPI_2DOUBLE_COMPLEX - -! Note that MPI_LOGICALx are not defined by the MPI spec, but there are -! other MPI implementations that have them, so it's good for us to have -! as well. - - integer MPI_LOGICAL1, MPI_LOGICAL2, MPI_LOGICAL4, MPI_LOGICAL8 - -! All other MPI types including the C and C++, as well as the -! ones defined in the MPI 2.2 - - integer MPI_WCHAR, MPI_CHAR - integer MPI_SIGNED_CHAR, MPI_UNSIGNED_CHAR - integer MPI_SHORT, MPI_UNSIGNED_SHORT - integer MPI_INT, MPI_UNSIGNED, MPI_LONG - integer MPI_UNSIGNED_LONG, MPI_LONG_LONG_INT - integer MPI_UNSIGNED_LONG_LONG - integer MPI_FLOAT, MPI_DOUBLE, MPI_LONG_DOUBLE - integer MPI_FLOAT_INT, MPI_DOUBLE_INT - integer MPI_LONGDBL_INT, MPI_LONG_INT - integer MPI_2INT, MPI_SHORT_INT - integer MPI_CXX_BOOL, MPI_CXX_CPLEX - integer MPI_CXX_DBLCPLEX, MPI_CXX_LDBLCPLEX - integer MPI_INT8_T, MPI_UINT8_T - integer MPI_INT16_T, MPI_UINT16_T - integer MPI_INT32_T, MPI_UINT32_T - integer MPI_INT64_T, MPI_UINT64_T - integer MPI_AINT, MPI_OFFSET - -! -! Do NOT change the order of these parameters -! - - parameter (MPI_BYTE = $MPI_BYTE) - parameter (MPI_PACKED = $MPI_PACKED) - parameter (MPI_UB = $MPI_UB) - parameter (MPI_LB = $MPI_LB) - parameter (MPI_CHARACTER = $MPI_CHARACTER) - parameter (MPI_LOGICAL = $MPI_LOGICAL) - parameter (MPI_INTEGER = $MPI_INTEGER) - parameter (MPI_INTEGER1 = $MPI_INTEGER1) - parameter (MPI_INTEGER2 = $MPI_INTEGER2) - parameter (MPI_INTEGER4 = $MPI_INTEGER4) - parameter (MPI_INTEGER8 = $MPI_INTEGER8) - parameter (MPI_INTEGER16 = $MPI_INTEGER16) - parameter (MPI_REAL = $MPI_REAL) - parameter (MPI_REAL4 = $MPI_REAL4) - parameter (MPI_REAL8 = $MPI_REAL8) - parameter (MPI_REAL16 = $MPI_REAL16) - parameter (MPI_DOUBLE_PRECISION = $MPI_DOUBLE_PRECISION) - parameter (MPI_COMPLEX = $MPI_COMPLEX) - parameter (MPI_COMPLEX8 = $MPI_COMPLEX8) - parameter (MPI_COMPLEX16 = $MPI_COMPLEX16) - parameter (MPI_COMPLEX32 = $MPI_COMPLEX32) - parameter (MPI_DOUBLE_COMPLEX = $MPI_DOUBLE_COMPLEX) - parameter (MPI_2REAL = $MPI_2REAL) - parameter (MPI_2DOUBLE_PRECISION = $MPI_2DOUBLE_PRECISION) - parameter (MPI_2INTEGER = $MPI_2INTEGER) - parameter (MPI_2COMPLEX = $MPI_2COMPLEX) - parameter (MPI_2DOUBLE_COMPLEX = $MPI_2DOUBLE_COMPLEX) - parameter (MPI_REAL2 = $MPI_REAL2) - parameter (MPI_LOGICAL1 = $MPI_LOGICAL1) - parameter (MPI_LOGICAL2 = $MPI_LOGICAL2) - parameter (MPI_LOGICAL4 = $MPI_LOGICAL4) - parameter (MPI_LOGICAL8 = $MPI_LOGICAL8) - parameter (MPI_WCHAR = $MPI_WCHAR) - parameter (MPI_CHAR = $MPI_CHAR) - parameter (MPI_UNSIGNED_CHAR = $MPI_UNSIGNED_CHAR) - parameter (MPI_SIGNED_CHAR = $MPI_SIGNED_CHAR) - parameter (MPI_SHORT = $MPI_SHORT) - parameter (MPI_UNSIGNED_SHORT = $MPI_UNSIGNED_SHORT) - parameter (MPI_INT = $MPI_INT) - parameter (MPI_UNSIGNED = $MPI_UNSIGNED) - parameter (MPI_LONG = $MPI_LONG) - parameter (MPI_UNSIGNED_LONG = $MPI_UNSIGNED_LONG) - parameter (MPI_LONG_LONG_INT = $MPI_LONG_LONG_INT) - parameter (MPI_UNSIGNED_LONG_LONG = $MPI_UNSIGNED_LONG_LONG) - parameter (MPI_FLOAT = $MPI_FLOAT) - parameter (MPI_DOUBLE = $MPI_DOUBLE) - parameter (MPI_LONG_DOUBLE = $MPI_LONG_DOUBLE) - parameter (MPI_FLOAT_INT = $MPI_FLOAT_INT) - parameter (MPI_DOUBLE_INT = $MPI_DOUBLE_INT) - parameter (MPI_LONGDBL_INT = $MPI_LONGDBL_INT) - parameter (MPI_LONG_INT = $MPI_LONG_INT) - parameter (MPI_2INT = $MPI_2INT) - parameter (MPI_SHORT_INT = $MPI_SHORT_INT) - parameter (MPI_CXX_BOOL = $MPI_CXX_BOOL) - parameter (MPI_CXX_CPLEX = $MPI_CXX_CPLEX) - parameter (MPI_CXX_DBLCPLEX = $MPI_CXX_DBLCPLEX) - parameter (MPI_CXX_LDBLCPLEX = $MPI_CXX_LDBLCPLEX) - parameter (MPI_INT8_T = $MPI_INT8_T) - parameter (MPI_UINT8_T = $MPI_UINT8_T) - parameter (MPI_INT16_T = $MPI_INT16_T) - parameter (MPI_UINT16_T = $MPI_UINT16_T) - parameter (MPI_INT32_T = $MPI_INT32_T) - parameter (MPI_UINT32_T = $MPI_UINT32_T) - parameter (MPI_INT64_T = $MPI_INT64_T) - parameter (MPI_UINT64_T = $MPI_UINT64_T) - parameter (MPI_AINT = $MPI_AINT) - parameter (MPI_OFFSET = $MPI_OFFSET)\n"; - -# Write the file -write_file($filename_out, $input); - -# -# create ompi/mpi/fortran/use-mpi-f08/constants.h -# - -$filename_in = "$topdir/ompi/mpi/fortran/use-mpi-f08/constants.h.fin"; -$filename_out = $filename_in; -$filename_out =~ s/\.fin$//; - -$input = read_file($filename_in); - -# Add warning to the top -$input = "/* WARNING! THIS IS A GENERATED FILE!! - * ANY EDITS YOU PUT HERE WILL BE LOST! - * Instead, edit topdir/ompi/include/mpif-common.pl - */ - -$input"; - -# Add more to the end -$input .= " -#define OMPI_MPI_COMM_WORLD $MPI_COMM_WORLD -#define OMPI_MPI_COMM_SELF $MPI_COMM_SELF -#define OMPI_MPI_GROUP_EMPTY $MPI_GROUP_EMPTY -#define OMPI_MPI_ERRORS_ARE_FATAL $MPI_ERRORS_ARE_FATAL -#define OMPI_MPI_ERRORS_RETURN $MPI_ERRORS_RETURN - -/* - * lookup table indices - */ - -#define OMPI_MPI_MAX $MPI_MAX -#define OMPI_MPI_MIN $MPI_MIN -#define OMPI_MPI_SUM $MPI_SUM -#define OMPI_MPI_PROD $MPI_PROD -#define OMPI_MPI_LAND $MPI_LAND -#define OMPI_MPI_BAND $MPI_BAND -#define OMPI_MPI_LOR $MPI_LOR -#define OMPI_MPI_BOR $MPI_BOR -#define OMPI_MPI_LXOR $MPI_LXOR -#define OMPI_MPI_BXOR $MPI_BXOR -#define OMPI_MPI_MAXLOC $MPI_MAXLOC -#define OMPI_MPI_MINLOC $MPI_MINLOC -#define OMPI_MPI_REPLACE $MPI_REPLACE - -/* - * NULL 'handles' (indices) - */ - -#define OMPI_MPI_GROUP_NULL $MPI_GROUP_NULL -#define OMPI_MPI_COMM_NULL $MPI_COMM_NULL -#define OMPI_MPI_DATATYPE_NULL $MPI_DATATYPE_NULL -#define OMPI_MPI_REQUEST_NULL $MPI_REQUEST_NULL -#define OMPI_MPI_OP_NULL $MPI_OP_NULL -#define OMPI_MPI_ERRHANDLER_NULL $MPI_ERRHANDLER_NULL -#define OMPI_MPI_INFO_NULL $MPI_INFO_NULL -#define OMPI_MPI_WIN_NULL $MPI_WIN_NULL -#define OMPI_MPI_MESSAGE_NULL $MPI_MESSAGE_NULL - -#define OMPI_MPI_BYTE $MPI_BYTE -#define OMPI_MPI_PACKED $MPI_PACKED -#define OMPI_MPI_UB $MPI_UB -#define OMPI_MPI_LB $MPI_LB -#define OMPI_MPI_CHARACTER $MPI_CHARACTER -#define OMPI_MPI_LOGICAL $MPI_LOGICAL -#define OMPI_MPI_INTEGER $MPI_INTEGER -#define OMPI_MPI_INTEGER1 $MPI_INTEGER1 -#define OMPI_MPI_INTEGER2 $MPI_INTEGER2 -#define OMPI_MPI_INTEGER4 $MPI_INTEGER4 -#define OMPI_MPI_INTEGER8 $MPI_INTEGER8 -#define OMPI_MPI_INTEGER16 $MPI_INTEGER16 -#define OMPI_MPI_REAL $MPI_REAL -#define OMPI_MPI_REAL4 $MPI_REAL4 -#define OMPI_MPI_REAL8 $MPI_REAL8 -#define OMPI_MPI_REAL16 $MPI_REAL16 -#define OMPI_MPI_DOUBLE_PRECISION $MPI_DOUBLE_PRECISION -#define OMPI_MPI_COMPLEX $MPI_COMPLEX -#define OMPI_MPI_COMPLEX8 $MPI_COMPLEX8 -#define OMPI_MPI_COMPLEX16 $MPI_COMPLEX16 -#define OMPI_MPI_COMPLEX32 $MPI_COMPLEX32 -#define OMPI_MPI_DOUBLE_COMPLEX $MPI_DOUBLE_COMPLEX -#define OMPI_MPI_2REAL $MPI_2REAL -#define OMPI_MPI_2DOUBLE_PRECISION $MPI_2DOUBLE_PRECISION -#define OMPI_MPI_2INTEGER $MPI_2INTEGER -#define OMPI_MPI_2COMPLEX $MPI_2COMPLEX -#define OMPI_MPI_2DOUBLE_COMPLEX $MPI_2DOUBLE_COMPLEX -#define OMPI_MPI_REAL2 $MPI_REAL2 -#define OMPI_MPI_LOGICAL1 $MPI_LOGICAL1 -#define OMPI_MPI_LOGICAL2 $MPI_LOGICAL2 -#define OMPI_MPI_LOGICAL4 $MPI_LOGICAL4 -#define OMPI_MPI_LOGICAL8 $MPI_LOGICAL8\n - -#endif /* USE_MPI_F08_CONSTANTS_H */\n"; - -write_file($filename_out, $input); -exit(0); diff --git a/ompi/include/mpif-config.h.in b/ompi/include/mpif-config.h.in index a821cbf2cf..e512b4d35d 100644 --- a/ompi/include/mpif-config.h.in +++ b/ompi/include/mpif-config.h.in @@ -17,66 +17,22 @@ ! ! $HEADER$ ! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! -! Do ***not*** copy this file to the directory where your Fortran -! 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: -! -! shell$ mpif77 foo.f -o foo -I$OMPI_HOME/include -! -! will probably do the trick (assuming that you have set OMPI_HOME -! properly). -! -! That being said, OMPI's "mpif77" wrapper compiler should -! automatically include the -I option for you. The following command -! should be equivalent to the command listed above: -! -! shell$ mpif77 foo.f -o foo -! -! 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. -! Indeed, this mpif.h is incompatible with the mpif.f of other -! implementations of MPI. Using this mpif.h with other implementations -! of MPI, or with other versions of Open MPI will result in undefined -! behavior (to include incorrect results, segmentation faults, -! unexplainable "hanging" in your application, etc.). Always use the -! -I command line option instead (or let mpif77 do it for you). -! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! -! This file is included as a back-end file to both mpif.h (i.e., the -! standardized MPI Fortran header file) and a bunch of the MPI -! Fortran 90 subroutine implementations found in ompi/mpi/f90. ! ! This file contains the output from configure that is relevant for -! Fortran applications (both 77 and 90) and a few values that are -! necessary to compile the F90 module (e.g., MPI_STATUS_SIZE). +! Fortran applications and a few values that are necessary to +! compile the Fortran modules (e.g., MPI_STATUS_SIZE). ! -! Include the MPI I/O stuff, if needed - @OMPI_MPIF_MPI_IO_INCLUDE@ - ! ! OMPI version ! This file is generated from configure; do not edit it manually. ! integer OMPI_MAJOR_VERSION, OMPI_MINOR_VERSION integer OMPI_RELEASE_VERSION - character*32 OMPI_GREEK_VERSION - character*32 OMPI_SVN_VERSION parameter (OMPI_MAJOR_VERSION=@OMPI_MAJOR_VERSION@) parameter (OMPI_MINOR_VERSION=@OMPI_MINOR_VERSION@) parameter (OMPI_RELEASE_VERSION=@OMPI_RELEASE_VERSION@) - parameter (OMPI_GREEK_VERSION="@OMPI_GREEK_VERSION@") - parameter (OMPI_SVN_VERSION="@OMPI_SVN_VERSION@") ! ! Kind parameters ! diff --git a/ompi/include/mpif-externals.h b/ompi/include/mpif-externals.h new file mode 100644 index 0000000000..afeb89ac0c --- /dev/null +++ b/ompi/include/mpif-externals.h @@ -0,0 +1,44 @@ +! -*- 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. +! Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, +! University of Stuttgart. All rights reserved. +! Copyright (c) 2004-2005 The Regents of the University of California. +! All rights reserved. +! Copyright (c) 2006-2012 Cisco Systems, Inc. All rights reserved. +! $COPYRIGHT$ +! +! Additional copyrights may follow +! +! $HEADER$ +! + +! +! These "external" statements are specific to the MPI mpif.h +! interface (and are toxic to the MPI module interfaces),. +! + external MPI_NULL_COPY_FN, MPI_NULL_DELETE_FN + external MPI_COMM_NULL_COPY_FN, MPI_COMM_NULL_DELETE_FN + external MPI_TYPE_NULL_COPY_FN, MPI_TYPE_NULL_DELETE_FN + external MPI_DUP_FN, MPI_COMM_DUP_FN, MPI_TYPE_DUP_FN + external MPI_WIN_NULL_COPY_FN + external MPI_WIN_NULL_DELETE_FN + external MPI_WIN_DUP_FN +! Note that MPI_CONVERSION_FN_NULL is a "constant" (it is only ever +! checked for comparison; it is never invoked), but it is passed as +! a function pointer (to MPI_REGISTER_DATAREP) and therefore must be +! the same size/type. It is therefore external'ed here, and not +! defined with an integer value in mpif-common.h. + external MPI_CONVERSION_FN_NULL + +! +! double precision functions +! + external MPI_WTIME, MPI_WTICK , PMPI_WTICK, PMPI_WTIME + double precision MPI_WTIME, MPI_WTICK , PMPI_WTICK, PMPI_WTIME + diff --git a/ompi/include/mpif-sentinels.h b/ompi/include/mpif-sentinels.h new file mode 100644 index 0000000000..1e52528a39 --- /dev/null +++ b/ompi/include/mpif-sentinels.h @@ -0,0 +1,63 @@ +! -*- fortran -*- +! +! Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana +! University Research and Technology +! Corporation. All rights reserved. +! Copyright (c) 2004-2010 The University of Tennessee and The University +! of Tennessee Research Foundation. All rights +! reserved. +! Copyright (c) 2004-2007 High Performance Computing Center Stuttgart, +! University of Stuttgart. All rights reserved. +! Copyright (c) 2004-2005 The Regents of the University of California. +! All rights reserved. +! Copyright (c) 2006-2012 Cisco Systems, Inc. All rights reserved. +! Copyright (c) 2009 Oak Ridge National Labs. All rights reserved. +! $COPYRIGHT$ +! +! Additional copyrights may follow +! +! $HEADER$ +! + +! +! All of these types were chosen with care to match the types of +! their corresponding C variables. Do not arbitrarily change +! their types without also updating: +! +! - the "mpi" module bindings +! - the "mpi_f08" module bindings +! - ompi/mpi/fortran/base/constants.h +! - ompi/mpi/runtime/ompi_init.c +! + +! MPI_BOTTOM is only used where choice buffers can be used (meaning +! that we already have overloaded F90 bindings for all available +! types), so any type is fine. + integer MPI_BOTTOM +! MPI_IN_PLACE has the same rationale as MPI_BOTTOM. + integer MPI_IN_PLACE +! Making MPI_ARGV_NULL be the same type as the parameter that is +! exepected in the F90 binding for MPI_COMM_SPAWN means that we +! don't need another interface for MPI_COMM_SPAWN. + character MPI_ARGV_NULL(1) +! Ditto for MPI_ARGVS_NULL / MPI_COMM_SPAWN_MULTIPLE. + character MPI_ARGVS_NULL(1) +! MPI_ERRCODES_IGNORE has similar rationale to MPI_ARGV_NULL. The +! F77 functions are all smart enough to check that the errcodes +! parameter is not ERRCODES_IGNORE before assigning values into it +! (hence, the fact that this is an array of only 1 element does not +! matter -- we'll never overrun it because we never assign values +! into it). + integer MPI_ERRCODES_IGNORE(1) +! MPI_STATUS_IGNORE has similar rationale to MPI_ERRCODES_IGNORE. + integer MPI_STATUS_IGNORE(MPI_STATUS_SIZE) +! Ditto for MPI_STATUSES_IGNORE + integer MPI_STATUSES_IGNORE(MPI_STATUS_SIZE, 1) + + common/mpi_fortran_bottom/MPI_BOTTOM + common/mpi_fortran_in_place/MPI_IN_PLACE + common/mpi_fortran_argv_null/MPI_ARGV_NULL + common/mpi_fortran_argvs_null/MPI_ARGVS_NULL + common/mpi_fortran_errcodes_ignore/MPI_ERRCODES_IGNORE + common/mpi_fortran_status_ignore/MPI_STATUS_IGNORE + common/mpi_fortran_statuses_ignore/MPI_STATUSES_IGNORE diff --git a/ompi/include/mpif-values.pl b/ompi/include/mpif-values.pl new file mode 100755 index 0000000000..b27e9aa449 --- /dev/null +++ b/ompi/include/mpif-values.pl @@ -0,0 +1,460 @@ +#!/usr/bin/env perl +# + * Copyright (c) 2011-2012 Cisco Systems, Inc. All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +# This script creates header files to be compiled with the various +# Fortran bindings. In some cases, we need Fortran PARAMETER values; +# in other cases, we need #define preprocessor macros. +# +# This script generates both cases, and ensures that the values are +# the same between both (e.g., that MPI_COMM_WORLD is both a fortran +# INTEGER PARAMETER of value 0 and is #define'd to be 0). +# +# Additionally, since Open MPI provides the configure ability to +# compile out the entire MPI IO interface, all the IO +# handles/constants are generated in separate .h files in the +# non-preprocessor case, and included in relevant #if's in the +# preprocessor case. +# +# Files are generated in the following directories: +# +# ompi/include +# ompi/mpi/fortran/use-mpi-f08 +# + +use strict; + +#---------------------------------------------------------------------------- + +# Write an output file only if a) the output file does not already +# exist, or b) it exists, but its contents are different than $str. + +sub write_file { + my ($filename_out, $str) = @_; + + my $need_write = 0; + if (! -f $filename_out) { + $need_write = 1; + } else { + open(FILE_IN, $filename_out) || die "Couldn't open $filename_out"; + my $tmp; + $tmp .= $_ + while (); + close(FILE_IN); + if ($str ne $tmp) { + $need_write = 1; + } + } + + if ($need_write) { + open(FILE_OUT, ">$filename_out") || die "Couldn't open $filename_out"; + print FILE_OUT $str; + close(FILE_OUT); + print "created $filename_out\n"; + } else { + print "$filename_out unchanged; not written\n"; + } +} + +#---------------------------------------------------------------------------- + +print "creating Fortran header files (with common constants)...\n"; + +# Find the OMPI topdir. It is likely the pwd. +my $topdir; +if (-r "ompi/include/mpi.h.in") { + $topdir = "."; +} elsif (-r "include/mpi.h.in") { + $topdir = ".."; +} elsif (-r "mpi.h.in") { + $topdir = "../.."; +} else { + print "Please run this script from the Open MPI topdir or topdir/include/mpi\n"; + print "Aborting.\n"; + exit(1); +} + +#---------------------------------------------------------------------------- + +my $handles; + +$handles->{MPI_COMM_WORLD} = 0; +$handles->{MPI_COMM_SELF} = 1; +$handles->{MPI_GROUP_EMPTY} = 1; +$handles->{MPI_ERRORS_ARE_FATAL} = 1; +$handles->{MPI_ERRORS_RETURN} = 2; + +$handles->{MPI_MAX} = 1; +$handles->{MPI_MIN} = 2; +$handles->{MPI_SUM} = 3; +$handles->{MPI_PROD} = 4; +$handles->{MPI_LAND} = 5; +$handles->{MPI_BAND} = 6; +$handles->{MPI_LOR} = 7; +$handles->{MPI_BOR} = 8; +$handles->{MPI_LXOR} = 9; +$handles->{MPI_BXOR} = 10; +$handles->{MPI_MAXLOC} = 11; +$handles->{MPI_MINLOC} = 12; +$handles->{MPI_REPLACE} = 13; + +$handles->{MPI_COMM_NULL} = 2; +$handles->{MPI_DATATYPE_NULL} = 0; +$handles->{MPI_ERRHANDLER_NULL} = 0; +$handles->{MPI_GROUP_NULL} = 0; +$handles->{MPI_INFO_NULL} = 0; +$handles->{MPI_MESSAGE_NULL} = 0; +$handles->{MPI_OP_NULL} = 0; +$handles->{MPI_REQUEST_NULL} = 0; +$handles->{MPI_WIN_NULL} = 0; +$handles->{MPI_MESSAGE_NULL} = 0; + +$handles->{MPI_BYTE} = 1; +$handles->{MPI_PACKED} = 2; +$handles->{MPI_UB} = 3; +$handles->{MPI_LB} = 4; +$handles->{MPI_CHARACTER} = 5; +$handles->{MPI_LOGICAL} = 6; +$handles->{MPI_INTEGER} = 7; +$handles->{MPI_INTEGER1} = 8; +$handles->{MPI_INTEGER2} = 9; +$handles->{MPI_INTEGER4} = 10; +$handles->{MPI_INTEGER8} = 11; +$handles->{MPI_INTEGER16} = 12; +$handles->{MPI_REAL} = 13; +$handles->{MPI_REAL4} = 14; +$handles->{MPI_REAL8} = 15; +$handles->{MPI_REAL16} = 16; +$handles->{MPI_DOUBLE_PRECISION} = 17; +$handles->{MPI_COMPLEX} = 18; +$handles->{MPI_COMPLEX8} = 19; +$handles->{MPI_COMPLEX16} = 20; +$handles->{MPI_COMPLEX32} = 21; +$handles->{MPI_DOUBLE_COMPLEX} = 22; +$handles->{MPI_2REAL} = 23; +$handles->{MPI_2DOUBLE_PRECISION} = 24; +$handles->{MPI_2INTEGER} = 25; +$handles->{MPI_2COMPLEX} = 26; +$handles->{MPI_2DOUBLE_COMPLEX} = 27; +$handles->{MPI_REAL2} = 28; +$handles->{MPI_LOGICAL1} = 29; +$handles->{MPI_LOGICAL2} = 30; +$handles->{MPI_LOGICAL4} = 31; +$handles->{MPI_LOGICAL8} = 32; +$handles->{MPI_WCHAR} = 33; +$handles->{MPI_CHAR} = 34; +$handles->{MPI_UNSIGNED_CHAR} = 35; +$handles->{MPI_SIGNED_CHAR} = 36; +$handles->{MPI_SHORT} = 37; +$handles->{MPI_UNSIGNED_SHORT} = 38; +$handles->{MPI_INT} = 39; +$handles->{MPI_UNSIGNED} = 40; +$handles->{MPI_LONG} = 41; +$handles->{MPI_UNSIGNED_LONG} = 42; +$handles->{MPI_LONG_LONG_INT} = 43; +$handles->{MPI_UNSIGNED_LONG_LONG} = 44; +$handles->{MPI_FLOAT} = 45; +$handles->{MPI_DOUBLE} = 46; +$handles->{MPI_LONG_DOUBLE} = 47; +$handles->{MPI_FLOAT_INT} = 48; +$handles->{MPI_DOUBLE_INT} = 49; +$handles->{MPI_LONGDBL_INT} = 50; +$handles->{MPI_LONG_INT} = 51; +$handles->{MPI_2INT} = 52; +$handles->{MPI_SHORT_INT} = 53; +$handles->{MPI_CXX_BOOL} = 54; +$handles->{MPI_CXX_CPLEX} = 55; +$handles->{MPI_CXX_DBLCPLEX} = 56; +$handles->{MPI_CXX_LDBLCPLEX} = 57; +$handles->{MPI_INT8_T} = 58; +$handles->{MPI_UINT8_T} = 59; +$handles->{MPI_INT16_T} = 60; +$handles->{MPI_UINT16_T} = 61; +$handles->{MPI_INT32_T} = 62; +$handles->{MPI_UINT32_T} = 63; +$handles->{MPI_INT64_T} = 64; +$handles->{MPI_UINT64_T} = 65; +$handles->{MPI_AINT} = 66; +$handles->{MPI_OFFSET} = 67; + +$handles->{MPI_MESSAGE_NO_PROC} = 1; + +#---------------------------------------------------------------------------- + +my $io_handles; + +$io_handles->{MPI_FILE_NULL} = 0; + +#---------------------------------------------------------------------------- + +my $constants; + +$constants->{MPI_VERSION} = 2; +$constants->{MPI_SUBVERSION} = 1; + +$constants->{MPI_ANY_SOURCE} = -1; +$constants->{MPI_ANY_TAG} = -1; +$constants->{MPI_PROC_NULL} = -2; +$constants->{MPI_ROOT} = -4; +$constants->{MPI_UNDEFINED} = -32766; +$constants->{MPI_CART} = 1; +$constants->{MPI_GRAPH} = 2; +$constants->{MPI_KEYVAL_INVALID} = -1; +$constants->{MPI_SOURCE} = 1; +$constants->{MPI_TAG} = 2; +$constants->{MPI_ERROR} = 3; +$constants->{MPI_TAG_UB} = 0; +$constants->{MPI_HOST} = 1; +$constants->{MPI_IO} = 2; +$constants->{MPI_WTIME_IS_GLOBAL} = 3; +$constants->{MPI_APPNUM} = 4; +$constants->{MPI_LASTUSEDCODE} = 5; +$constants->{MPI_UNIVERSE_SIZE} = 6; +$constants->{MPI_WIN_BASE} = 7; +$constants->{MPI_WIN_SIZE} = 8; +$constants->{MPI_WIN_DISP_UNIT} = 9; + +$constants->{MPI_BSEND_OVERHEAD} = 128; +$constants->{MPI_ORDER_C} = 0; +$constants->{MPI_ORDER_FORTRAN} = 1; +$constants->{MPI_DISTRIBUTE_BLOCK} = 0; +$constants->{MPI_DISTRIBUTE_CYCLIC} = 1; +$constants->{MPI_DISTRIBUTE_NONE} = 2; +$constants->{MPI_DISTRIBUTE_DFLT_DARG} = -1; +$constants->{MPI_TYPECLASS_INTEGER} = 1; +$constants->{MPI_TYPECLASS_REAL} = 2; +$constants->{MPI_TYPECLASS_COMPLEX} = 3; +$constants->{MPI_MODE_NOCHECK} = 1; +$constants->{MPI_MODE_NOPRECEDE} = 2; +$constants->{MPI_MODE_NOPUT} = 4; +$constants->{MPI_MODE_NOSTORE} = 8; +$constants->{MPI_MODE_NOSUCCEED} = 16; +$constants->{MPI_LOCK_EXCLUSIVE} = 1; +$constants->{MPI_LOCK_SHARED} = 2; + +$constants->{MPI_THREAD_SINGLE} = 0; +$constants->{MPI_THREAD_FUNNELED} = 1; +$constants->{MPI_THREAD_SERIALIZED} = 2; +$constants->{MPI_THREAD_MULTIPLE} = 3; + +$constants->{MPI_SUCCESS} = 0; +$constants->{MPI_ERR_BUFFER} = 1; +$constants->{MPI_ERR_COUNT} = 2; +$constants->{MPI_ERR_TYPE} = 3; +$constants->{MPI_ERR_TAG} = 4; +$constants->{MPI_ERR_COMM} = 5; +$constants->{MPI_ERR_RANK} = 6; +$constants->{MPI_ERR_REQUEST} = 7; +$constants->{MPI_ERR_ROOT} = 8; +$constants->{MPI_ERR_GROUP} = 9; +$constants->{MPI_ERR_OP} = 10; +$constants->{MPI_ERR_TOPOLOGY} = 11; +$constants->{MPI_ERR_DIMS} = 12; +$constants->{MPI_ERR_ARG} = 13; +$constants->{MPI_ERR_UNKNOWN} = 14; +$constants->{MPI_ERR_TRUNCATE} = 15; +$constants->{MPI_ERR_OTHER} = 16; +$constants->{MPI_ERR_INTERN} = 17; +$constants->{MPI_ERR_IN_STATUS} = 18; +$constants->{MPI_ERR_PENDING} = 19; +$constants->{MPI_ERR_ACCESS} = 20; +$constants->{MPI_ERR_AMODE} = 21; +$constants->{MPI_ERR_ASSERT} = 22; +$constants->{MPI_ERR_BAD_FILE} = 23; +$constants->{MPI_ERR_BASE} = 24; +$constants->{MPI_ERR_CONVERSION} = 25; +$constants->{MPI_ERR_DISP} = 26; +$constants->{MPI_ERR_DUP_DATAREP} = 27; +$constants->{MPI_ERR_FILE_EXISTS} = 28; +$constants->{MPI_ERR_FILE_IN_USE} = 29; +$constants->{MPI_ERR_FILE} = 30; +$constants->{MPI_ERR_INFO_KEY} = 31; +$constants->{MPI_ERR_INFO_NOKEY} = 32; +$constants->{MPI_ERR_INFO_VALUE} = 33; +$constants->{MPI_ERR_INFO} = 34; +$constants->{MPI_ERR_IO} = 35; +$constants->{MPI_ERR_KEYVAL} = 36; +$constants->{MPI_ERR_LOCKTYPE} = 37; +$constants->{MPI_ERR_NAME} = 38; +$constants->{MPI_ERR_NO_MEM} = 39; +$constants->{MPI_ERR_NOT_SAME} = 40; +$constants->{MPI_ERR_NO_SPACE} = 41; +$constants->{MPI_ERR_NO_SUCH_FILE} = 42; +$constants->{MPI_ERR_PORT} = 43; +$constants->{MPI_ERR_QUOTA} = 44; +$constants->{MPI_ERR_READ_ONLY} = 45; +$constants->{MPI_ERR_RMA_CONFLICT} = 46; +$constants->{MPI_ERR_RMA_SYNC} = 47; +$constants->{MPI_ERR_SERVICE} = 48; +$constants->{MPI_ERR_SIZE} = 49; +$constants->{MPI_ERR_SPAWN} = 50; +$constants->{MPI_ERR_UNSUPPORTED_DATAREP} = 51; +$constants->{MPI_ERR_UNSUPPORTED_OPERATION} = 53; +$constants->{MPI_ERR_LASTCODE} = 54; + +$constants->{MPI_ERR_SYSRESOURCE} = -2; + +$constants->{MPI_IDENT} = 0; +$constants->{MPI_CONGRUENT} = 1; +$constants->{MPI_SIMILAR} = 2; +$constants->{MPI_UNEQUAL} = 3; + +$constants->{MPI_COMBINER_NAMED} = 0; +$constants->{MPI_COMBINER_DUP} = 1; +$constants->{MPI_COMBINER_CONTIGUOUS} = 2; +$constants->{MPI_COMBINER_VECTOR} = 3; +$constants->{MPI_COMBINER_HVECTOR_INTEGER} = 4; +$constants->{MPI_COMBINER_HVECTOR} = 5; +$constants->{MPI_COMBINER_INDEXED} = 6; +$constants->{MPI_COMBINER_HINDEXED_INTEGER} = 7; +$constants->{MPI_COMBINER_HINDEXED} = 8; +$constants->{MPI_COMBINER_INDEXED_BLOCK} = 9; +$constants->{MPI_COMBINER_STRUCT_INTEGER} = 10; +$constants->{MPI_COMBINER_STRUCT} = 11; +$constants->{MPI_COMBINER_SUBARRAY} = 12; +$constants->{MPI_COMBINER_DARRAY} = 13; +$constants->{MPI_COMBINER_F90_REAL} = 14; +$constants->{MPI_COMBINER_F90_COMPLEX} = 15; +$constants->{MPI_COMBINER_F90_INTEGER} = 16; +$constants->{MPI_COMBINER_RESIZED} = 17; +$constants->{MPI_COMBINER_HINDEXED_BLOCK} = 18; + +$constants->{MPI_COMM_TYPE_SHARED} = 0; + +#---------------------------------------------------------------------------- + +my $io_constants; + +$io_constants->{MPI_SEEK_SET} = 600; +$io_constants->{MPI_SEEK_CUR} = 602; +$io_constants->{MPI_SEEK_END} = 604; +$io_constants->{MPI_MODE_CREATE} = 1; +$io_constants->{MPI_MODE_RDONLY} = 2; +$io_constants->{MPI_MODE_WRONLY} = 4; +$io_constants->{MPI_MODE_RDWR} = 8; +$io_constants->{MPI_MODE_DELETE_ON_CLOSE} = 16; +$io_constants->{MPI_MODE_UNIQUE_OPEN} = 32; +$io_constants->{MPI_MODE_EXCL} = 64; +$io_constants->{MPI_MODE_APPEND} = 128; +$io_constants->{MPI_MODE_SEQUENTIAL} = 256; +$io_constants->{MPI_DISPLACEMENT_CURRENT} = -54278278; + +#---------------------------------------------------------------------------- + +# Fortran handles file + +my $header = '! -*- fortran -*- +! WARNING! THIS IS A GENERATED FILE!! +! ANY EDITS YOU PUT HERE WILL BE LOST! +! ==> Instead, edit topdir/ompi/include/mpif-values.pl. + +! Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana +! University Research and Technology +! Corporation. All rights reserved. +! Copyright (c) 2004-2010 The University of Tennessee and The University +! of Tennessee Research Foundation. All rights +! reserved. +! Copyright (c) 2004-2007 High Performance Computing Center Stuttgart, +! University of Stuttgart. All rights reserved. +! Copyright (c) 2004-2005 The Regents of the University of California. +! All rights reserved. +! Copyright (c) 2006-2012 Cisco Systems, Inc. All rights reserved. +! Copyright (c) 2009 Oak Ridge National Labs. All rights reserved. +! $COPYRIGHT$ +! +! Additional copyrights may follow +! +! $HEADER$ +! + +'; + +sub write_fortran_file { + my ($header, $vals, $file) = @_; + + foreach my $key (sort(keys(%{$vals}))) { + $header .= " integer $key\n"; + } + $header .= "\n"; + foreach my $key (sort(keys(%{$vals}))) { + $header .= " parameter ($key=$vals->{$key})\n"; + } + + write_file($file, $header); +} + +write_fortran_file($header, $handles, + "$topdir/ompi/include/mpif-handles.h"); +write_fortran_file($header, $constants, + "$topdir/ompi/include/mpif-constants.h"); +write_fortran_file($header, $io_handles, + "$topdir/ompi/include/mpif-io-handles.h"); +write_fortran_file($header, $io_constants, + "$topdir/ompi/include/mpif-io-constants.h"); + +#---------------------------------------------------------------------------- + +# Create preprocessor files + +my $output = '/* WARNING! THIS IS A GENERATED FILE!! + * ANY EDITS YOU PUT HERE WILL BE LOST! + * Instead, edit topdir/ompi/include/mpif-values.pl + */ + +/* + * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana + * University Research and Technology + * Corporation. All rights reserved. + * Copyright (c) 2004-2006 The University of Tennessee and The University + * of Tennessee Research Foundation. All rights + * reserved. + * Copyright (c) 2004-2007 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * Copyright (c) 2007-2009 Cisco Systems, Inc. All rights reserved. + * Copyright (c) 2008-2009 Sun Microsystems, Inc. All rights reserved. + * Copyright (c) 2009 Oak Ridge National Labs. All rights reserved. + * Copyright (c) 2009-2012 Los Alamos National Security, LLC. + * All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#ifndef USE_MPI_F08_CONSTANTS_H +#define USE_MPI_F08_CONSTANTS_H + +'; + +foreach my $key (sort(keys(%{$constants}))) { + $output .= "#define OMPI_$key $constants->{$key}\n"; +} +$output .= "\n"; +foreach my $key (sort(keys(%{$handles}))) { + $output .= "#define OMPI_$key $handles->{$key}\n"; +} + +$output .= "\n#if OMPI_PROVIDE_MPI_FILE_INTERFACE\n"; +foreach my $key (sort(keys(%{$io_constants}))) { + $output .= "#define OMPI_$key $io_constants->{$key}\n"; +} +$output .= "\n"; +foreach my $key (sort(keys(%{$io_handles}))) { + $output .= "#define OMPI_$key $io_handles->{$key}\n"; +} +$output .= "#endif /* OMPI_PROVIDE_MPI_FILE_INTERFACE */ + +#endif /* USE_MPI_F08_CONSTANTS_H */\n"; + +write_file("$topdir/ompi/mpi/fortran/use-mpi-f08/constants.h", $output); + +exit(0); diff --git a/ompi/include/mpif.h.in b/ompi/include/mpif.h.in index 61ebc7ade0..e6c7ede71b 100644 --- a/ompi/include/mpif.h.in +++ b/ompi/include/mpif.h.in @@ -10,7 +10,7 @@ ! University of Stuttgart. All rights reserved. ! Copyright (c) 2004-2005 The Regents of the University of California. ! All rights reserved. -! Copyright (c) 2006-2007 Cisco Systems, Inc. All rights reserved. +! Copyright (c) 2006-2012 Cisco Systems, Inc. All rights reserved. ! $COPYRIGHT$ ! ! Additional copyrights may follow @@ -51,35 +51,10 @@ ! WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -! -! Include the back-end file that has the bulk of the MPI Fortran -! interface. -! - - include 'mpif-common.h' - -! -! These "external" statements are specific to the MPI mpif.h interface -! (and are toxic to the MPI F90 interface), and are therefore in the -! MPI Fortran-specific header file (i.e., this one). -! - external MPI_NULL_COPY_FN, MPI_NULL_DELETE_FN - external MPI_COMM_NULL_COPY_FN, MPI_COMM_NULL_DELETE_FN - external MPI_TYPE_NULL_COPY_FN, MPI_TYPE_NULL_DELETE_FN - external MPI_DUP_FN, MPI_COMM_DUP_FN, MPI_TYPE_DUP_FN - external MPI_WIN_NULL_COPY_FN - external MPI_WIN_NULL_DELETE_FN - external MPI_WIN_DUP_FN -! Note that MPI_CONVERSION_FN_NULL is a "constant" (it is only ever -! checked for comparison; it is never invoked), but it is passed as -! a function pointer (to MPI_REGISTER_DATAREP) and therefore must be -! the same size/type. It is therefore external'ed here, and not -! defined with an integer value in mpif-common.h. - external MPI_CONVERSION_FN_NULL - -! -! double precision functions -! - external MPI_WTIME, MPI_WTICK @MPIF_H_PMPI_W_FUNCS@ - double precision MPI_WTIME, MPI_WTICK @MPIF_H_PMPI_W_FUNCS@ - + 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' diff --git a/ompi/mca/io/configure.m4 b/ompi/mca/io/configure.m4 index 014bfba3e2..a57d77fee6 100644 --- a/ompi/mca/io/configure.m4 +++ b/ompi/mca/io/configure.m4 @@ -2,6 +2,7 @@ # # Copyright (c) 2006-2007 Los Alamos National Security, LLC. # All rights reserved. +# Copyright (c) 2012 Cisco Systems, Inc. All rights reserved. # $COPYRIGHT$ # # Additional copyrights may follow @@ -20,16 +21,22 @@ AC_DEFUN([MCA_ompi_io_CONFIG], Default is to use the internal component system and its specially modified version of ROMIO])]) + OMPI_MPIF_IO_CONSTANTS_INCLUDE= + OMPI_MPIF_IO_HANDLES_INCLUDE= AS_IF([test "$enable_mpi_io" != "no"], [define_mpi_io=1 - OMPI_MPIF_MPI_IO_INCLUDE="include \"mpif-mpi-io.h\""], - [define_mpi_io=0 - OMPI_MPIF_MPI_IO_INCLUDE=""]) + OMPI_MPIF_IO_CONSTANTS_INCLUDE="include \"mpif-io-constants.h\"" + OMPI_MPIF_IO_HANDLES_INCLUDE="include \"mpif-io-handles.h\""], + [define_mpi_io=0]) + AC_SUBST(OMPI_MPIF_IO_CONSTANTS_INCLUDE) + AC_SUBST(OMPI_MPIF_IO_HANDLES_INCLUDE) MCA_CONFIGURE_FRAMEWORK([$1], [$2], [$define_mpi_io]) + OMPI_PROVIDE_MPI_FILE_INTERFACE=$define_mpi_io + AC_SUBST(OMPI_PROVIDE_MPI_FILE_INTERFACE) AC_DEFINE_UNQUOTED([OMPI_PROVIDE_MPI_FILE_INTERFACE], [$define_mpi_io], [Whether OMPI should provide MPI File interface]) AM_CONDITIONAL([OMPI_PROVIDE_MPI_FILE_INTERFACE], [test "$define_mpi_io" = "1"]) - AC_SUBST([OMPI_MPIF_MPI_IO_INCLUDE]) + ]) diff --git a/ompi/mpi/fortran/base/constants.h b/ompi/mpi/fortran/base/constants.h index 0208a92aa3..095c9bc578 100644 --- a/ompi/mpi/fortran/base/constants.h +++ b/ompi/mpi/fortran/base/constants.h @@ -100,13 +100,13 @@ DECL(int, MPI_FORTRAN_IN_PLACE, mpi_fortran_in_place, mpi_fortran_in_place_, mpi_fortran_in_place__); DECL(char *, MPI_FORTRAN_ARGV_NULL, mpi_fortran_argv_null, mpi_fortran_argv_null_, mpi_fortran_argv_null__); -DECL(double, MPI_FORTRAN_ARGVS_NULL, mpi_fortran_argvs_null, +DECL(char *, MPI_FORTRAN_ARGVS_NULL, mpi_fortran_argvs_null, mpi_fortran_argvs_null_, mpi_fortran_argvs_null__); DECL(int *, MPI_FORTRAN_ERRCODES_IGNORE, mpi_fortran_errcodes_ignore, mpi_fortran_errcodes_ignore_, mpi_fortran_errcodes_ignore__); DECL(int *, MPI_FORTRAN_STATUS_IGNORE, mpi_fortran_status_ignore, mpi_fortran_status_ignore_, mpi_fortran_status_ignore__); -DECL(double, MPI_FORTRAN_STATUSES_IGNORE, mpi_fortran_statuses_ignore, +DECL(int *, MPI_FORTRAN_STATUSES_IGNORE, mpi_fortran_statuses_ignore, mpi_fortran_statuses_ignore_, mpi_fortran_statuses_ignore__); /* diff --git a/ompi/mpi/fortran/base/mpi-f08-interfaces-callbacks.F90 b/ompi/mpi/fortran/base/mpi-f08-interfaces-callbacks.F90 index 21dbeeaaa4..1b497660bb 100644 --- a/ompi/mpi/fortran/base/mpi-f08-interfaces-callbacks.F90 +++ b/ompi/mpi/fortran/base/mpi-f08-interfaces-callbacks.F90 @@ -156,6 +156,8 @@ SUBROUTINE MPI_Win_errhandler_function(win, error_code) & END SUBROUTINE END INTERFACE +#if OMPI_PROVIDE_MPI_FILE_INTERFACE + OMPI_ABSTRACT INTERFACE SUBROUTINE MPI_File_errhandler_function(file, error_code) & BIND(C) @@ -166,6 +168,8 @@ SUBROUTINE MPI_File_errhandler_function(file, error_code) & END SUBROUTINE END INTERFACE +#endif + OMPI_ABSTRACT INTERFACE SUBROUTINE MPI_Grequest_query_function(extra_state,status,ierror) & BIND(C) diff --git a/ompi/mpi/fortran/base/mpi-f08-interfaces.F90 b/ompi/mpi/fortran/base/mpi-f08-interfaces.F90 index 9fe00bfc23..b9fdde739e 100644 --- a/ompi/mpi/fortran/base/mpi-f08-interfaces.F90 +++ b/ompi/mpi/fortran/base/mpi-f08-interfaces.F90 @@ -461,7 +461,7 @@ subroutine MPI_Testall_f08(count,array_of_requests,flag,array_of_statuses,ierror INTEGER, INTENT(IN) :: count TYPE(MPI_Request), INTENT(INOUT) :: array_of_requests(count) LOGICAL, INTENT(OUT) :: flag - TYPE(MPI_Status) :: array_of_statuses(count) + TYPE(MPI_Status) :: array_of_statuses(*) INTEGER, OPTIONAL, INTENT(OUT) :: ierror end subroutine MPI_Testall_f08 end interface MPI_Testall @@ -523,7 +523,7 @@ subroutine MPI_Waitall_f08(count,array_of_requests,array_of_statuses,ierror & implicit none INTEGER, INTENT(IN) :: count TYPE(MPI_Request), INTENT(INOUT) :: array_of_requests(count) - TYPE(MPI_Status) :: array_of_statuses(count) + TYPE(MPI_Status) :: array_of_statuses(*) INTEGER, OPTIONAL, INTENT(OUT) :: ierror end subroutine MPI_Waitall_f08 end interface MPI_Waitall @@ -2564,7 +2564,7 @@ subroutine MPI_Error_string_f08(errorcode,string,resultlen,ierror) end subroutine MPI_Error_string_f08 end interface MPI_Error_string -#if OMPI_PROFILE_FILE_INTERFACE +#if OMPI_PROVIDE_MPI_FILE_INTERFACE interface MPI_File_call_errhandler subroutine MPI_File_call_errhandler_f08(fh,errorcode,ierror & @@ -2611,7 +2611,7 @@ subroutine MPI_File_set_errhandler_f08(file,errhandler,ierror & end subroutine MPI_File_set_errhandler_f08 end interface MPI_File_set_errhandler -#endif ! OMPI_PROFILE_FILE_INTERFACE +#endif ! OMPI_PROVIDE_MPI_FILE_INTERFACE interface MPI_Finalize subroutine MPI_Finalize_f08(ierror & @@ -2903,7 +2903,7 @@ subroutine MPI_Comm_spawn_f08(command,argv,maxprocs,info,root,comm,intercomm, & TYPE(MPI_Info), INTENT(IN) :: info TYPE(MPI_Comm), INTENT(IN) :: comm TYPE(MPI_Comm), INTENT(OUT) :: intercomm - INTEGER, INTENT(OUT) :: array_of_errcodes(*) + INTEGER :: array_of_errcodes(*) INTEGER, OPTIONAL, INTENT(OUT) :: ierror end subroutine MPI_Comm_spawn_f08 end interface MPI_Comm_spawn @@ -2919,7 +2919,7 @@ subroutine MPI_Comm_spawn_multiple_f08(count,array_of_commands,array_of_argv,arr TYPE(MPI_Info), INTENT(IN) :: array_of_info(*) TYPE(MPI_Comm), INTENT(IN) :: comm TYPE(MPI_Comm), INTENT(OUT) :: intercomm - INTEGER, INTENT(OUT) :: array_of_errcodes(*) + INTEGER :: array_of_errcodes(*) INTEGER, OPTIONAL, INTENT(OUT) :: ierror end subroutine MPI_Comm_spawn_multiple_f08 end interface MPI_Comm_spawn_multiple @@ -3233,7 +3233,7 @@ subroutine MPI_Status_set_elements_f08(status,datatype,count,ierror & end subroutine MPI_Status_set_elements_f08 end interface MPI_Status_set_elements -#if OMPI_PROFILE_FILE_INTERFACE +#if OMPI_PROVIDE_MPI_FILE_INTERFACE interface MPI_File_close subroutine MPI_File_close_f08(fh,ierror & @@ -4004,7 +4004,7 @@ subroutine MPI_File_write_shared_f08(fh,buf,count,datatype,status,ierror & end subroutine MPI_File_write_shared_f08 end interface MPI_File_write_shared -#endif ! OMPI_PROFILE_FILE_INTERFACE +#endif ! OMPI_PROVIDE_MPI_FILE_INTERFACE interface MPI_Register_datarep subroutine MPI_Register_datarep_f08(datarep,read_conversion_fn,write_conversion_fn, & @@ -4110,6 +4110,18 @@ subroutine MPI_Comm_split_type_f08(comm,split_type,key,info,newcomm,ierror & end subroutine MPI_Comm_split_type_f08 end interface MPI_Comm_split_type +interface MPI_F_sync_reg +subroutine MPI_F_sync_reg_f08(buf & + ) OMPI_F08_INTERFACE_BIND_C("MPI_F_sync_reg_f08") + implicit none + !DEC$ ATTRIBUTES NO_ARG_CHECK :: buf + !$PRAGMA IGNORE_TKR buf + !DIR$ IGNORE_TKR buf + !IBM* IGNORE_TKR buf + OMPI_FORTRAN_IGNORE_TKR_TYPE OMPI_ASYNCHRONOUS :: buf +end subroutine MPI_F_sync_reg_f08 +end interface MPI_F_sync_reg + interface MPI_Get_library_version subroutine MPI_Get_library_version_f08(name,resultlen,ierror) use :: mpi_f08_types, only : MPI_MAX_PROCESSOR_NAME diff --git a/ompi/mpi/fortran/base/mpi-f08-types.F90 b/ompi/mpi/fortran/base/mpi-f08-types.F90 index 88bd025fc4..b3807c2330 100644 --- a/ompi/mpi/fortran/base/mpi-f08-types.F90 +++ b/ompi/mpi/fortran/base/mpi-f08-types.F90 @@ -15,7 +15,11 @@ module mpi_f08_types use, intrinsic :: ISO_C_BINDING - include "mpif-all-common.h" + include "mpif-config.h" + include "mpif-constants.h" +#if OMPI_PROVIDE_MPI_FILE_INTERFACE + include "mpif-io-constants.h" +#endif ! ! kind parameters @@ -40,9 +44,11 @@ module mpi_f08_types integer :: MPI_VAL end type MPI_Errhandler +#if OMPI_PROVIDE_MPI_FILE_INTERFACE type, BIND(C) :: MPI_File integer :: MPI_VAL end type MPI_File +#endif type, BIND(C) :: MPI_Group integer :: MPI_VAL @@ -85,18 +91,18 @@ module mpi_f08_types logical, parameter :: MPI_ASYNCHRONOUS_PROTECTS_NONBL = .false. ! - ! Pre-defined communicator bindings + ! Pre-defined handles ! type(MPI_Comm), protected, bind(C, name="ompi_f08_mpi_comm_world") :: MPI_COMM_WORLD type(MPI_Comm), protected, bind(C, name="ompi_f08_mpi_comm_self") :: MPI_COMM_SELF + type(MPI_Group), protected, bind(C, name="ompi_f08_mpi_group_empty") :: MPI_GROUP_EMPTY + type(MPI_Errhandler), protected, bind(C, name="ompi_f08_mpi_errors_are_fatal") :: MPI_ERRORS_ARE_FATAL type(MPI_Errhandler), protected, bind(C, name="ompi_f08_mpi_errors_return") :: MPI_ERRORS_RETURN - ! - ! lookup table indices - ! + type(MPI_Message), protected, bind(C, name="ompi_f08_mpi_message_no_proc") :: MPI_MESSAGE_NO_PROC type(MPI_Op), protected, bind(C, name="ompi_f08_mpi_max" ) :: MPI_MAX type(MPI_Op), protected, bind(C, name="ompi_f08_mpi_min" ) :: MPI_MIN @@ -125,6 +131,9 @@ module mpi_f08_types type(MPI_Op), protected, bind(C, name="ompi_f08_mpi_op_null") :: MPI_OP_NULL; type(MPI_Request), protected, bind(C, name="ompi_f08_mpi_request_null") :: MPI_REQUEST_NULL; type(MPI_Win), protected, bind(C, name="ompi_f08_mpi_win_null") :: MPI_WIN_NULL; +#if OMPI_PROVIDE_MPI_FILE_INTERFACE + type(MPI_File), protected, bind(C, name="ompi_f08_mpi_file_null") :: MPI_FILE_NULL; +#endif ! ! Pre-defined datatype bindings @@ -166,15 +175,156 @@ module mpi_f08_types type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_logical4") :: MPI_LOGICAL4 type(MPI_Datatype), protected, bind(C, name="ompi_f08_mpi_logical8") :: MPI_LOGICAL8 -! -! Special sentinel constants -! +!... Special sentinel constants +!------------------------------ type(MPI_STATUS), bind(C, name="mpi_fortran_status_ignore") :: MPI_STATUS_IGNORE type(MPI_STATUS), bind(C, name="mpi_fortran_statuses_ignore") :: MPI_STATUSES_IGNORE(1) - integer, bind(C, name="mpi_fortran_bottom") :: MPI_BOTTOM = C_INT - integer, bind(C, name="mpi_fortran_in_place") :: MPI_IN_PLACE = C_INT - integer, bind(C, name="mpi_fortran_argv_null") :: MPI_ARGV_NULL = C_INT - integer, bind(C, name="mpi_fortran_argvs_null") :: MPI_ARGVS_NULL = C_INT - integer, bind(C, name="mpi_fortran_errcodes_ignore") :: MPI_ERRCODES_IGNORE = C_INT + integer, bind(C, name="mpi_fortran_bottom") :: MPI_BOTTOM + integer, bind(C, name="mpi_fortran_in_place") :: MPI_IN_PLACE + integer, bind(C, name="mpi_fortran_argv_null") :: MPI_ARGV_NULL + integer, bind(C, name="mpi_fortran_argvs_null") :: MPI_ARGVS_NULL + integer, bind(C, name="mpi_fortran_errcodes_ignore") :: MPI_ERRCODES_IGNORE + +!... Interfaces for operators with handles +!----------------------------------------- +interface operator (.EQ.) + module procedure ompi_comm_op_eq + module procedure ompi_datatype_op_eq + module procedure ompi_errhandler_op_eq +#if OMPI_PROVIDE_MPI_FILE_INTERFACE + module procedure ompi_file_op_eq +#endif + module procedure ompi_group_op_eq + module procedure ompi_info_op_eq + module procedure ompi_message_op_eq + module procedure ompi_op_op_eq + module procedure ompi_request_op_eq + module procedure ompi_win_op_eq +end interface + +interface operator (.NE.) + module procedure ompi_comm_op_ne + module procedure ompi_datatype_op_ne + module procedure ompi_errhandler_op_ne +#if OMPI_PROVIDE_MPI_FILE_INTERFACE + module procedure ompi_file_op_ne +#endif + module procedure ompi_group_op_ne + module procedure ompi_info_op_ne + module procedure ompi_message_op_ne + module procedure ompi_op_op_ne + module procedure ompi_request_op_ne + module procedure ompi_win_op_ne +end interface + +contains + +!... .EQ. operator +!----------------- + logical function ompi_comm_op_eq(a, b) + type(MPI_Comm), intent(in) :: a, b + ompi_comm_op_eq = (a%MPI_VAL .EQ. b%MPI_VAL) + end function ompi_comm_op_eq + + logical function ompi_datatype_op_eq(a, b) + type(MPI_Datatype), intent(in) :: a, b + ompi_datatype_op_eq = (a%MPI_VAL .EQ. b%MPI_VAL) + end function ompi_datatype_op_eq + + logical function ompi_errhandler_op_eq(a, b) + type(MPI_Errhandler), intent(in) :: a, b + ompi_errhandler_op_eq = (a%MPI_VAL .EQ. b%MPI_VAL) + end function ompi_errhandler_op_eq + +#if OMPI_PROVIDE_MPI_FILE_INTERFACE + logical function ompi_file_op_eq(a, b) + type(MPI_File), intent(in) :: a, b + ompi_file_op_eq = (a%MPI_VAL .EQ. b%MPI_VAL) + end function ompi_file_op_eq +#endif + + logical function ompi_group_op_eq(a, b) + type(MPI_Group), intent(in) :: a, b + ompi_group_op_eq = (a%MPI_VAL .EQ. b%MPI_VAL) + end function ompi_group_op_eq + + logical function ompi_info_op_eq(a, b) + type(MPI_Info), intent(in) :: a, b + ompi_info_op_eq = (a%MPI_VAL .EQ. b%MPI_VAL) + end function ompi_info_op_eq + + logical function ompi_message_op_eq(a, b) + type(MPI_Message), intent(in) :: a, b + ompi_message_op_eq = (a%MPI_VAL .EQ. b%MPI_VAL) + end function ompi_message_op_eq + + logical function ompi_op_op_eq(a, b) + type(MPI_Op), intent(in) :: a, b + ompi_op_op_eq = (a%MPI_VAL .EQ. b%MPI_VAL) + end function ompi_op_op_eq + + logical function ompi_request_op_eq(a, b) + type(MPI_Request), intent(in) :: a, b + ompi_request_op_eq = (a%MPI_VAL .EQ. b%MPI_VAL) + end function ompi_request_op_eq + + logical function ompi_win_op_eq(a, b) + type(MPI_Win), intent(in) :: a, b + ompi_win_op_eq = (a%MPI_VAL .EQ. b%MPI_VAL) + end function ompi_win_op_eq + +!... .NE. operator +!----------------- + logical function ompi_comm_op_ne(a, b) + type(MPI_Comm), intent(in) :: a, b + ompi_comm_op_ne = (a%MPI_VAL .NE. b%MPI_VAL) + end function ompi_comm_op_ne + + logical function ompi_datatype_op_ne(a, b) + type(MPI_Datatype), intent(in) :: a, b + ompi_datatype_op_ne = (a%MPI_VAL .NE. b%MPI_VAL) + end function ompi_datatype_op_ne + + logical function ompi_errhandler_op_ne(a, b) + type(MPI_Errhandler), intent(in) :: a, b + ompi_errhandler_op_ne = (a%MPI_VAL .NE. b%MPI_VAL) + end function ompi_errhandler_op_ne + +#if OMPI_PROVIDE_MPI_FILE_INTERFACE + logical function ompi_file_op_ne(a, b) + type(MPI_File), intent(in) :: a, b + ompi_file_op_ne = (a%MPI_VAL .NE. b%MPI_VAL) + end function ompi_file_op_ne +#endif + + logical function ompi_group_op_ne(a, b) + type(MPI_Group), intent(in) :: a, b + ompi_group_op_ne = (a%MPI_VAL .NE. b%MPI_VAL) + end function ompi_group_op_ne + + logical function ompi_info_op_ne(a, b) + type(MPI_Info), intent(in) :: a, b + ompi_info_op_ne = (a%MPI_VAL .NE. b%MPI_VAL) + end function ompi_info_op_ne + + logical function ompi_message_op_ne(a, b) + type(MPI_Message), intent(in) :: a, b + ompi_message_op_ne = (a%MPI_VAL .NE. b%MPI_VAL) + end function ompi_message_op_ne + + logical function ompi_op_op_ne(a, b) + type(MPI_Op), intent(in) :: a, b + ompi_op_op_ne = (a%MPI_VAL .NE. b%MPI_VAL) + end function ompi_op_op_ne + + logical function ompi_request_op_ne(a, b) + type(MPI_Request), intent(in) :: a, b + ompi_request_op_ne = (a%MPI_VAL .NE. b%MPI_VAL) + end function ompi_request_op_ne + + logical function ompi_win_op_ne(a, b) + type(MPI_Win), intent(in) :: a, b + ompi_win_op_ne = (a%MPI_VAL .NE. b%MPI_VAL) + end function ompi_win_op_ne end module mpi_f08_types diff --git a/ompi/mpi/fortran/base/pmpi-f08-interfaces.F90 b/ompi/mpi/fortran/base/pmpi-f08-interfaces.F90 index c388dd830c..b4143acd0d 100644 --- a/ompi/mpi/fortran/base/pmpi-f08-interfaces.F90 +++ b/ompi/mpi/fortran/base/pmpi-f08-interfaces.F90 @@ -461,7 +461,7 @@ subroutine PMPI_Testall_f08(count,array_of_requests,flag,array_of_statuses,ierro INTEGER, INTENT(IN) :: count TYPE(MPI_Request), INTENT(INOUT) :: array_of_requests(count) LOGICAL, INTENT(OUT) :: flag - TYPE(MPI_Status) :: array_of_statuses(count) + TYPE(MPI_Status) :: array_of_statuses(*) INTEGER, OPTIONAL, INTENT(OUT) :: ierror end subroutine PMPI_Testall_f08 end interface PMPI_Testall @@ -523,7 +523,7 @@ subroutine PMPI_Waitall_f08(count,array_of_requests,array_of_statuses,ierror & implicit none INTEGER, INTENT(IN) :: count TYPE(MPI_Request), INTENT(INOUT) :: array_of_requests(count) - TYPE(MPI_Status) :: array_of_statuses(count) + TYPE(MPI_Status) :: array_of_statuses(*) INTEGER, OPTIONAL, INTENT(OUT) :: ierror end subroutine PMPI_Waitall_f08 end interface PMPI_Waitall @@ -2564,7 +2564,7 @@ subroutine PMPI_Error_string_f08(errorcode,string,resultlen,ierror) end subroutine PMPI_Error_string_f08 end interface PMPI_Error_string -#if OMPI_PROFILE_FILE_INTERFACE +#if OMPI_PROVIDE_MPI_FILE_INTERFACE interface PMPI_File_call_errhandler subroutine PMPI_File_call_errhandler_f08(fh,errorcode,ierror & @@ -2611,7 +2611,7 @@ subroutine PMPI_File_set_errhandler_f08(file,errhandler,ierror & end subroutine PMPI_File_set_errhandler_f08 end interface PMPI_File_set_errhandler -#endif ! OMPI_PROFILE_FILE_INTERFACE +#endif ! OMPI_PROVIDE_MPI_FILE_INTERFACE interface PMPI_Finalize subroutine PMPI_Finalize_f08(ierror & @@ -2903,7 +2903,7 @@ subroutine PMPI_Comm_spawn_f08(command,argv,maxprocs,info,root,comm,intercomm, & TYPE(MPI_Info), INTENT(IN) :: info TYPE(MPI_Comm), INTENT(IN) :: comm TYPE(MPI_Comm), INTENT(OUT) :: intercomm - INTEGER, INTENT(OUT) :: array_of_errcodes(*) + INTEGER :: array_of_errcodes(*) INTEGER, OPTIONAL, INTENT(OUT) :: ierror end subroutine PMPI_Comm_spawn_f08 end interface PMPI_Comm_spawn @@ -2919,7 +2919,7 @@ subroutine PMPI_Comm_spawn_multiple_f08(count,array_of_commands,array_of_argv,ar TYPE(MPI_Info), INTENT(IN) :: array_of_info(*) TYPE(MPI_Comm), INTENT(IN) :: comm TYPE(MPI_Comm), INTENT(OUT) :: intercomm - INTEGER, INTENT(OUT) :: array_of_errcodes(*) + INTEGER :: array_of_errcodes(*) INTEGER, OPTIONAL, INTENT(OUT) :: ierror end subroutine PMPI_Comm_spawn_multiple_f08 end interface PMPI_Comm_spawn_multiple @@ -3233,7 +3233,7 @@ subroutine PMPI_Status_set_elements_f08(status,datatype,count,ierror & end subroutine PMPI_Status_set_elements_f08 end interface PMPI_Status_set_elements -#if OMPI_PROFILE_FILE_INTERFACE +#if OMPI_PROVIDE_MPI_FILE_INTERFACE interface PMPI_File_close subroutine PMPI_File_close_f08(fh,ierror & @@ -4004,7 +4004,7 @@ subroutine PMPI_File_write_shared_f08(fh,buf,count,datatype,status,ierror & end subroutine PMPI_File_write_shared_f08 end interface PMPI_File_write_shared -#endif ! OMPI_PROFILE_FILE_INTERFACE +#endif ! OMPI_PROVIDE_MPI_FILE_INTERFACE interface PMPI_Register_datarep subroutine PMPI_Register_datarep_f08(datarep,read_conversion_fn,write_conversion_fn, & @@ -4110,6 +4110,18 @@ subroutine PMPI_Comm_split_type_f08(comm,split_type,key,info,newcomm,ierror & end subroutine PMPI_Comm_split_type_f08 end interface PMPI_Comm_split_type +interface PMPI_F_sync_reg +subroutine PMPI_F_sync_reg_f08(buf & + ) OMPI_F08_INTERFACE_BIND_C("PMPI_F_sync_reg_f08") + implicit none + !DEC$ ATTRIBUTES NO_ARG_CHECK :: buf + !$PRAGMA IGNORE_TKR buf + !DIR$ IGNORE_TKR buf + !IBM* IGNORE_TKR buf + OMPI_FORTRAN_IGNORE_TKR_TYPE OMPI_ASYNCHRONOUS :: buf +end subroutine PMPI_F_sync_reg_f08 +end interface PMPI_F_sync_reg + interface PMPI_Get_library_version subroutine PMPI_Get_library_version_f08(name,resultlen,ierror) use :: mpi_f08_types, only : MPI_MAX_PROCESSOR_NAME diff --git a/ompi/mpi/fortran/configure-fortran-output.h.in b/ompi/mpi/fortran/configure-fortran-output.h.in index 79c58a738c..3be2e97635 100644 --- a/ompi/mpi/fortran/configure-fortran-output.h.in +++ b/ompi/mpi/fortran/configure-fortran-output.h.in @@ -17,6 +17,9 @@ #ifndef OMPI_FORTRAN_CONFIGURE_OUTPUT_H #define OMPI_FORTRAN_CONFIGURE_OUTPUT_H +! Whether we're building the MPI IO interface or not +#define OMPI_PROVIDE_MPI_FILE_INTERFACE @OMPI_PROVIDE_MPI_FILE_INTERFACE@ + ! Whether we're using wrapper F08 functions or not #define OMPI_FORTRAN_NEED_WRAPPER_ROUTINES @OMPI_FORTRAN_NEED_WRAPPER_ROUTINES@ diff --git a/ompi/mpi/fortran/mpif-h/Makefile.am b/ompi/mpi/fortran/mpif-h/Makefile.am index 21e0b4738d..9eb3e1ebdb 100644 --- a/ompi/mpi/fortran/mpif-h/Makefile.am +++ b/ompi/mpi/fortran/mpif-h/Makefile.am @@ -144,6 +144,7 @@ libmpi_mpifh_la_SOURCES += \ error_class_f.c \ error_string_f.c \ exscan_f.c \ + f_sync_reg_f.c \ finalized_f.c \ finalize_f.c \ free_mem_f.c \ diff --git a/ompi/mpi/fortran/mpif-h/f_sync_reg_f.c b/ompi/mpi/fortran/mpif-h/f_sync_reg_f.c new file mode 100644 index 0000000000..3954962ccb --- /dev/null +++ b/ompi/mpi/fortran/mpif-h/f_sync_reg_f.c @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2004-2005 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. + * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, + * University of Stuttgart. All rights reserved. + * Copyright (c) 2004-2005 The Regents of the University of California. + * All rights reserved. + * Copyright (c) 2011-2012 Cisco Systems, Inc. All rights reserved. + * Copyright (c) 2012 University of Oregon. All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "ompi_config.h" + +#include "ompi/mpi/fortran/mpif-h/bindings.h" +#include "ompi/mpi/fortran/base/constants.h" + +#if OPAL_HAVE_WEAK_SYMBOLS && OMPI_PROFILE_LAYER +#pragma weak PMPI_F_SYNC_REG = ompi_f_sync_reg_f +#pragma weak pmpi_f_sync_reg = ompi_f_sync_reg_f +#pragma weak pmpi_f_sync_reg_ = ompi_f_sync_reg_f +#pragma weak pmpi_f_sync_reg__ = ompi_f_sync_reg_f + +#pragma weak PMPI_F_sync_reg_f = ompi_f_sync_reg_f +#pragma weak PMPI_F_sync_reg_f08 = ompi_f_sync_reg_f +#elif OMPI_PROFILE_LAYER +OMPI_GENERATE_F77_BINDINGS (PMPI_F_SYNC_REG, + pmpi_f_sync_reg, + pmpi_f_sync_reg_, + pmpi_f_sync_reg__, + pompi_f_sync_reg_f, + (char *buf), + (buf) ) +#endif + +#if OPAL_HAVE_WEAK_SYMBOLS +#pragma weak MPI_F_SYNC_REG = ompi_f_sync_reg_f +#pragma weak mpi_f_sync_reg = ompi_f_sync_reg_f +#pragma weak mpi_f_sync_reg_ = ompi_f_sync_reg_f +#pragma weak mpi_f_sync_reg__ = ompi_f_sync_reg_f + +#pragma weak MPI_F_sync_reg_f = ompi_f_sync_reg_f +#pragma weak MPI_F_sync_reg_f08 = ompi_f_sync_reg_f +#endif + +#if ! OPAL_HAVE_WEAK_SYMBOLS && ! OMPI_PROFILE_LAYER +OMPI_GENERATE_F77_BINDINGS (MPI_F_SYNC_REG, + mpi_f_sync_reg, + mpi_f_sync_reg_, + mpi_f_sync_reg__, + ompi_f_sync_reg_f, + (char *buf), + (buf) ) +#endif + + +#if OMPI_PROFILE_LAYER && ! OPAL_HAVE_WEAK_SYMBOLS +#include "ompi/mpi/fortran/mpif-h/profile/defines.h" +#endif + +void ompi_f_sync_reg_f(char *buf) +{ + /* This is a noop in C to disable potential Fortran optimizations. */ + return; +} diff --git a/ompi/mpi/fortran/mpif-h/profile/Makefile.am b/ompi/mpi/fortran/mpif-h/profile/Makefile.am index ba89fd4413..ed3d45c531 100644 --- a/ompi/mpi/fortran/mpif-h/profile/Makefile.am +++ b/ompi/mpi/fortran/mpif-h/profile/Makefile.am @@ -113,6 +113,7 @@ nodist_libmpi_mpifh_pmpi_la_SOURCES = \ perror_class_f.c \ perror_string_f.c \ pexscan_f.c \ + pf_sync_reg_f.c \ pfinalized_f.c \ pfinalize_f.c \ pfree_mem_f.c \ diff --git a/ompi/mpi/fortran/mpif-h/profile/defines.h b/ompi/mpi/fortran/mpif-h/profile/defines.h index e4ef078b89..58261d840e 100644 --- a/ompi/mpi/fortran/mpif-h/profile/defines.h +++ b/ompi/mpi/fortran/mpif-h/profile/defines.h @@ -90,6 +90,7 @@ #define ompi_error_class_f pompi_error_class_f #define ompi_error_string_f pompi_error_string_f #define ompi_exscan_f pompi_exscan_f +#define ompi_f_sync_reg_f pompi_f_sync_reg_f #define ompi_file_call_errhandler_f pompi_file_call_errhandler_f #define ompi_file_create_errhandler_f pompi_file_create_errhandler_f #define ompi_file_set_errhandler_f pompi_file_set_errhandler_f diff --git a/ompi/mpi/fortran/mpif-h/prototypes_mpi.h b/ompi/mpi/fortran/mpif-h/prototypes_mpi.h index 35972e15c6..cbefeed0f6 100644 --- a/ompi/mpi/fortran/mpif-h/prototypes_mpi.h +++ b/ompi/mpi/fortran/mpif-h/prototypes_mpi.h @@ -146,6 +146,7 @@ PN2(void, MPI_Errhandler_set, mpi_errhandler_set, MPI_ERRHANDLER_SET, (MPI_Fint PN2(void, MPI_Error_class, mpi_error_class, MPI_ERROR_CLASS, (MPI_Fint *errorcode, MPI_Fint *errorclass, MPI_Fint *ierr)); PN2(void, MPI_Error_string, mpi_error_string, MPI_ERROR_STRING, (MPI_Fint *errorcode, char *string, MPI_Fint *resultlen, MPI_Fint *ierr, int string_len)); PN2(void, MPI_Exscan, mpi_exscan, MPI_EXSCAN, (char *sendbuf, char *recvbuf, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *op, MPI_Fint *comm, MPI_Fint *ierr)); +PN2(void, MPI_F_sync_reg, mpi_f_sync_reg, MPI_F_SYNC_REG, (char *buf)); PN2(void, MPI_File_call_errhandler, mpi_file_call_errhandler, MPI_FILE_CALL_ERRHANDLER, (MPI_Fint *fh, MPI_Fint *errorcode, MPI_Fint *ierr)); PN2(void, MPI_File_create_errhandler, mpi_file_create_errhandler, MPI_FILE_CREATE_ERRHANDLER, (ompi_errhandler_fortran_handler_fn_t* function, MPI_Fint *errhandler, MPI_Fint *ierr)); PN2(void, MPI_File_set_errhandler, mpi_file_set_errhandler, MPI_FILE_SET_ERRHANDLER, (MPI_Fint *file, MPI_Fint *errhandler, MPI_Fint *ierr)); diff --git a/ompi/mpi/fortran/use-mpi-f08/Makefile.am b/ompi/mpi/fortran/use-mpi-f08/Makefile.am index 19b9ec15dc..07e155a0c2 100644 --- a/ompi/mpi/fortran/use-mpi-f08/Makefile.am +++ b/ompi/mpi/fortran/use-mpi-f08/Makefile.am @@ -95,6 +95,7 @@ mpi_api_files = \ error_class_f08.F90 \ error_string_f08.F90 \ exscan_f08.F90 \ + f_sync_reg_f08.F90 \ finalized_f08.F90 \ finalize_f08.F90 \ free_mem_f08.F90 \ @@ -407,6 +408,7 @@ pmpi_api_files = \ profile/perror_class_f08.F90 \ profile/perror_string_f08.F90 \ profile/pexscan_f08.F90 \ + profile/pf_sync_reg_f08.F90 \ profile/pfinalized_f08.F90 \ profile/pfinalize_f08.F90 \ profile/pfree_mem_f08.F90 \ diff --git a/ompi/mpi/fortran/use-mpi-f08/constants.c b/ompi/mpi/fortran/use-mpi-f08/constants.c index bc6fb9ca79..43e8a090ca 100644 --- a/ompi/mpi/fortran/use-mpi-f08/constants.c +++ b/ompi/mpi/fortran/use-mpi-f08/constants.c @@ -25,10 +25,8 @@ OMPI_DECLSPEC ompi_fortran_08_handle_t ompi_f08_mpi_comm_self = {OMPI_MPI OMPI_DECLSPEC ompi_fortran_08_handle_t ompi_f08_mpi_group_empty = {OMPI_MPI_GROUP_EMPTY}; OMPI_DECLSPEC ompi_fortran_08_handle_t ompi_f08_mpi_errors_are_fatal = {OMPI_MPI_ERRORS_ARE_FATAL}; OMPI_DECLSPEC ompi_fortran_08_handle_t ompi_f08_mpi_errors_return = {OMPI_MPI_ERRORS_RETURN}; +OMPI_DECLSPEC ompi_fortran_08_handle_t ompi_f08_mpi_message_no_proc = {OMPI_MPI_MESSAGE_NO_PROC}; -/* - * lookup table indices - */ OMPI_DECLSPEC ompi_fortran_08_handle_t ompi_f08_mpi_max = {OMPI_MPI_MAX}; OMPI_DECLSPEC ompi_fortran_08_handle_t ompi_f08_mpi_min = {OMPI_MPI_MIN}; OMPI_DECLSPEC ompi_fortran_08_handle_t ompi_f08_mpi_sum = {OMPI_MPI_SUM}; @@ -55,6 +53,9 @@ OMPI_DECLSPEC ompi_fortran_08_handle_t ompi_f08_mpi_message_null = {OMPI_MPI_ OMPI_DECLSPEC ompi_fortran_08_handle_t ompi_f08_mpi_op_null = {OMPI_MPI_OP_NULL}; OMPI_DECLSPEC ompi_fortran_08_handle_t ompi_f08_mpi_request_null = {OMPI_MPI_REQUEST_NULL}; OMPI_DECLSPEC ompi_fortran_08_handle_t ompi_f08_mpi_win_null = {OMPI_MPI_WIN_NULL}; +#if OMPI_PROVIDE_MPI_FILE_INTERFACE +OMPI_DECLSPEC ompi_fortran_08_handle_t ompi_f08_mpi_file_null = {OMPI_MPI_FILE_NULL}; +#endif /* * common block items from ompi/include/mpif-common.h diff --git a/ompi/mpi/fortran/use-mpi-f08/constants.h.fin b/ompi/mpi/fortran/use-mpi-f08/constants.h.fin deleted file mode 100644 index f50fff4530..0000000000 --- a/ompi/mpi/fortran/use-mpi-f08/constants.h.fin +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana - * University Research and Technology - * Corporation. All rights reserved. - * Copyright (c) 2004-2006 The University of Tennessee and The University - * of Tennessee Research Foundation. All rights - * reserved. - * Copyright (c) 2004-2007 High Performance Computing Center Stuttgart, - * University of Stuttgart. All rights reserved. - * Copyright (c) 2004-2005 The Regents of the University of California. - * All rights reserved. - * Copyright (c) 2007-2009 Cisco Systems, Inc. All rights reserved. - * Copyright (c) 2008-2009 Sun Microsystems, Inc. All rights reserved. - * Copyright (c) 2009 Oak Ridge National Labs. All rights reserved. - * Copyright (c) 2009-2012 Los Alamos National Security, LLC. - * All rights reserved. - * $COPYRIGHT$ - * - * Additional copyrights may follow - * - * $HEADER$ - */ - -#ifndef USE_MPI_F08_CONSTANTS_H -#define USE_MPI_F08_CONSTANTS_H - -/* - * This file contains macro definitions for parameter values used in the - * MPI_F08 Fortran bindings. The values are the same as those in - * ompi/include/mpif-common.h and are generated by the script - * ompi/include/mpif-common.pl. - */ - diff --git a/ompi/mpi/fortran/use-mpi-f08/f_sync_reg_f08.F90 b/ompi/mpi/fortran/use-mpi-f08/f_sync_reg_f08.F90 new file mode 100644 index 0000000000..913804155d --- /dev/null +++ b/ompi/mpi/fortran/use-mpi-f08/f_sync_reg_f08.F90 @@ -0,0 +1,18 @@ +! -*- f90 -*- +! +! Copyright (c) 2009-2012 Cisco Systems, Inc. All rights reserved. +! Copyright (c) 2009-2012 Los Alamos National Security, LLC. +! All rights reserved. +! Copyright (c) 2012 University of Oregon. All rights reserved. +! $COPYRIGHT$ + +#include "ompi/mpi/fortran/configure-fortran-output.h" + +subroutine MPI_F_sync_reg_f08(buf) + use :: mpi_f08, only : ompi_f_sync_reg_f + implicit none + OMPI_FORTRAN_IGNORE_TKR_TYPE :: buf + + call ompi_f_sync_reg_f(buf) + +end subroutine MPI_F_sync_reg_f08 diff --git a/ompi/mpi/fortran/use-mpi-f08/mpi-f-interfaces-bind.h b/ompi/mpi/fortran/use-mpi-f08/mpi-f-interfaces-bind.h index d8bfd17a40..28f8d42765 100644 --- a/ompi/mpi/fortran/use-mpi-f08/mpi-f-interfaces-bind.h +++ b/ompi/mpi/fortran/use-mpi-f08/mpi-f-interfaces-bind.h @@ -3017,6 +3017,12 @@ subroutine ompi_comm_split_type_f(comm,split_type,key,info,newcomm,ierror) & INTEGER, INTENT(OUT) :: ierror end subroutine ompi_comm_split_type_f +subroutine ompi_f_sync_reg_f(buf) & + BIND(C, name="ompi_f_sync_reg_f") + implicit none + OMPI_FORTRAN_IGNORE_TKR_TYPE :: buf +end subroutine ompi_f_sync_reg_f + subroutine ompi_get_library_version_f(name,resultlen,ierror,name_len) & BIND(C, name="ompi_get_library_version_f") use, intrinsic :: ISO_C_BINDING, only : C_CHAR diff --git a/ompi/mpi/fortran/use-mpi-f08/pmpi-f-interfaces-bind.h b/ompi/mpi/fortran/use-mpi-f08/pmpi-f-interfaces-bind.h index 1e6d2b2a9d..7aa64d02e3 100644 --- a/ompi/mpi/fortran/use-mpi-f08/pmpi-f-interfaces-bind.h +++ b/ompi/mpi/fortran/use-mpi-f08/pmpi-f-interfaces-bind.h @@ -3023,6 +3023,12 @@ subroutine pompi_comm_split_type_f(comm,split_type,key,info,newcomm,ierror) & INTEGER, INTENT(OUT) :: ierror end subroutine pompi_comm_split_type_f +subroutine pompi_f_sync_reg_f(buf) & + BIND(C, name="pompi_f_sync_reg_f") + implicit none + OMPI_FORTRAN_IGNORE_TKR_TYPE :: buf +end subroutine pompi_f_sync_reg_f + subroutine pompi_get_library_version_f(name,resultlen,ierror,name_len) & BIND(C, name="pompi_get_library_version_f") use, intrinsic :: ISO_C_BINDING, only : C_CHAR diff --git a/ompi/mpi/fortran/use-mpi-f08/profile/pf_sync_reg_f08.F90 b/ompi/mpi/fortran/use-mpi-f08/profile/pf_sync_reg_f08.F90 new file mode 100644 index 0000000000..902ef03183 --- /dev/null +++ b/ompi/mpi/fortran/use-mpi-f08/profile/pf_sync_reg_f08.F90 @@ -0,0 +1,18 @@ +! -*- f90 -*- +! +! Copyright (c) 2009-2012 Cisco Systems, Inc. All rights reserved. +! Copyright (c) 2009-2012 Los Alamos National Security, LLC. +! All rights reserved. +! Copyright (c) 2012 University of Oregon. All rights reserved. +! $COPYRIGHT$ + +#include "ompi/mpi/fortran/configure-fortran-output.h" + +subroutine PMPI_F_sync_reg_f08(buf) + use :: mpi_f08, only : ompi_f_sync_reg_f + implicit none + OMPI_FORTRAN_IGNORE_TKR_TYPE :: buf + + call ompi_f_sync_reg_f(buf) + +end subroutine PMPI_F_sync_reg_f08 diff --git a/ompi/mpi/fortran/use-mpi-f08/profile/ptestall_f08.F90 b/ompi/mpi/fortran/use-mpi-f08/profile/ptestall_f08.F90 index dd9c8c979d..fdf7865d84 100644 --- a/ompi/mpi/fortran/use-mpi-f08/profile/ptestall_f08.F90 +++ b/ompi/mpi/fortran/use-mpi-f08/profile/ptestall_f08.F90 @@ -12,7 +12,7 @@ subroutine PMPI_Testall_f08(count,array_of_requests,flag,array_of_statuses,ierro INTEGER, INTENT(IN) :: count TYPE(MPI_Request), INTENT(INOUT) :: array_of_requests(count) LOGICAL, INTENT(OUT) :: flag - TYPE(MPI_Status), INTENT(OUT) :: array_of_statuses(count) + TYPE(MPI_Status), INTENT(OUT) :: array_of_statuses(*) INTEGER, OPTIONAL, INTENT(OUT) :: ierror integer :: c_ierror diff --git a/ompi/mpi/fortran/use-mpi-f08/profile/pwaitall_f08.F90 b/ompi/mpi/fortran/use-mpi-f08/profile/pwaitall_f08.F90 index 792254a242..2768fb3088 100644 --- a/ompi/mpi/fortran/use-mpi-f08/profile/pwaitall_f08.F90 +++ b/ompi/mpi/fortran/use-mpi-f08/profile/pwaitall_f08.F90 @@ -11,7 +11,7 @@ subroutine PMPI_Waitall_f08(count,array_of_requests,array_of_statuses,ierror) implicit none INTEGER, INTENT(IN) :: count TYPE(MPI_Request), INTENT(INOUT) :: array_of_requests(count) - TYPE(MPI_Status), INTENT(OUT) :: array_of_statuses(count) + TYPE(MPI_Status), INTENT(OUT) :: array_of_statuses(*) INTEGER, OPTIONAL, INTENT(OUT) :: ierror integer :: c_ierror diff --git a/ompi/mpi/fortran/use-mpi-f08/testall_f08.F90 b/ompi/mpi/fortran/use-mpi-f08/testall_f08.F90 index 320ad8fc14..aa2e0ce98a 100644 --- a/ompi/mpi/fortran/use-mpi-f08/testall_f08.F90 +++ b/ompi/mpi/fortran/use-mpi-f08/testall_f08.F90 @@ -12,7 +12,7 @@ subroutine MPI_Testall_f08(count,array_of_requests,flag,array_of_statuses,ierror INTEGER, INTENT(IN) :: count TYPE(MPI_Request), INTENT(INOUT) :: array_of_requests(count) LOGICAL, INTENT(OUT) :: flag - TYPE(MPI_Status), INTENT(OUT) :: array_of_statuses(count) + TYPE(MPI_Status), INTENT(OUT) :: array_of_statuses(*) INTEGER, OPTIONAL, INTENT(OUT) :: ierror integer :: c_ierror diff --git a/ompi/mpi/fortran/use-mpi-f08/waitall_f08.F90 b/ompi/mpi/fortran/use-mpi-f08/waitall_f08.F90 index 0fad072dda..2530d31f56 100644 --- a/ompi/mpi/fortran/use-mpi-f08/waitall_f08.F90 +++ b/ompi/mpi/fortran/use-mpi-f08/waitall_f08.F90 @@ -11,7 +11,7 @@ subroutine MPI_Waitall_f08(count,array_of_requests,array_of_statuses,ierror) implicit none INTEGER, INTENT(IN) :: count TYPE(MPI_Request), INTENT(INOUT) :: array_of_requests(count) - TYPE(MPI_Status), INTENT(OUT) :: array_of_statuses(count) + TYPE(MPI_Status), INTENT(OUT) :: array_of_statuses(*) INTEGER, OPTIONAL, INTENT(OUT) :: ierror integer :: c_ierror diff --git a/ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am b/ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am index ded920989a..dacb3e3928 100644 --- a/ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am +++ b/ompi/mpi/fortran/use-mpi-ignore-tkr/Makefile.am @@ -13,16 +13,22 @@ # mpi" MPI bindings. if OMPI_BUILD_FORTRAN_USEMPI_IGNORE_TKR_BINDINGS +AM_CPPFLAGS = -DOMPI_PROFILE_LAYER=0 -DOMPI_COMPILING_FORTRAN_WRAPPERS=1 + AM_FCFLAGS = -I$(top_builddir)/ompi/include -I$(top_srcdir)/ompi/include \ -I$(top_builddir) -I$(top_srcdir) $(FCFLAGS_f90) lib_LTLIBRARIES = libmpi_usempi_ignore_tkr.la -mpi-ignore-tkr.F90: mpi-ignore-tkr-interfaces.h -mpi-ignore-tkr.F90: mpi-ignore-tkr-file-interfaces.h +mpi-ignore-tkr-interfaces.h: mpi-ignore-tkr-interfaces.h.in +mpi-ignore-tkr-file-interfaces.h: mpi-ignore-tkr-file-interfaces.h.in + +mpi-ignore-tkr.lo: mpi-ignore-tkr-interfaces.h +mpi-ignore-tkr.lo: mpi-ignore-tkr-file-interfaces.h mpi-ignore-tkr.lo: mpi-ignore-tkr.F90 -libmpi_usempi_ignore_tkr_la_SOURCES = mpi-ignore-tkr.F90 +libmpi_usempi_ignore_tkr_la_SOURCES = \ + mpi-ignore-tkr.F90 # These files are generated; do not distribute them nodist_libmpi_usempi_ignore_tkr_la_SOURCES = \ mpi-ignore-tkr-interfaces.h \ diff --git a/ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr-interfaces.h.in b/ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr-interfaces.h.in index 01778cb2bc..8c466a2050 100644 --- a/ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr-interfaces.h.in +++ b/ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr-interfaces.h.in @@ -785,7 +785,7 @@ subroutine MPI_Comm_spawn_multiple(count, array_of_commands, array_of_argv, arra root, comm, intercomm, array_of_errcodes, ierr) integer, intent(in) :: count character(len=*), dimension(*), intent(in) :: array_of_commands - character(len=*), dimension(count,*), intent(in) :: array_of_argv + character(len=*), dimension(count, *), intent(in) :: array_of_argv integer, dimension(*), intent(in) :: array_of_maxprocs integer, dimension(*), intent(in) :: array_of_info integer, intent(in) :: root @@ -3025,24 +3025,14 @@ end interface interface MPI_Testall -subroutine MPI_TestallS(count, array_of_requests, flag, array_of_statuses, ierr) +subroutine MPI_Testall(count, array_of_requests, flag, array_of_statuses, ierr) include 'mpif-config.h' integer, intent(in) :: count integer, dimension(count), intent(inout) :: array_of_requests logical, intent(out) :: flag - integer, dimension(MPI_STATUS_SIZE, count), intent(out) :: array_of_statuses + integer, dimension(MPI_STATUS_SIZE, *), intent(out) :: array_of_statuses integer, intent(out) :: ierr -end subroutine MPI_TestallS - - -subroutine MPI_TestallI(count, array_of_requests, flag, array_of_statuses, ierr) - include 'mpif-config.h' - integer, intent(in) :: count - integer, dimension(count), intent(inout) :: array_of_requests - logical, intent(out) :: flag - double precision, intent(out) :: array_of_statuses - integer, intent(out) :: ierr -end subroutine MPI_TestallI +end subroutine MPI_Testall end interface @@ -3065,28 +3055,16 @@ end interface interface MPI_Testsome -subroutine MPI_TestsomeS(incount, array_of_requests, outcount, array_of_indices, array_of_statuses& +subroutine MPI_Testsome(incount, array_of_requests, outcount, array_of_indices, array_of_statuses& , ierr) include 'mpif-config.h' integer, intent(in) :: incount integer, dimension(incount), intent(inout) :: array_of_requests integer, intent(out) :: outcount integer, dimension(*), intent(out) :: array_of_indices - integer, dimension(MPI_STATUS_SIZE, incount), intent(out) :: array_of_statuses + integer, dimension(MPI_STATUS_SIZE, *), intent(out) :: array_of_statuses integer, intent(out) :: ierr -end subroutine MPI_TestsomeS - - -subroutine MPI_TestsomeI(incount, array_of_requests, outcount, array_of_indices, array_of_statuses& - , ierr) - include 'mpif-config.h' - integer, intent(in) :: incount - integer, dimension(incount), intent(inout) :: array_of_requests - integer, intent(out) :: outcount - integer, dimension(*), intent(out) :: array_of_indices - double precision, intent(out) :: array_of_statuses - integer, intent(out) :: ierr -end subroutine MPI_TestsomeI +end subroutine MPI_Testsome end interface @@ -3650,22 +3628,13 @@ end interface interface MPI_Waitall -subroutine MPI_WaitallS(count, array_of_requests, array_of_statuses, ierr) +subroutine MPI_Waitall(count, array_of_requests, array_of_statuses, ierr) include 'mpif-config.h' integer, intent(in) :: count integer, dimension(count), intent(inout) :: array_of_requests - integer, dimension(MPI_STATUS_SIZE, count), intent(out) :: array_of_statuses + integer, dimension(MPI_STATUS_SIZE, *), intent(out) :: array_of_statuses integer, intent(out) :: ierr -end subroutine MPI_WaitallS - - -subroutine MPI_WaitallI(count, array_of_requests, array_of_statuses, ierr) - include 'mpif-config.h' - integer, intent(in) :: count - integer, dimension(count), intent(inout) :: array_of_requests - double precision, intent(out) :: array_of_statuses - integer, intent(out) :: ierr -end subroutine MPI_WaitallI +end subroutine MPI_Waitall end interface @@ -3686,28 +3655,16 @@ end interface interface MPI_Waitsome -subroutine MPI_WaitsomeS(incount, array_of_requests, outcount, array_of_indices, array_of_statuses& +subroutine MPI_Waitsome(incount, array_of_requests, outcount, array_of_indices, array_of_statuses& , ierr) include 'mpif-config.h' integer, intent(in) :: incount integer, dimension(incount), intent(inout) :: array_of_requests integer, intent(out) :: outcount integer, dimension(*), intent(out) :: array_of_indices - integer, dimension(MPI_STATUS_SIZE, incount), intent(out) :: array_of_statuses + integer, dimension(MPI_STATUS_SIZE, *), intent(out) :: array_of_statuses integer, intent(out) :: ierr -end subroutine MPI_WaitsomeS - - -subroutine MPI_WaitsomeI(incount, array_of_requests, outcount, array_of_indices, array_of_statuses& - , ierr) - include 'mpif-config.h' - integer, intent(in) :: incount - integer, dimension(incount), intent(inout) :: array_of_requests - integer, intent(out) :: outcount - integer, dimension(*), intent(out) :: array_of_indices - double precision, intent(out) :: array_of_statuses - integer, intent(out) :: ierr -end subroutine MPI_WaitsomeI +end subroutine MPI_Waitsome end interface diff --git a/ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr.F90 b/ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr.F90 index 74781aa16f..9ad7dfde9e 100644 --- a/ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr.F90 +++ b/ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr.F90 @@ -1,3 +1,4 @@ +! -*- f90 -*- ! ! Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana ! University Research and Technology @@ -17,9 +18,18 @@ ! $HEADER$ ! +#include "ompi/mpi/fortran/configure-fortran-output.h" + module mpi - include "mpif-common.h" + include "mpif-config.h" + include "mpif-constants.h" + include "mpif-handles.h" +#if OMPI_PROVIDE_MPI_FILE_INTERFACE + include "mpif-io-constants.h" + include "mpif-io-handles.h" +#endif + include "mpif-sentinels.h" ! The MPI attribute callback functions need to be explictly called out ! so that they don't end up in the MPI namespace. See a longer @@ -34,7 +44,7 @@ module mpi ! The ignore-TKR version of the MPI interfaces include "ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr-interfaces.h" -#if OMPI_PROVIDE_FILE_INTERFACE +#if OMPI_PROVIDE_MPI_FILE_INTERFACE include "ompi/mpi/fortran/use-mpi-ignore-tkr/mpi-ignore-tkr-file-interfaces.h" #endif diff --git a/ompi/mpi/fortran/use-mpi-tkr/Makefile.am b/ompi/mpi/fortran/use-mpi-tkr/Makefile.am index 35130d73f5..0b3fa5c67b 100644 --- a/ompi/mpi/fortran/use-mpi-tkr/Makefile.am +++ b/ompi/mpi/fortran/use-mpi-tkr/Makefile.am @@ -55,7 +55,7 @@ if OMPI_BUILD_FORTRAN_USEMPI_TKR_BINDINGS # mpi-f90-interfaces.h | # | | # \|/ \|/ -# used by mpi.f90 used by mpi_*.f90 +# used by mpi.F90 used by mpi_*.f90 # / | | # / \|/ \|/ # / generates mpi.o generates mpi_*.o @@ -116,30 +116,30 @@ $(nodist_libmpi_usempi_la_SOURCES): fortran_kinds.sh # Automake doesn't know how to do F90 dependency analysis, so manually # list this here (i.e., "mpi-f90-interfaces.h" is included in -# mpi.f90). +# mpi.F90). -# Print a warning indicating that compiling mpi.f90 can take a while. +# Print a warning indicating that compiling mpi.F90 can take a while. # The only way to do this portably is to have our own rules for mpi.o # and mpi.obj (having a "fake" target that just has echo statement in # it may trigger mpi.o|obj to be rebuilt because the fake name doesn't # exist; there aren't good portable ways to indicate that the target # name is fake and should never exist). -# Note the "-I." in the commands below. This is because mpi.f90 +# Note the "-I." in the commands below. This is because mpi.F90 # includes mpi-f90-interfaces.h, which will be in the build tree # (i.e., the current directory) because it is generated. -mpi.o: mpi.f90 mpi-f90-interfaces.h +mpi.o: mpi.F90 mpi-f90-interfaces.h @echo "***************************************************************" - @echo "* Compiling the mpi.f90 file may take a few minutes." + @echo "* Compiling the mpi.F90 file may take a few minutes." @echo "* This is quite normal -- do not be alarmed if the compile" @echo "* process seems to 'hang' at this point for several minutes." @echo "***************************************************************" $(FCCOMPILE) -c -I. -o $@ $(FCFLAGS_f90) $< -mpi.obj: mpi.f90 mpi-f90-interfaces.h +mpi.obj: mpi.F90 mpi-f90-interfaces.h @echo "***************************************************************" - @echo "* Compiling the mpi.f90 file may take a few minutes." + @echo "* Compiling the mpi.F90 file may take a few minutes." @echo "* This is quite normal -- do not be alarmed if the compile" @echo "* process seems to 'hang' at this point for several minutes." @echo "***************************************************************" @@ -148,13 +148,13 @@ mpi.obj: mpi.f90 mpi-f90-interfaces.h BUILT_SOURCES = mpi-f90-interfaces.h endif -# mpi.f90 is the only f90 source file directly in libmpif90 that gets +# mpi.F90 is the only f90 source file directly in libmpif90 that gets # distributed. libmpi_usempi_la_SOURCES = \ attr_fn-f90-interfaces.h \ conversion_fn_null-f90-interface.h \ - mpi.f90 + mpi.F90 libmpi_usempi_la_LIBADD = \ $(top_builddir)/ompi/mpi/fortran/mpif-h/libmpi_mpifh.la diff --git a/ompi/mpi/fortran/use-mpi-tkr/mpi.f90 b/ompi/mpi/fortran/use-mpi-tkr/mpi.F90 similarity index 81% rename from ompi/mpi/fortran/use-mpi-tkr/mpi.f90 rename to ompi/mpi/fortran/use-mpi-tkr/mpi.F90 index 28cc5ee3fc..9d7589c710 100644 --- a/ompi/mpi/fortran/use-mpi-tkr/mpi.f90 +++ b/ompi/mpi/fortran/use-mpi-tkr/mpi.F90 @@ -1,3 +1,4 @@ +! -*- f90 -*- ! ! Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana ! University Research and Technology @@ -17,9 +18,18 @@ ! $HEADER$ ! +#include "ompi/mpi/fortran/configure-fortran-output.h" + module mpi - include "mpif-common.h" + include "mpif-config.h" + include "mpif-constants.h" + include "mpif-handles.h" +#if OMPI_PROVIDE_MPI_FILE_INTERFACE + include "mpif-io-constants.h" + include "mpif-io-handles.h" +#endif + include "mpif-sentinels.h" ! The MPI attribute callback functions need to be explictly called out ! so that they don't end up in the MPI namespace. See a longer diff --git a/ompi/mpi/fortran/use-mpi-tkr/scripts/mpi-f90-interfaces.h.sh b/ompi/mpi/fortran/use-mpi-tkr/scripts/mpi-f90-interfaces.h.sh index 6557a7628e..7a9f2d3cb3 100755 --- a/ompi/mpi/fortran/use-mpi-tkr/scripts/mpi-f90-interfaces.h.sh +++ b/ompi/mpi/fortran/use-mpi-tkr/scripts/mpi-f90-interfaces.h.sh @@ -8521,25 +8521,23 @@ output_206() { return 0 fi - suffix=$1 - status_type=$2 + procedure=$1 cat <