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
Этот коммит содержится в:
родитель
c4ee297a60
Коммит
7390ab8a23
@ -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";
|
||||
|
@ -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.
|
@ -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],
|
||||
|
@ -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
|
||||
|
@ -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)
|
@ -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
|
||||
!
|
||||
|
@ -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 (<FILE_IN>);
|
||||
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 (<FILE_IN>);
|
||||
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);
|
@ -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
|
||||
!
|
||||
|
44
ompi/include/mpif-externals.h
Обычный файл
44
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
|
||||
|
63
ompi/include/mpif-sentinels.h
Обычный файл
63
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
|
460
ompi/include/mpif-values.pl
Исполняемый файл
460
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 (<FILE_IN>);
|
||||
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);
|
@ -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'
|
||||
|
@ -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])
|
||||
|
||||
])
|
||||
|
@ -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__);
|
||||
|
||||
/*
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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@
|
||||
|
||||
|
@ -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 \
|
||||
|
73
ompi/mpi/fortran/mpif-h/f_sync_reg_f.c
Обычный файл
73
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;
|
||||
}
|
@ -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 \
|
||||
|
@ -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
|
||||
|
@ -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));
|
||||
|
@ -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 \
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
*/
|
||||
|
18
ompi/mpi/fortran/use-mpi-f08/f_sync_reg_f08.F90
Обычный файл
18
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
|
@ -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
|
||||
|
@ -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
|
||||
|
18
ompi/mpi/fortran/use-mpi-f08/profile/pf_sync_reg_f08.F90
Обычный файл
18
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
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 \
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
@ -8521,25 +8521,23 @@ output_206() {
|
||||
return 0
|
||||
fi
|
||||
|
||||
suffix=$1
|
||||
status_type=$2
|
||||
procedure=$1
|
||||
cat <<EOF
|
||||
|
||||
subroutine MPI_Testall${suffix}(count, array_of_requests, flag, array_of_statuses, ierr)
|
||||
subroutine ${procedure}(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
|
||||
$status_type, intent(out) :: array_of_statuses
|
||||
integer, dimension(MPI_STATUS_SIZE, count), intent(out) :: array_of_statuses
|
||||
integer, intent(out) :: ierr
|
||||
end subroutine MPI_Testall${suffix}
|
||||
end subroutine ${procedure}
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
start MPI_Testall small
|
||||
output_206 S "integer, dimension(MPI_STATUS_SIZE, count)"
|
||||
output_206 I "double precision"
|
||||
output_206 MPI_Testall
|
||||
end MPI_Testall
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
@ -8577,27 +8575,25 @@ output_208() {
|
||||
return 0
|
||||
fi
|
||||
|
||||
suffix=$1
|
||||
status_type=$2
|
||||
procedure=$1
|
||||
cat <<EOF
|
||||
|
||||
subroutine MPI_Testsome${suffix}(incount, array_of_requests, outcount, array_of_indices, array_of_statuses&
|
||||
subroutine ${procedure}(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
|
||||
$status_type, intent(out) :: array_of_statuses
|
||||
integer, dimension(MPI_STATUS_SIZE, *), intent(out) :: array_of_statuses
|
||||
integer, intent(out) :: ierr
|
||||
end subroutine MPI_Testsome${suffix}
|
||||
end subroutine ${procedure}
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
start MPI_Testsome small
|
||||
output_208 S "integer, dimension(MPI_STATUS_SIZE, incount)"
|
||||
output_208 I "double precision"
|
||||
output_208 MPI_Testsome
|
||||
end MPI_Testsome
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
@ -9658,24 +9654,22 @@ output_248() {
|
||||
return 0
|
||||
fi
|
||||
|
||||
suffix=$1
|
||||
status_type=$2
|
||||
procedure=$1
|
||||
cat <<EOF
|
||||
|
||||
subroutine MPI_Waitall${suffix}(count, array_of_requests, array_of_statuses, ierr)
|
||||
subroutine ${procedure}(count, array_of_requests, array_of_statuses, ierr)
|
||||
include 'mpif-config.h'
|
||||
integer, intent(in) :: count
|
||||
integer, dimension(count), intent(inout) :: array_of_requests
|
||||
$status_type, intent(out) :: array_of_statuses
|
||||
integer, dimension(MPI_STATUS_SIZE, *), intent(out) :: array_of_statuses
|
||||
integer, intent(out) :: ierr
|
||||
end subroutine MPI_Waitall${suffix}
|
||||
end subroutine ${procedure}
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
start MPI_Waitall small
|
||||
output_248 S "integer, dimension(MPI_STATUS_SIZE, count)"
|
||||
output_248 I "double precision"
|
||||
output_248 MPI_Waitall
|
||||
end MPI_Waitall
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
@ -9711,27 +9705,25 @@ output_250() {
|
||||
return 0
|
||||
fi
|
||||
|
||||
suffix=$1
|
||||
status_type=$2
|
||||
procedure=$1
|
||||
cat <<EOF
|
||||
|
||||
subroutine MPI_Waitsome${suffix}(incount, array_of_requests, outcount, array_of_indices, array_of_statuses&
|
||||
subroutine ${procedure}(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
|
||||
$status_type, intent(out) :: array_of_statuses
|
||||
integer, dimension(MPI_STATUS_SIZE, *), intent(out) :: array_of_statuses
|
||||
integer, intent(out) :: ierr
|
||||
end subroutine MPI_Waitsome${suffix}
|
||||
end subroutine ${procedure}
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
start MPI_Waitsome small
|
||||
output_250 S "integer, dimension(MPI_STATUS_SIZE, incount)"
|
||||
output_250 I "double precision"
|
||||
output_250 MPI_Waitsome
|
||||
end MPI_Waitsome
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
@ -10560,14 +10552,13 @@ output_284() {
|
||||
fi
|
||||
|
||||
procedure=$1
|
||||
argv_type=$2
|
||||
cat <<EOF
|
||||
|
||||
subroutine ${procedure}(count, array_of_commands, array_of_argv, array_of_maxprocs, array_of_info, &
|
||||
root, comm, intercomm, array_of_errcodes, ierr)
|
||||
integer, intent(in) :: count
|
||||
character(len=*), dimension(*), intent(in) :: array_of_commands
|
||||
$argv_type, 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
|
||||
@ -10581,8 +10572,7 @@ EOF
|
||||
}
|
||||
|
||||
start MPI_Comm_spawn_multiple small
|
||||
output_284 MPI_Comm_spawn_multipleA "character(len=*), dimension(count,*)"
|
||||
output_284 MPI_Comm_spawn_multipleN "double precision"
|
||||
output_284 MPI_Comm_spawn_multiple
|
||||
end MPI_Comm_spawn_multiple
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
|
@ -286,13 +286,13 @@ INST(int, MPI_FORTRAN_IN_PLACE, mpi_fortran_in_place,
|
||||
mpi_fortran_in_place_, mpi_fortran_in_place__);
|
||||
INST(char *, MPI_FORTRAN_ARGV_NULL, mpi_fortran_argv_null,
|
||||
mpi_fortran_argv_null_, mpi_fortran_argv_null__);
|
||||
INST(double, MPI_FORTRAN_ARGVS_NULL, mpi_fortran_argvs_null,
|
||||
INST(char *, MPI_FORTRAN_ARGVS_NULL, mpi_fortran_argvs_null,
|
||||
mpi_fortran_argvs_null_, mpi_fortran_argvs_null__);
|
||||
INST(int *, MPI_FORTRAN_ERRCODES_IGNORE, mpi_fortran_errcodes_ignore,
|
||||
mpi_fortran_errcodes_ignore_, mpi_fortran_errcodes_ignore__);
|
||||
INST(int *, MPI_FORTRAN_STATUS_IGNORE, mpi_fortran_status_ignore,
|
||||
mpi_fortran_status_ignore_, mpi_fortran_status_ignore__);
|
||||
INST (double, MPI_FORTRAN_STATUSES_IGNORE, mpi_fortran_statuses_ignore,
|
||||
INST(int *, MPI_FORTRAN_STATUSES_IGNORE, mpi_fortran_statuses_ignore,
|
||||
mpi_fortran_statuses_ignore_, mpi_fortran_statuses_ignore__);
|
||||
|
||||
/*
|
||||
|
@ -87,7 +87,7 @@ void ompi_info_do_config(bool want_all)
|
||||
char *fortran_usempif08;
|
||||
char *fortran_usempif08_compliance;
|
||||
char *fortran_have_ignore_tkr;
|
||||
char *fortran_have_f08_assumed_shape;
|
||||
char *fortran_have_f08_assumed_rank;
|
||||
char *fortran_build_f08_subarrays;
|
||||
char *fortran_have_optional_args;
|
||||
char *fortran_have_bind_c;
|
||||
@ -156,7 +156,7 @@ void ompi_info_do_config(bool want_all)
|
||||
fortran_usempi = "no";
|
||||
}
|
||||
fortran_usempif08 = OMPI_BUILD_FORTRAN_USEMPIF08_BINDINGS ? "yes" : "no";
|
||||
fortran_have_f08_assumed_shape = OMPI_FORTRAN_HAVE_F08_ASSUMED_SHAPE ?
|
||||
fortran_have_f08_assumed_rank = OMPI_FORTRAN_HAVE_F08_ASSUMED_RANK ?
|
||||
"yes" : "no";
|
||||
fortran_build_f08_subarrays = OMPI_BUILD_FORTRAN_F08_SUBARRAYS ?
|
||||
"yes" : "no";
|
||||
@ -345,8 +345,8 @@ void ompi_info_do_config(bool want_all)
|
||||
fortran_have_ignore_tkr);
|
||||
free(fortran_have_ignore_tkr);
|
||||
opal_info_out("Fort 08 assumed shape",
|
||||
"compiler:fortran:f08_assumed_shape",
|
||||
fortran_have_f08_assumed_shape);
|
||||
"compiler:fortran:f08_assumed_rank",
|
||||
fortran_have_f08_assumed_rank);
|
||||
opal_info_out("Fort optional args",
|
||||
"compiler:fortran:optional_arguments",
|
||||
fortran_have_optional_args);
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user