diff --git a/config/ompi_configure_options.m4 b/config/ompi_configure_options.m4 index 96031f3ae2..517225b546 100644 --- a/config/ompi_configure_options.m4 +++ b/config/ompi_configure_options.m4 @@ -10,6 +10,7 @@ dnl Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, dnl University of Stuttgart. All rights reserved. dnl Copyright (c) 2004-2005 The Regents of the University of California. dnl All rights reserved. +dnl Copyright (c) 2006 Cisco Systems, Inc. All rights reserved. dnl $COPYRIGHT$ dnl dnl Additional copyrights may follow @@ -182,6 +183,48 @@ if test "$OMPI_WANT_F90_BINDINGS" = "1" -a -z "$enable_mpi_f90" -a -d .svn; then fi #################### Early development override #################### +AC_MSG_CHECKING([desired Fortran 90 bindings "size"]) +AC_ARG_WITH(mpi-f90-size, + AC_HELP_STRING([--with-mpi-f90-size=SIZE], + [specify the types of functions in the Fortran 90 MPI module, where size is one of: trivial (MPI-2 F90-specific functions only), small (trivial + all MPI functions without choice buffers), medium (small + all MPI functions with one choice buffer), large (medium + all MPI functions with 2 choice buffers, but only when both buffers are the same type)])) + +if test "$OMPI_WANT_F90_BINDINGS" = "0"; then + AC_MSG_RESULT([disabled (Fortran 90 bindings disabled)]) +elif test "$with_mpi_f90_size" = "no"; then + OMPI_WANT_F90_BINDINGS=0 + AC_MSG_RESULT([disabling F90 MPI module (used specified)]) +else + # Default value + if test "$with_mpi_f90_size" = ""; then + with_mpi_f90_size=small + fi + + # Check for each of the sizes + if test "$with_mpi_f90_size" = "trivial"; then + OMPI_F90_BUILD_SIZE=trivial + elif test "$with_mpi_f90_size" = "small"; then + OMPI_F90_BUILD_SIZE=small + elif test "$with_mpi_f90_size" = "medium"; then + OMPI_F90_BUILD_SIZE=medium + elif test "$with_mpi_f90_size" = "large"; then + OMPI_F90_BUILD_SIZE=large + else + AC_MSG_RESULT([Unrecognized size: $with_mpi_f90_size]) + AC_MSG_ERROR([Cannot continue]) + fi +fi + +AM_CONDITIONAL([OMPI_WANT_BUILD_F90_TRIVIAL], + [test "$OMPI_F90_BUILD_SIZE" = "trivial"]) +AM_CONDITIONAL([OMPI_WANT_BUILD_F90_SMALL], + [test "$OMPI_F90_BUILD_SIZE" = "small"]) +AM_CONDITIONAL([OMPI_WANT_BUILD_F90_MEDIUM], + [test "$OMPI_F90_BUILD_SIZE" = "medium"]) +AM_CONDITIONAL([OMPI_WANT_BUILD_F90_LARGE], + [test "$OMPI_F90_BUILD_SIZE" = "large"]) + +AC_SUBST(OMPI_F90_BUILD_SIZE) +AC_MSG_RESULT([$OMPI_F90_BUILD_SIZE]) # # MPI profiling diff --git a/configure.ac b/configure.ac index a18b92e779..9f23669ce5 100644 --- a/configure.ac +++ b/configure.ac @@ -10,6 +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 Cisco Systems, Inc. All rights reserved. # $COPYRIGHT$ # # Additional copyrights may follow @@ -482,18 +483,12 @@ OMPI_SETUP_F90 OMPI_F90_FIND_MODULE_INCLUDE_FLAG # Look for all the types -OMPI_F90_LKINDS="" OMPI_F90_IKINDS="" OMPI_F90_RKINDS="" OMPI_F90_CKINDS="" # LOGICAL and friends OMPI_F90_CHECK([LOGICAL]) -OMPI_F90_CHECK([LOGICAL*1], [1]) -OMPI_F90_CHECK([LOGICAL*2], [2]) -OMPI_F90_CHECK([LOGICAL*4], [4]) -OMPI_F90_CHECK([LOGICAL*8], [8]) -OMPI_F90_CHECK([LOGICAL*16], [16]) # INTEGER and friends OMPI_F90_CHECK([INTEGER]) @@ -517,27 +512,25 @@ OMPI_F90_CHECK([COMPLEX*16], [16]) OMPI_F90_CHECK([COMPLEX*32], [32]) OMPI_F90_CHECK([DOUBLE COMPLEX]) -# The OMPI_F90_CKINDS list represents the overall size of the complex -# types -- not the size of the REAL's that make them up. For the -# scripts in ompi/mpi/f90/scripts/*, variables are expressed in terms -# of the REAL's that make up the COMPLEX variables, so we need to cut -# all the sizes here in half. -new_sizes= -for size in $OMPI_F90_CKINDS; do - new_size=`expr $size / 2` - new_sizes="$new_sizes $new_size" -done -OMPI_F90_CKINDS=$new_sizes -unset new_size new_sizes - -AC_SUBST(OMPI_F90_LKINDS) AC_SUBST(OMPI_F90_IKINDS) AC_SUBST(OMPI_F90_RKINDS) AC_SUBST(OMPI_F90_CKINDS) -# get kind value for Fortran MPI_OFFSET_KIND (corresponding to INTEGER*8) -OMPI_F90_GET_INT_KIND(MPI_OFFSET_KIND, 18, OMPI_MPI_OFFSET_KIND) -AC_SUBST(OMPI_MPI_OFFSET_KIND) +# get kind value for Fortran MPI_INTEGER_KIND (corresponding to +# whatever is the same size as a F77 INTEGER -- for the +# most-likely-will-never-occur case where F77 INTEGER is smaller than +# an F90 INTEGER; see MPI-2 4.12.6.5 +if test "$OMPI_SIZEOF_FORTRAN_INTEGER" = "2"; then + OMPI_F90_GET_INT_KIND(MPI_INTEGER_KIND, 4, OMPI_MPI_INTEGER_KIND) +elif test "$OMPI_SIZEOF_FORTRAN_INTEGER" = "4"; then + OMPI_F90_GET_INT_KIND(MPI_INTEGER_KIND, 9, OMPI_MPI_INTEGER_KIND) +elif test "$OMPI_SIZEOF_FORTRAN_INTEGER" = "8"; then + OMPI_F90_GET_INT_KIND(MPI_INTEGER_KIND, 18, OMPI_MPI_INTEGER_KIND) +elif test "$OMPI_SIZEOF_FORTRAN_INTEGER" = "16"; then + OMPI_F90_GET_INT_KIND(MPI_INTEGER_KIND, 19, OMPI_MPI_INTEGER_KIND) + AC_MSG_ERROR([Cannot support Fortran MPI_INTEGER_KIND!]) +fi +AC_SUBST(OMPI_MPI_INTEGER_KIND) # get kind value for Fortran MPI_ADDRESS_KIND (corresponding to # whatever is big enough to hold (void*)) @@ -554,6 +547,10 @@ else fi AC_SUBST(OMPI_MPI_ADDRESS_KIND) +# get kind value for Fortran MPI_OFFSET_KIND (corresponding to INTEGER*8) +OMPI_F90_GET_INT_KIND(MPI_OFFSET_KIND, 18, OMPI_MPI_OFFSET_KIND) +AC_SUBST(OMPI_MPI_OFFSET_KIND) + # checkpoint results AC_CACHE_SAVE diff --git a/ompi/include/mpif.h.in b/ompi/include/mpif.h.in index 47137092f2..d73d28a889 100644 --- a/ompi/include/mpif.h.in +++ b/ompi/include/mpif.h.in @@ -73,9 +73,10 @@ ! ! kind parameters ! - integer MPI_OFFSET_KIND, MPI_ADDRESS_KIND - parameter (MPI_OFFSET_KIND=@OMPI_MPI_OFFSET_KIND@) + integer MPI_OFFSET_KIND, MPI_ADDRESS_KIND, MPI_INTEGER_KIND + parameter (MPI_INTEGER_KIND=@OMPI_MPI_INTEGER_KIND@) parameter (MPI_ADDRESS_KIND=@OMPI_MPI_ADDRESS_KIND@) + parameter (MPI_OFFSET_KIND=@OMPI_MPI_OFFSET_KIND@) ! ! misc. constants ! diff --git a/ompi/mpi/f77/address_f.c b/ompi/mpi/f77/address_f.c index e710d8f5fe..b5d93c19bc 100644 --- a/ompi/mpi/f77/address_f.c +++ b/ompi/mpi/f77/address_f.c @@ -31,7 +31,7 @@ OMPI_GENERATE_F77_BINDINGS (PMPI_ADDRESS, pmpi_address_, pmpi_address__, pmpi_address_f, - (char *location, MPI_Aint *address, MPI_Fint *ierr), + (char *location, MPI_Fint *address, MPI_Fint *ierr), (location, address, ierr) ) #endif @@ -48,7 +48,7 @@ OMPI_GENERATE_F77_BINDINGS (MPI_ADDRESS, mpi_address_, mpi_address__, mpi_address_f, - (char *location, MPI_Aint *address, MPI_Fint *ierr), + (char *location, MPI_Fint *address, MPI_Fint *ierr), (location, address, ierr) ) #endif @@ -57,7 +57,7 @@ OMPI_GENERATE_F77_BINDINGS (MPI_ADDRESS, #include "ompi/mpi/f77/profile/defines.h" #endif -void mpi_address_f(char *location, MPI_Aint *address, MPI_Fint *ierr) +void mpi_address_f(char *location, MPI_Fint *address, MPI_Fint *ierr) { MPI_Aint addr; diff --git a/ompi/mpi/f77/prototypes_mpi.h b/ompi/mpi/f77/prototypes_mpi.h index 0a3420f190..4d03b21714 100644 --- a/ompi/mpi/f77/prototypes_mpi.h +++ b/ompi/mpi/f77/prototypes_mpi.h @@ -59,7 +59,7 @@ PN(void, mpi_accumulate, MPI_ACCUMULATE, (char *origin_addr, MPI_Fint *origin_co PN(void, mpi_add_error_class, MPI_ADD_ERROR_CLASS, (MPI_Fint *errorclass, MPI_Fint *ierr)); PN(void, mpi_add_error_code, MPI_ADD_ERROR_CODE, (MPI_Fint *errorclass, MPI_Fint *errorcode, MPI_Fint *ierr)); PN(void, mpi_add_error_string, MPI_ADD_ERROR_STRING, (MPI_Fint *errorcode, char *string, MPI_Fint *ierr, int l)); -PN(void, mpi_address, MPI_ADDRESS, (char *location, MPI_Aint *address, MPI_Fint *ierr)); +PN(void, mpi_address, MPI_ADDRESS, (char *location, MPI_Fint *address, MPI_Fint *ierr)); PN(void, mpi_allgather, MPI_ALLGATHER, (char *sendbuf, MPI_Fint *sendcount, MPI_Fint *sendtype, char *recvbuf, MPI_Fint *recvcount, MPI_Fint *recvtype, MPI_Fint *comm, MPI_Fint *ierr)); PN(void, mpi_allgatherv, MPI_ALLGATHERV, (char *sendbuf, MPI_Fint *sendcount, MPI_Fint *sendtype, char *recvbuf, MPI_Fint *recvcounts, MPI_Fint *displs, MPI_Fint *recvtype, MPI_Fint *comm, MPI_Fint *ierr)); PN(void, mpi_alloc_mem, MPI_ALLOC_MEM, (MPI_Fint *size, MPI_Fint *info, char *baseptr, MPI_Fint *ierr)); diff --git a/ompi/mpi/f90/Makefile.am b/ompi/mpi/f90/Makefile.am index e2430a7b89..0df9fef416 100644 --- a/ompi/mpi/f90/Makefile.am +++ b/ompi/mpi/f90/Makefile.am @@ -10,6 +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 Cisco Systems, Inc. All rights reserved. # $COPYRIGHT$ # # Additional copyrights may follow @@ -31,13 +32,11 @@ # | | # \|/ | # generates mpi-f90-interfaces.h | -# / | -# mpi_kinds.f90 --------> generates mpi_kinds module | -# / (exact filename unknown) | -# \/ / \ | -# mpi-f90-interfaces.h / \ | -# | / \ | -# \|/ \/ \/ \|/ +# / | +# \/ | +# mpi-f90-interfaces.h | +# | | +# \|/ \|/ # used by mpi.f90 used by mpi_*.f90 # / | | # / \|/ \|/ @@ -49,17 +48,10 @@ # Once you understand this diagram, this Makefile is much more clear. # - - SUBDIRS = scripts AM_FCFLAGS = -I$(top_builddir)/ompi/include $(OMPI_FC_MODULE_FLAG). -# We have to EXTRA_DIST mpi_kinds.f90 because there is no explicit -# Automake rule to compile this file. - -EXTRA_DIST = mpi_kinds.f90 - # Override the default f90 rules because we have to insert # $(FCFLAGS_f90) right before the source filename. This is necessary # for cases where the compiler expects source files to end in .f, and @@ -82,10 +74,6 @@ EXTRA_DIST = mpi_kinds.f90 lib_LIBRARIES = if OMPI_WANT_F90_BINDINGS -# We have to build this before the other ones. - -BUILT_SOURCES = mpi_kinds.ompi_module - # Add the f90 library to the list of libraries to build lib_LIBRARIES += libmpi_f90.a @@ -97,22 +85,6 @@ mpi-f90-interfaces.h: fortran_kinds.sh CLEANFILES += mpi-f90-interfaces.h -# SIDENOTE: We currently have code in mpi-f90-interfaces.h.sh to -# generate interface declarations for all the "two buffer" functions -# (e.g., MPI_Reduce). This actually creates a problem for most -# compilers, because it results in an exponential explosion of -# functions generated -- most compilers will segv (particularly with -# --with-f90-mcx-array-dim values of >2). But this code is useful, -# and I don't want to delete it (yes, we could get it back from SVN -# history, but I don't want to re-integrate it) -- f90 compilers *may* -# someday be able to handle this (i.e., our *code* is not wrong -- the -# *compilers* are wrong). So I'm simply adding a hard-coded value -# here to disable the interface generation stuff in the script; it can -# be made a condition (e.g., via configure test or --enable option, or -# somesuch) later if necessary. - -WANT_2BUFFER_FUNCTIONS=0 - # Run scripts to generate the f90 source files. We only need to # generate the .f90 files once, so the "test" checks to see if the # file exists before running the script. However, the @@ -121,23 +93,10 @@ WANT_2BUFFER_FUNCTIONS=0 # and changes the value fortran_kinds.sh (which is taken care of by # the mpi-f90-interfaces.h dependency on fortran_kinds.sh, above). -mpi-f90-interfaces.h: +mpi-f90-interfaces.h: $(srcdir)/scripts/mpi-f90-interfaces.h.sh @ p="`pwd`"; \ - echo $(srcdir)/scripts/mpi-f90-interfaces.h.sh $$p $(WANT_2BUFFER_FUNCTIONS) \> $@; \ - $(srcdir)/scripts/mpi-f90-interfaces.h.sh $$p $(WANT_2BUFFER_FUNCTIONS) > $@ - -# Ensure that the mpi_kinds F90 module is generated before compiling -# any of the sources (because many/all of these sources "use -# mpi_kinds"). We unfortunately can't know ahead of time the exact -# filename of the generated F90 module file (because F90 compilers -# have not standardized on the output filename format), so we have to -# add our own explicit dependency to compile the module. :-( - -$(libmpi_f90_a_SOURCES) $(nodist_libmpi_f90_a_SOURCES): mpi_kinds.ompi_module - -mpi_kinds.ompi_module: mpi_kinds.f90 - $(FCCOMPILE) -c $(FCFLAGS_f90) $< - @ touch mpi_kinds.ompi_module + echo $(srcdir)/scripts/mpi-f90-interfaces.h.sh $$p \> $@; \ + $(srcdir)/scripts/mpi-f90-interfaces.h.sh $$p > $@ # Unbelievably, some versions of sh (cough cough Solaris 9 cough # cough) actually seem to internally perform a "cd" into a @@ -148,12 +107,10 @@ mpi_kinds.ompi_module: mpi_kinds.f90 # So we have to pass in the pwd to the scripts so that they know where # some_script is. -$(nodist_libmpi_f90_a_SOURCES): - @ if test ! -r $@ -o "$@" = "mpi-f90-interfaces.h"; then \ - p="`pwd`"; \ - echo $(srcdir)/scripts/$@.sh $$p \> $@; \ - $(srcdir)/scripts/$@.sh $$p > $@ ; \ - fi +$(nodist_libmpi_f90_a_SOURCES): fortran_kinds.sh + @ p="`pwd`"; \ + echo $(srcdir)/scripts/$@.sh $$p \> $@; \ + $(srcdir)/scripts/$@.sh $$p > $@ ; # Automake doesn't know how to do F90 dependency analysis, so manually # list this here (i.e., "mpi-f90-interfaces.h" is included in @@ -187,15 +144,16 @@ lib_LIBRARIES += endif # mpi.f90 is the only f90 source file directly in libmpif90 that gets -# distributed (mpi_kinds.f90 is also distributed, but it's only -# indirectly included in libmpif90 -- via "use mpi_kinds"). +# distributed. This file is always in the library, regardless of the +# size that we're building. libmpi_f90_a_SOURCES = mpi.f90 # These files are all generated by scripts in the scripts/ directory. -nodist_libmpi_f90_a_SOURCES = \ +medium_sources = \ mpi_address_f90.f90 \ + mpi_accumulate_f90.f90 \ mpi_bcast_f90.f90 \ mpi_bsend_f90.f90 \ mpi_bsend_init_f90.f90 \ @@ -232,11 +190,13 @@ nodist_libmpi_f90_a_SOURCES = \ mpi_file_write_ordered_begin_f90.f90 \ mpi_file_write_ordered_end_f90.f90 \ mpi_file_write_shared_f90.f90 \ + mpi_get_f90.f90 \ mpi_ibsend_f90.f90 \ mpi_irecv_f90.f90 \ mpi_irsend_f90.f90 \ mpi_isend_f90.f90 \ mpi_issend_f90.f90 \ + mpi_put_f90.f90 \ mpi_recv_f90.f90 \ mpi_recv_init_f90.f90 \ mpi_rsend_f90.f90 \ @@ -246,11 +206,39 @@ nodist_libmpi_f90_a_SOURCES = \ mpi_sendrecv_replace_f90.f90 \ mpi_ssend_f90.f90 \ mpi_ssend_init_f90.f90 \ - mpi_accumulate_f90.f90 \ - mpi_get_f90.f90 \ - mpi_put_f90.f90 \ mpi_win_create_f90.f90 +large_sources = \ + mpi_allgather_f90.f90 \ + mpi_allgatherv_f90.f90 \ + mpi_allreduce_f90.f90 \ + mpi_alltoall_f90.f90 \ + mpi_alltoallv_f90.f90 \ + mpi_alltoallw_f90.f90 \ + mpi_exscan_f90.f90 \ + mpi_gather_f90.f90 \ + mpi_gatherv_f90.f90 \ + mpi_pack_f90.f90 \ + mpi_pack_external_f90.f90 \ + mpi_reduce_f90.f90 \ + mpi_reduce_scatter_f90.f90 \ + mpi_scan_f90.f90 \ + mpi_scatter_f90.f90 \ + mpi_scatterv_f90.f90 \ + mpi_sendrecv_f90.f90 \ + mpi_unpack_f90.f90 \ + mpi_unpack_external_f90.f90 + +# The rest of the files that are in the library depend on which size +# we're building. + +nodist_libmpi_f90_a_SOURCES = +if OMPI_WANT_BUILD_F90_MEDIUM +nodist_libmpi_f90_a_SOURCES += $(medium_sources) +endif +if OMPI_WANT_BUILD_F90_LARGE +nodist_libmpi_f90_a_SOURCES += $(medium_sources) $(large_sources) +endif # # Clean up all F90 module files and all generated files diff --git a/ompi/mpi/f90/fortran_kinds.sh.in b/ompi/mpi/f90/fortran_kinds.sh.in index a122907264..f3b2f78e9f 100644 --- a/ompi/mpi/f90/fortran_kinds.sh.in +++ b/ompi/mpi/f90/fortran_kinds.sh.in @@ -10,6 +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 Cisco Systems, Inc. All rights reserved. # $COPYRIGHT$ # # Additional copyrights may follow @@ -19,10 +20,10 @@ max_array_rank="@OMPI_FORTRAN_MAX_ARRAY_RANK@" -lkinds="@OMPI_F90_LKINDS@" ikinds="@OMPI_F90_IKINDS@" rkinds="@OMPI_F90_RKINDS@" ckinds="@OMPI_F90_CKINDS@" +size="@OMPI_F90_BUILD_SIZE@" # fix up for broken generation scripts that don't properly compute the # ranks variable before using it @@ -33,3 +34,41 @@ while test "`expr $rank \\<= $max_array_rank`" = "1"; do rank="`expr $rank + 1`" done unset rank + +# +# Helper function +# +check_size() { + # Sanity check + if test "$1" != "trivial" -a "$1" != "small" -a "$1" != "medium" -a \ + "$1" != "large"; then + echo "WARNING: unrecognized size: $1" >&2 + fi + + # Check the value + output=0 + if test "$1" = "trivial"; then + # Since we've got a trivial source, always build it (since + # trivial is the smallest allowable size to build, and we + # already verified above that the size is valid). + output=1 + elif test "$1" = "small"; then + # If we've got a small source, build it unless the user only + # requested trivial. + if test "$size" != "trivial"; then + output=1 + fi + elif test "$1" = "medium"; then + # If we've got a medium source, build it only if the user + # requested medium or large. + if test "$size" = "medium" -o "$size" = "large"; then + output=1 + fi + elif test "$1" = "large"; then + # If we've got a large source, build it only if the user + # requested large. + if test "$size" = "large"; then + output=1 + fi + fi +} diff --git a/ompi/mpi/f90/fortran_sizes.h.in b/ompi/mpi/f90/fortran_sizes.h.in index 196f1f45b3..eb2ab183aa 100644 --- a/ompi/mpi/f90/fortran_sizes.h.in +++ b/ompi/mpi/f90/fortran_sizes.h.in @@ -9,6 +9,7 @@ ! University of Stuttgart. All rights reserved. ! Copyright (c) 2004-2005 The Regents of the University of California. ! All rights reserved. +! Copyright (c) 2006 Cisco Systems, Inc. All rights reserved. ! $COPYRIGHT$ ! ! Additional copyrights may follow @@ -16,11 +17,9 @@ ! $HEADER$ ! -integer :: OMPI_SIZEOF_F90_LOGICAL1 -integer :: OMPI_SIZEOF_F90_LOGICAL2 -integer :: OMPI_SIZEOF_F90_LOGICAL4 -integer :: OMPI_SIZEOF_F90_LOGICAL8 -integer :: OMPI_SIZEOF_F90_LOGICAL16 +! This file is used by scripts/mpi_sizeof.f90.sh (and therefore mpi_sizeof.f90) + +integer :: OMPI_SIZEOF_F90_LOGICAL integer :: OMPI_SIZEOF_F90_INT1 integer :: OMPI_SIZEOF_F90_INT2 @@ -36,11 +35,7 @@ integer :: OMPI_SIZEOF_F90_COMPLEX8 integer :: OMPI_SIZEOF_F90_COMPLEX16 integer :: OMPI_SIZEOF_F90_COMPLEX32 -parameter(OMPI_SIZEOF_F90_LOGICAL1 = @OMPI_SIZEOF_F90_LOGICAL1@) -parameter(OMPI_SIZEOF_F90_LOGICAL2 = @OMPI_SIZEOF_F90_LOGICAL2@) -parameter(OMPI_SIZEOF_F90_LOGICAL4 = @OMPI_SIZEOF_F90_LOGICAL4@) -parameter(OMPI_SIZEOF_F90_LOGICAL8 = @OMPI_SIZEOF_F90_LOGICAL8@) -parameter(OMPI_SIZEOF_F90_LOGICAL16 = @OMPI_SIZEOF_F90_LOGICAL16@) +parameter(OMPI_SIZEOF_F90_LOGICAL = @OMPI_SIZEOF_F90_LOGICAL@) parameter(OMPI_SIZEOF_F90_INT1 = @OMPI_SIZEOF_F90_INT1@) parameter(OMPI_SIZEOF_F90_INT2 = @OMPI_SIZEOF_F90_INT2@) diff --git a/ompi/mpi/f90/mpi.f90 b/ompi/mpi/f90/mpi.f90 index 965a917640..92340057db 100644 --- a/ompi/mpi/f90/mpi.f90 +++ b/ompi/mpi/f90/mpi.f90 @@ -18,7 +18,7 @@ module mpi - use mpi_kinds + include "mpif.h" ! This file is generated, and is *huge*. Its size is directly related ! to the --with-f90-max-array-dim configure parameter. diff --git a/ompi/mpi/f90/mpi_kinds.f90 b/ompi/mpi/f90/mpi_kinds.f90 deleted file mode 100644 index 025250456c..0000000000 --- a/ompi/mpi/f90/mpi_kinds.f90 +++ /dev/null @@ -1,46 +0,0 @@ -! -! 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$ -! -! Additional copyrights may follow -! -! $HEADER$ -! - -module mpi_kinds - - include "mpif.h" - -! -! integer kinds -! - - integer :: MPI_INTEGER1_KIND, MPI_INTEGER2_KIND, MPI_INTEGER4_KIND - integer :: MPI_INTEGER8_KIND, MPI_INTEGER16_KIND - parameter(MPI_INTEGER1_KIND = selected_int_kind(2)) - parameter(MPI_INTEGER2_KIND = selected_int_kind(4)) - parameter(MPI_INTEGER4_KIND = selected_int_kind(9)) - parameter(MPI_INTEGER8_KIND = selected_int_kind(18)) - parameter(MPI_INTEGER16_KIND = selected_int_kind(19)) - -! -! real kinds -! - - integer :: MPI_REAL4_KIND, MPI_REAL8_KIND - integer :: MPI_REAL16_KIND, MPI_REAL32_KIND - parameter(MPI_REAL4_KIND = selected_real_kind(6)) - parameter(MPI_REAL8_KIND = selected_real_kind(15)) - parameter(MPI_REAL16_KIND = selected_real_kind(31)) - parameter(MPI_REAL32_KIND = selected_real_kind(32)) - -end module mpi_kinds diff --git a/ompi/mpi/f90/scripts/mpi-f90-interfaces.h.sh b/ompi/mpi/f90/scripts/mpi-f90-interfaces.h.sh index 0aece5d5c4..e65f276bf0 100755 --- a/ompi/mpi/f90/scripts/mpi-f90-interfaces.h.sh +++ b/ompi/mpi/f90/scripts/mpi-f90-interfaces.h.sh @@ -3,13 +3,9 @@ # 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. +# Copyright (c) 2004-2006 The Regents of the University of California. # All rights reserved. +# Copyright (c) 2006 Cisco Systems, Inc. All rights reserved. # $COPYRIGHT$ # # Additional copyrights may follow @@ -19,15444 +15,9603 @@ # Do a little error checking -if test ! -r "$1/fortran_kinds.sh"; then - echo "ERROR: Cannot find $1/fortran_kinds.sh" +if test ! -f fortran_kinds.sh; then + echo "ERROR: Cannot find fortran_kinds.sh" >&2 exit 1 -elif test ! -s "$1/fortran_kinds.sh"; then - echo "ERROR: $1/fortran_kinds.sh appears to be empty!" +elif test -z fortran_kinds.sh; then + echo "ERROR: fortran_kinds.sh appears to be empty!" >&2 exit 1 fi -# Read the setup information +# Read in the KIND information -. "$1/fortran_kinds.sh" +. fortran_kinds.sh -# Output generation configuration information +# Setup -# Do we want the 2 buffer functions? (see comment in -# ompi/mpi/f90/Makefile.am) +output=1 +allranks="0 $ranks" -WANT_2BUFFER_FUNCTIONS=$2 -if test "$WANT_2BUFFER_FUNCTIONS" = "1"; then - want_2buf=yes -else - want_2buf=no -fi +#------------------------------------------------------------------------ -cat >&2 <&2 diff --git a/ompi/mpi/f90/scripts/mpi_accumulate_f90.f90.sh b/ompi/mpi/f90/scripts/mpi_accumulate_f90.f90.sh index d3169b1493..ad80da7f45 100755 --- a/ompi/mpi/f90/scripts/mpi_accumulate_f90.f90.sh +++ b/ompi/mpi/f90/scripts/mpi_accumulate_f90.f90.sh @@ -1,208 +1,94 @@ #! /bin/sh +# +# Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana +# University Research and Technology +# Corporation. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# Copyright (c) 2006 Cisco Systems, Inc. All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + +# +# This file generates a Fortran code to bridge between an explicit F90 +# generic interface and the F77 implementation. +# +# This file is automatically generated by either of the scripts +# ../xml/create_mpi_f90_medium.f90.sh or +# ../xml/create_mpi_f90_large.f90.sh +# + . "$1/fortran_kinds.sh" -procedure='MPI_Accumulate' +# This entire file is only generated in medium/large modules. So if +# we're not at least medium, bail now. -rank=0 -for kind in $lkinds +check_size medium +if test "$output" = "0"; then + exit 0 +fi + +# Ok, we should continue. + +allranks="0 $ranks" + + +output() { + procedure=$1 + rank=$2 + type=$4 + proc="$1$2D$3" + + cat < @@ -33,7 +26,7 @@ - + + + + != MPI_AINT_VAL) + + + + != INT_VAL) + + diff --git a/ompi/mpi/f90/xml/chasm-mpi-test.f90.xsl b/ompi/mpi/f90/xml/chasm-mpi-test.f90.xsl index 3203d7f9ed..396624f09c 100644 --- a/ompi/mpi/f90/xml/chasm-mpi-test.f90.xsl +++ b/ompi/mpi/f90/xml/chasm-mpi-test.f90.xsl @@ -1,19 +1,12 @@ - @@ -33,7 +26,7 @@ - + - - - - - - - - + + + + + + + + @@ -88,31 +81,6 @@ - defineArrayFunctionBody --> - - -for rank in $ranks -do - case "$rank" in 1) dim=':' ; esac - case "$rank" in 2) dim=':,:' ; esac - case "$rank" in 3) dim=':,:,:' ; esac - case "$rank" in 4) dim=':,:,:,:' ; esac - case "$rank" in 5) dim=':,:,:,:,:' ; esac - case "$rank" in 6) dim=':,:,:,:,:,:' ; esac - case "$rank" in 7) dim=':,:,:,:,:,:,:' ; esac - - - - for kind in $ikinds - - do - - proc="${procedure}${rank}DI${kind}" - - echo "subroutine ${proc}( - )" - - echo " use mpi_kinds" - @@ -210,8 +178,17 @@ echo - - + + + + + + + + + + + @@ -229,6 +206,16 @@ echo + + + + integer(kind=MPI_ADDRESS_KIND) + + + + integer + + @@ -299,7 +286,7 @@ echo integer(kind=MPI_OFFSET_KIND) - integer(MPI_STATUS_SIZE) + integer, dimension(MPI_STATUS_SIZE) external @@ -374,6 +361,31 @@ echo + + + + + integer(kind=MPI_INTEGER4_KIND), dimension(8) :: + 1DI4 + integer(kind=MPI_INTEGER4_KIND), dimension(2,4) :: + 2DI4 + integer(kind=MPI_INTEGER4_KIND), dimension(2,1,4) :: + 3DI4 + integer(kind=MPI_INTEGER4_KIND), dimension(2,1,1,4) :: + 4DI4 + integer(kind=MPI_INTEGER4_KIND), dimension(2,1,1,1,4) :: + 5DI4 + integer(kind=MPI_INTEGER4_KIND), dimension(2,1,1,1,1,4) :: + 6DI4 + integer(kind=MPI_INTEGER4_KIND), dimension(2,1,1,1,1,1,4) :: + 7DI4 + + + + + @@ -381,6 +393,16 @@ echo + + + + = MPI_AINT_VAL + + + + = INT_VAL + + diff --git a/ompi/mpi/f90/xml/chasm-mpi.f90.sh.xsl b/ompi/mpi/f90/xml/chasm-mpi.f90.sh.xsl new file mode 100644 index 0000000000..6064ecc225 --- /dev/null +++ b/ompi/mpi/f90/xml/chasm-mpi.f90.sh.xsl @@ -0,0 +1,477 @@ + + + + + + + + + + + + + + + + + + + + + + + _C.c + + + + + + + _C.h + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +output() { + procedure=$1 + rank=$2 + type=$4 + proc="$1$2D$3" + + cat <<EOF + + + + + + +EOF +} + +for rank in $allranks +do + case "$rank" in 0) dim='' ; esac + case "$rank" in 1) dim=', dimension(:)' ; esac + case "$rank" in 2) dim=', dimension(:,:)' ; esac + case "$rank" in 3) dim=', dimension(:,:,:)' ; esac + case "$rank" in 4) dim=', dimension(:,:,:,:)' ; esac + case "$rank" in 5) dim=', dimension(:,:,:,:,:)' ; esac + case "$rank" in 6) dim=', dimension(:,:,:,:,:,:)' ; esac + case "$rank" in 7) dim=', dimension(:,:,:,:,:,:,:)' ; esac + + + + output + ${rank} CH "character${dim}" + + output + ${rank} L "logical${dim}" + + + for kind in $ikinds + + do + + output + ${rank} I${kind} "integer*${kind}${dim}" + + done + + + for kind in $rkinds + + do + + output + ${rank} R${kind} "real*${kind}${dim}" + + done + + + for kind in $ckinds + + do + + output + ${rank} C${kind} "complex*${kind}${dim}" + + done + + + done + + + + + + + + + subroutine ${proc}( + ) + + use mpi_kinds + + + + + + + + + + + integer, intent(out) :: ierr + + + + call ${procedure}( + ) + + end subroutine ${proc} + + + + + + + + + + + , + + + & + + + + + + + , + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + integer + + + + + integer + + + character + + (len=*) + + + + UNSUPPORTED + + + + + UNSUPPORTED + + + + + + + + + + + + + + + , dimension( + + + + , + + + ) + + + + + + + + + + + + integer + + + integer(kind=MPI_ADDRESS_KIND) + + + integer(kind=MPI_OFFSET_KIND) + + + integer, dimension(MPI_STATUS_SIZE) + + + + + integer + + + UNSUPPORTED + + + + + + UNSUPPORTED + + + + + + + + + +# +# Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana +# University Research and Technology +# Corporation. All rights reserved. +# Copyright (c) 2004-2005 The Regents of the University of California. +# All rights reserved. +# Copyright (c) 2006 Cisco Systems, Inc. All rights reserved. +# $COPYRIGHT$ +# +# Additional copyrights may follow +# +# $HEADER$ +# + + + + + + + + + +# +# This file generates a Fortran code to bridge between an explicit F90 +# generic interface and the F77 implementation. +# +# This file is automatically generated by either of the scripts +# ../xml/create_mpi_f90_medium.f90.sh or +# ../xml/create_mpi_f90_large.f90.sh +# + + + + + + + + + + #! /bin/sh + + + + . "$1/fortran_kinds.sh" + + + + # This entire file is only generated in medium/large + modules. So if + + # we're not at least medium, bail now. + + + + check_size + + if test "$output" = "0"; then + + exit 0 + + fi + + + + # Ok, we should continue. + + + + allranks="0 $ranks" + + + + + + + + + + + diff --git a/ompi/mpi/f90/xml/chasm-mpi.f90.xsl b/ompi/mpi/f90/xml/chasm-mpi.f90.xsl index 77d9e1144b..19797ea82b 100644 --- a/ompi/mpi/f90/xml/chasm-mpi.f90.xsl +++ b/ompi/mpi/f90/xml/chasm-mpi.f90.xsl @@ -1,19 +1,12 @@ - @@ -33,6 +26,8 @@ + + @@ -64,9 +59,7 @@ - - - + @@ -74,6 +67,36 @@ + + + + + + + + + + procedure=' + + ' + + + + + + echo + + echo + + + + + + + + @@ -437,9 +460,7 @@ do echo "end subroutine ${proc}" echo done - echo done -echo @@ -593,7 +614,7 @@ echo integer(kind=MPI_OFFSET_KIND) - integer(MPI_STATUS_SIZE) + integer, dimension(MPI_STATUS_SIZE) @@ -622,7 +643,6 @@ echo . fortran_kinds.sh - diff --git a/ompi/mpi/f90/xml/chasm-mpi.i.f90.xsl b/ompi/mpi/f90/xml/chasm-mpi.i.f90.xsl index f89432827c..4ae2ec1d75 100644 --- a/ompi/mpi/f90/xml/chasm-mpi.i.f90.xsl +++ b/ompi/mpi/f90/xml/chasm-mpi.i.f90.xsl @@ -1,19 +1,12 @@ - diff --git a/ompi/mpi/f90/xml/common-C.xsl b/ompi/mpi/f90/xml/common-C.xsl new file mode 100644 index 0000000000..0827e76814 --- /dev/null +++ b/ompi/mpi/f90/xml/common-C.xsl @@ -0,0 +1,446 @@ + + + + + + + + + + + + + + /** + * + + + + - this file is automatically generated + + */ + + + + + + + + + + + + + #ifdef __cplusplus + extern "C" { + #endif + + + + + + + #ifdef __cplusplus + } + #endif + + + + + + + + + + + + + static + + + + + + + ( + + ); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ( + + + + ) + + + + + + + + + + + + + + + + + + + + + + + + + , + + + + + + + + + + + { + + + + + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PTR_ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ( + + ) + ; + + + + + + + + + + + + + + , + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + no + + + + diff --git a/ompi/mpi/f90/xml/common-f90.xsl b/ompi/mpi/f90/xml/common-f90.xsl new file mode 100644 index 0000000000..20aea1f0f4 --- /dev/null +++ b/ompi/mpi/f90/xml/common-f90.xsl @@ -0,0 +1,732 @@ + + + + + + + + + + + + /** + * Macros to create Fortran symbols + + */ + + + + + #if defined(F90_SYM_CASE_LOWER) + + + + + CH_INIT_ + + + + + + #elif defined(F90_SYM_CASE_UPPER) + + + + + CH_INIT_ + + + + #endif /* F90_SYM_CASE */ + + + + + + + + + + + /** + * Macros to create Fortran symbols + + */ + + + + + #if defined(F90_SYM_CASE_LOWER) + + + + + + + + + + + SET_ + _ + + + + + + + #elif defined(F90_SYM_CASE_UPPER) + + + + + + + + + + + SET_ + _ + + + + + #endif /* F90_SYM_CASE */ + + + + + + + + + + + + + + + # define + F90_SYMBOL( + ) + + + + + + + + + + + + # define + F90_SYMBOL( + ) + + + + + + + /** + * Pointers to Fortran procedures + + */ + + + + + _ + + + + + + + + + + + CH_INIT_ + + + * Declare Fortran initialization routine + + void + (void); + + + + + + + + + + + + + + (*PTR_ + )( + + + + ); + + + + + + + + /** + * Functions to set pointers to Fortran procedures + (called from Fortran) + */ + + + + + _ + + + + + + + + + + + + + + void SET_ + ( + + + + (*fptr)( + + + + )) + { + PTR_ + = fptr; + } + + + + + + + + /** + * Bridging functions to call Fortran procedures + + */ + + + + + _ + + + + + + + + + + + + + subroutine + () + use + + + call SET_ + _ + ( + ) + + end subroutine + + + + + + + + + + + + + + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + _h = strlen( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + APPEND_F90_COMPILER(createArrayDescAndHidden) ( + + , F90_Array, & + + ); + + + + + + + + + + + + + + APPEND_F90_COMPILER(freeArrayDescAndHidden) ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + _dv + + + + + + + + + + + + + + _h + + + + + _dvh + + + + + + + + + + + + + + + + + + + + + + use + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ( + + ) + + + + + + + + + + + + + + call + + + + = + + + + = + + + + + + + + + + + _l + + , + + + + + + + + + + + + diff --git a/ompi/mpi/f90/xml/common.xsl b/ompi/mpi/f90/xml/common.xsl new file mode 100644 index 0000000000..60351e939f --- /dev/null +++ b/ompi/mpi/f90/xml/common.xsl @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + #include < + > + + + + + + + #include " + " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ompi/mpi/f90/xml/create_mpi_f90_large.f90.sh b/ompi/mpi/f90/xml/create_mpi_f90_large.f90.sh new file mode 100755 index 0000000000..8499661495 --- /dev/null +++ b/ompi/mpi/f90/xml/create_mpi_f90_large.f90.sh @@ -0,0 +1,18 @@ +#! /bin/sh + +XSL_PATH=. +OUT_PATH=../scripts + +. functions_f90_large.list + +if test "$1" != ""; then + procedures=$1 +fi + +for proc in $procedures +do + lc_proc=`echo ${proc}|tr '[A-Z]' '[a-z]'` + echo "creating ${lc_proc}_f90.f90.sh" + Xalan -p test_function "'${proc}'" -p interface_size "'large'" -o ${OUT_PATH}/${lc_proc}_f90.f90.sh ../xml/mpi.h.xml ${XSL_PATH}/chasm-mpi.f90.sh.xsl + chmod 755 ../scripts/${lc_proc}_f90.f90.sh +done diff --git a/ompi/mpi/f90/xml/create_mpi_f90_medium.f90.sh b/ompi/mpi/f90/xml/create_mpi_f90_medium.f90.sh new file mode 100755 index 0000000000..0563870181 --- /dev/null +++ b/ompi/mpi/f90/xml/create_mpi_f90_medium.f90.sh @@ -0,0 +1,18 @@ +#! /bin/sh + +XSL_PATH=. +OUT_PATH=../scripts + +. functions_f90_medium.list + +if test "$1" != ""; then + procedures=$1 +fi + +for proc in $procedures +do + lc_proc=`echo ${proc}|tr '[A-Z]' '[a-z]'` + echo "creating ${lc_proc}_f90.f90.sh" + Xalan -p test_function "'${proc}'" -p interface_size "'medium'" -o ${OUT_PATH}/${lc_proc}_f90.f90.sh ../xml/mpi.h.xml ${XSL_PATH}/chasm-mpi.f90.sh.xsl + chmod 755 ../scripts/${lc_proc}_f90.f90.sh +done diff --git a/ompi/mpi/f90/xml/functions_f90_large.list b/ompi/mpi/f90/xml/functions_f90_large.list new file mode 100644 index 0000000000..1689ad3f98 --- /dev/null +++ b/ompi/mpi/f90/xml/functions_f90_large.list @@ -0,0 +1,28 @@ +proc_should_be_medium=" +MPI_Accumulate +MPI_Get +MPI_Put +MPI_Sendrecv_replace +" + +procedures=" +MPI_Allgather +MPI_Allgatherv +MPI_Allreduce +MPI_Alltoall +MPI_Alltoallv +MPI_Alltoallw +MPI_Exscan +MPI_Gather +MPI_Gatherv +MPI_Pack +MPI_Pack_external +MPI_Reduce +MPI_Reduce_scatter +MPI_Scan +MPI_Scatter +MPI_Scatterv +MPI_Sendrecv +MPI_Unpack +MPI_Unpack_external +" diff --git a/ompi/mpi/f90/xml/functions_f90_medium.list b/ompi/mpi/f90/xml/functions_f90_medium.list new file mode 100644 index 0000000000..3d848ae674 --- /dev/null +++ b/ompi/mpi/f90/xml/functions_f90_medium.list @@ -0,0 +1,56 @@ +procedures=" +MPI_Accumulate +MPI_Address +MPI_Bcast +MPI_Bsend +MPI_Bsend_init +MPI_Buffer_attach +MPI_Buffer_detach +MPI_File_iread +MPI_File_iread_at +MPI_File_iread_shared +MPI_File_iwrite +MPI_File_iwrite_at +MPI_File_iwrite_shared +MPI_File_read +MPI_File_read_all +MPI_File_read_all_begin +MPI_File_read_all_end +MPI_File_read_at +MPI_File_read_at_all +MPI_File_read_at_all_begin +MPI_File_read_at_all_end +MPI_File_read_ordered +MPI_File_read_ordered_begin +MPI_File_read_ordered_end +MPI_File_read_shared +MPI_File_write +MPI_File_write_all +MPI_File_write_all_begin +MPI_File_write_all_end +MPI_File_write_at +MPI_File_write_at_all +MPI_File_write_at_all_begin +MPI_File_write_at_all_end +MPI_File_write_ordered +MPI_File_write_ordered_begin +MPI_File_write_ordered_end +MPI_File_write_shared +MPI_Get +MPI_Ibsend +MPI_Irecv +MPI_Irsend +MPI_Isend +MPI_Issend +MPI_Put +MPI_Recv +MPI_Recv_init +MPI_Rsend +MPI_Rsend_init +MPI_Send +MPI_Send_init +MPI_Sendrecv_replace +MPI_Ssend +MPI_Ssend_init +MPI_Win_create +" diff --git a/ompi/mpi/f90/xml/mpi.h.xml b/ompi/mpi/f90/xml/mpi.h.xml index 613fc69957..fc0ace8970 100644 --- a/ompi/mpi/f90/xml/mpi.h.xml +++ b/ompi/mpi/f90/xml/mpi.h.xml @@ -1,5 +1,4 @@ - - + @@ -299,7 +298,7 @@ - METHOD: int MPI_Allgatherv(void *, int, MPI_Datatype, void *, int *, int *, MPI_Datatype, MPI_Comm) C - WARNING, this method has two choice arguments. --> - + @@ -413,7 +412,7 @@ - METHOD: int MPI_Allreduce(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm) C - WARNING, this method has two choice arguments. --> - + @@ -470,7 +469,7 @@ - METHOD: int MPI_Alltoall(void *, int, MPI_Datatype, void *, int, MPI_Datatype, MPI_Comm) C - WARNING, this method has two choice arguments. --> - + @@ -533,7 +532,7 @@ - METHOD: int MPI_Alltoallv(void *, int *, int *, MPI_Datatype, void *, int *, int *, MPI_Datatype, MPI_Comm) C - WARNING, this method has two choice arguments. --> - + @@ -624,7 +623,7 @@ - METHOD: int MPI_Alltoallw(void *, int *, int *, MPI_Datatype *, void *, int *, int *, MPI_Datatype *, MPI_Comm) C - WARNING, this method has two choice arguments. --> - + @@ -2352,7 +2351,7 @@ - METHOD: int MPI_Exscan(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm) C - WARNING, this method has two choice arguments. --> - + @@ -4648,7 +4647,7 @@ - METHOD: int MPI_Gather(void *, int, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm) C - WARNING, this method has two choice arguments. --> - + @@ -4717,7 +4716,7 @@ - METHOD: int MPI_Gatherv(void *, int, MPI_Datatype, void *, int *, int *, MPI_Datatype, int, MPI_Comm) C - WARNING, this method has two choice arguments. --> - + @@ -6834,7 +6833,7 @@ - METHOD: int MPI_Pack(void *, int, MPI_Datatype, void *, int, int *, MPI_Comm) C - WARNING, this method has two choice arguments. --> - + @@ -6901,7 +6900,7 @@ - METHOD: int MPI_Pack_external(char *, void *, int, MPI_Datatype, void *, MPI_Aint, MPI_Aint *) C - WARNING, this method has two choice arguments. --> - + @@ -7325,7 +7324,7 @@ - METHOD: int MPI_Reduce(void *, void *, int, MPI_Datatype, MPI_Op, int, MPI_Comm) C - WARNING, this method has two choice arguments. --> - + @@ -7388,7 +7387,7 @@ - METHOD: int MPI_Reduce_scatter(void *, void *, int *, MPI_Datatype, MPI_Op, MPI_Comm) C - WARNING, this method has two choice arguments. --> - + @@ -7696,7 +7695,7 @@ - METHOD: int MPI_Scan(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm) C - WARNING, this method has two choice arguments. --> - + @@ -7753,7 +7752,7 @@ - METHOD: int MPI_Scatter(void *, int, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm) C - WARNING, this method has two choice arguments. --> - + @@ -7822,7 +7821,7 @@ - METHOD: int MPI_Scatterv(void *, int *, int *, MPI_Datatype, void *, int, MPI_Datatype, int, MPI_Comm) C - WARNING, this method has two choice arguments. --> - + @@ -8019,7 +8018,7 @@ - METHOD: int MPI_Sendrecv(void *, int, MPI_Datatype, int, int, void *, int, MPI_Datatype, int, int, MPI_Comm, MPI_Status *) C - WARNING, this method has two choice arguments. --> - + @@ -9405,7 +9404,7 @@ - + @@ -9774,7 +9773,7 @@ - + @@ -9822,7 +9821,7 @@ - + @@ -9918,7 +9917,7 @@ - + @@ -10080,7 +10079,7 @@ - + @@ -10128,7 +10127,7 @@ - + @@ -10191,7 +10190,7 @@ - METHOD: int MPI_Unpack(void *, int, int *, void *, int, MPI_Datatype, MPI_Comm) C - WARNING, this method has two choice arguments. --> - + @@ -10258,7 +10257,7 @@ - METHOD: int MPI_Unpack_external(char *, void *, MPI_Aint, MPI_Aint *, void *, int, MPI_Datatype) C - WARNING, this method has two choice arguments. --> - + diff --git a/ompi/mpi/f90/xml/type-conv-f90.xsl b/ompi/mpi/f90/xml/type-conv-f90.xsl new file mode 100644 index 0000000000..e788d09ef0 --- /dev/null +++ b/ompi/mpi/f90/xml/type-conv-f90.xsl @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + int + + + + + + + + + + + + + void* + + + + + + + + + integer + + + real + + + complex + + + logical + + + character (len= + + ) + + + + + + + + UNSUPPORTED + + + + + + diff --git a/ompi/mpi/f90/xml/type-conv-user.xsl b/ompi/mpi/f90/xml/type-conv-user.xsl new file mode 100644 index 0000000000..582d9259e5 --- /dev/null +++ b/ompi/mpi/f90/xml/type-conv-user.xsl @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ompi/mpi/f90/xml/type-conversions.xsl b/ompi/mpi/f90/xml/type-conversions.xsl new file mode 100644 index 0000000000..8a3283ab7d --- /dev/null +++ b/ompi/mpi/f90/xml/type-conversions.xsl @@ -0,0 +1,513 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + void + + + + + char + + + unsigned char + + + short + + + unsigned short + + + int + + + unsigned int + + + long + + + unsigned long + + + long long + + + unsigned long long + + + UNSUPPORTED + + + + + + + float + + + double + + + UNSUPPORTED + + + + + + + + + + + + + + + + + + + UNSUPPORTED + + + + + + void + + + int + + + + + char + + + unsigned char + + + short + + + unsigned short + + + int + + + unsigned int + + + long + + + unsigned long + + + long long + + + unsigned long long + + + UNSUPPORTED + + + + + + + float + + + double + + + UNSUPPORTED + + + + + + + F90_ComplexFloat + + + F90_ComplexDouble + + + UNSUPPORTED + + + + + char* + + + + + + UNSUPPORTED + + + UNSUPPORTED + + + UNSUPPORTED + + + + + + + + + + + + + + + + + + + + + + + + + + + + * + + + UNSUPPORTED + + + + + + + + + void* + + + + + + + + + + + + + * + + + * + + + + + * + + + + + + + * + + + * + + + * + + + * + + + + + + + UNSUPPORTED + + + + + + + + + + + + + + + + + + + rtn_ + + + + + + + + + + + + rtn_ + + + rtn_ + + + + + + + + + rtn_ + + + rtn_ + + + rtn_ + + + + + + + UNSUPPORTED + + + + + + + + + + + + + + + = + + + = + + + + + + + + + + + + + + + = + + + = + + + + + + + + + = + + + = + + + = + + + + + + + UNSUPPORTED + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UNSUPPORTED + + + + + +