1
1

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
Этот коммит содержится в:
Jeff Squyres 2012-08-10 21:19:47 +00:00
родитель c4ee297a60
Коммит 7390ab8a23
43 изменённых файлов: 1057 добавлений и 1487 удалений

Просмотреть файл

@ -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 Обычный файл
Просмотреть файл

@ -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 Обычный файл
Просмотреть файл

@ -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 Исполняемый файл
Просмотреть файл

@ -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 Обычный файл
Просмотреть файл

@ -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.
*/

Просмотреть файл

@ -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

Просмотреть файл

@ -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);