the 11 ompi/include/mpif-externals.h ! Copyright (c) 2004-2005 The Regents of the University of California. the 22 ompi/include/mpif-externals.h ! These "external" statements are specific to the MPI mpif.h the 23 ompi/include/mpif-externals.h ! interface (and are toxic to the MPI module interfaces),. the 35 ompi/include/mpif-externals.h ! the same size/type. It is therefore external'ed here, and not the 11 ompi/include/mpif-sentinels.h ! Copyright (c) 2004-2005 The Regents of the University of California. the 23 ompi/include/mpif-sentinels.h ! All of these types were chosen with care to match the types of the 27 ompi/include/mpif-sentinels.h ! - the "mpi" module bindings the 28 ompi/include/mpif-sentinels.h ! - the "mpi_f08" module bindings the 36 ompi/include/mpif-sentinels.h ! MPI_IN_PLACE has the same rationale as MPI_BOTTOM. the 38 ompi/include/mpif-sentinels.h ! Making MPI_ARGV_NULL be the same type as the parameter that is the 39 ompi/include/mpif-sentinels.h ! exepected in the F90 binding for MPI_COMM_SPAWN means that we the 45 ompi/include/mpif-sentinels.h ! F77 functions are all smart enough to check that the errcodes the 47 ompi/include/mpif-sentinels.h ! (hence, the fact that this is an array of only 1 element does not the 2 ompi/mpi/fortran/base/attr-fn-int-callback-interfaces.h ! Copyright (c) 2004-2005 The Regents of the University of California. the 12 ompi/mpi/fortran/base/conversion-fn-null-int-interface.h ! them to the "mpi" module namespace, and result in linker errors if MPI the 13 ompi/mpi/fortran/base/conversion-fn-null-int-interface.h ! F90 applications try to use them. because the implementations of the 14 ompi/mpi/fortran/base/conversion-fn-null-int-interface.h ! these functions are not in the MPI module namespace -- they're the F77 the 15 ompi/mpi/fortran/configure-fortran-output-bottom.h ! conditional logic based on the #define's values from that file. the 14 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! This file provides the interface specifications for the MPI Fortran the 16 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! and the back-end OMPI implementation subroutine name (e.g., the 23 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! Most of the "wrapper" subroutines in the mpi_f08 module (i.e., all the 24 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! the ones prototyped in this file) are simple routines that simply the 30 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! BIND(C) routines (because the .TRUE. and .FALSE. values are not the 33 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! invoke the back-end ompi_*_f() C function. There are 2 cases: the 35 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! 1. If the Fortran interface has a LOGICAL parameter and no the 36 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! TYPE(MPI_Status) parameter, the individual wrapper implementation the 37 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! files (e.g., finalized_f08.F90) use the "mpi" module to get a the 38 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! interface for the subroutine and call the PMPI_* name of the the 39 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! function, which then invokes the corresponding function in the the 42 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! This is a bit of a hack: the "mpi" module will provide the right the 43 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! Fortran interface so that the compiler can verify that we're passing the 44 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! the right types (e.g., convert MPI handles from comm to the 46 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! arrays* of handles (e.g., the sendtypes and recvtypes arrays the 47 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! MPI_Alltoallw), we declare that the corresponding ompi_*_f() the 53 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! However, remember that Fortran passes by reference. So the compiler the 54 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! will pass a pointer to sendtypes(0)%MPI_VAL (i.e., the first integer the 55 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! in the array). And since the mpi_f08 handles were cleverly designed the 58 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! an address to the first MPI_VAL is exactly the same as passing an the 61 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! Specifically: the back-end C function (in *.c files in the 69 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! is actually quite a common hack in the Fortran developer world, so the 72 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! 2. If the Fortran interface has both LOGICAL and TYPE(MPI_Status) the 76 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! The problem occurs because in the mpi_f08 module, an MPI_Status is the 77 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! TYPE(MPI_Status), but in the mpi module, it's INTEGER, the 81 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! to fool the compiler into accepting it (it's the same C<-->Fortran the 85 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! an "interface" block for the PMPI_* subroutine that we want to call. the 86 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! And we lie in that interface block, saying that the status argument the 89 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! the same type that we already have. the 91 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! For the C programmers reading this, this is very much analogous to the 104 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! To fix the compiler warning, instead of including "header.h", we the 119 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! because we know the back-end memory representation of the two types the 120 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! is the same. the 124 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! Wasn't that simple? Here's the list of subroutines that are not the 196 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! MPI_BUFFER_DETACH (i.e., it is different than the mpif.h / mpi the 3250 ompi/mpi/fortran/use-mpi-f08/bindings/mpi-f-interfaces-bind.h ! is replaced by the specific generics. the 10 ompi/mpi/fortran/use-mpi-tkr/mpi-f90-cptr-interfaces.h ! This file contains interfaces that use the ISO_C_BINDING module and the 11 ompi/mpi/fortran/use-mpi-tkr/mpi-f90-cptr-interfaces.h ! the TYPE(C_PTR) type, which not all Fortran compilers support (e.g., the 13 ompi/mpi/fortran/use-mpi-tkr/mpi-f90-cptr-interfaces.h ! preprocessor macro to protect the problematic declarations. the 16 ompi/mpi/fortran/use-mpi-tkr/mpi-f90-cptr-interfaces.h ! mpi.F90, which allows us to use the preprocessor "if" directive, the 34 ompi/mpi/fortran/use-mpi-tkr/mpi-f90-cptr-interfaces.h ! Only include the 2nd interface if we have ISO_C_BINDING / TYPE(C_PTR) the 63 ompi/mpi/fortran/use-mpi-tkr/mpi-f90-cptr-interfaces.h ! Only include the 2nd interface if we have ISO_C_BINDING / TYPE(C_PTR) the 91 ompi/mpi/fortran/use-mpi-tkr/mpi-f90-cptr-interfaces.h ! Only include the 2nd interface if we have ISO_C_BINDING / TYPE(C_PTR) the 11 ompi/mpi/fortran/use-mpi-tkr/mpi-f90-file-interfaces.h ! Copyright (c) 2004-2005 The Regents of the University of California. the 11 ompi/mpi/fortran/use-mpi-tkr/mpi-f90-interfaces.h ! Copyright (c) 2004-2005 The Regents of the University of California. the 11 ompi/mpi/fortran/use-mpi-tkr/mpi-f90-removed-interfaces.h ! Copyright (c) 2004-2005 The Regents of the University of California. the 12 ompi/mpi/fortran/use-mpi-tkr/pmpi-f90-cptr-interfaces.h ! This file contains interfaces that use the ISO_C_BINDING module and the 13 ompi/mpi/fortran/use-mpi-tkr/pmpi-f90-cptr-interfaces.h ! the TYPE(C_PTR) type, which not all Fortran compilers support (e.g., the 15 ompi/mpi/fortran/use-mpi-tkr/pmpi-f90-cptr-interfaces.h ! preprocessor macro to protect the problematic declarations. the 18 ompi/mpi/fortran/use-mpi-tkr/pmpi-f90-cptr-interfaces.h ! mpi.F90, which allows us to use the preprocessor "if" directive, the 36 ompi/mpi/fortran/use-mpi-tkr/pmpi-f90-cptr-interfaces.h ! Only include the 2nd interface if we have ISO_C_BINDING / TYPE(C_PTR) the 65 ompi/mpi/fortran/use-mpi-tkr/pmpi-f90-cptr-interfaces.h ! Only include the 2nd interface if we have ISO_C_BINDING / TYPE(C_PTR) the 93 ompi/mpi/fortran/use-mpi-tkr/pmpi-f90-cptr-interfaces.h ! Only include the 2nd interface if we have ISO_C_BINDING / TYPE(C_PTR) the 11 ompi/mpi/fortran/use-mpi-tkr/pmpi-f90-file-interfaces.h ! Copyright (c) 2004-2005 The Regents of the University of California. the 11 ompi/mpi/fortran/use-mpi-tkr/pmpi-f90-interfaces.h ! Copyright (c) 2004-2005 The Regents of the University of California. the 11 ompi/mpi/fortran/use-mpi-tkr/pmpi-f90-removed-interfaces.h ! Copyright (c) 2004-2005 The Regents of the University of California. the 12 ompi/mpiext/example/mpif-h/mpiext_example_mpifh.h ! Since the OMPI mpif.h interface does not prototype subroutines, do not the 11 ompi/mpiext/example/use-mpi-f08/mpiext_example_usempif08.h ! This whole file will be included in the mpi_f08_ext module interface the 12 ompi/mpiext/example/use-mpi-f08/mpiext_example_usempif08.h ! section. Note that the extension's mpif.h file will be included the 17 ompi/mpiext/example/use-mpi-f08/mpiext_example_usempif08.h ! here. Note that the mpiext_example_mpif.h will automatically be the 11 ompi/mpiext/example/use-mpi/mpiext_example_usempi.h ! This whole file will be included in the mpi_ext module interface the 12 ompi/mpiext/example/use-mpi/mpiext_example_usempi.h ! section. Note that the extension's mpif.h file will be included the 17 ompi/mpiext/example/use-mpi/mpiext_example_usempi.h ! here. Note that the mpiext_example_mpif.h will automatically be the 14 ompi/mpiext/pcollreq/mpif-h/mpiext_pcollreq_mpifh.h ! Since the OMPI mpif.h interface does not prototype subroutines, do not the 14 ompi/mpiext/pcollreq/use-mpi-f08/mpiext_pcollreq_usempif08.h ! This whole file will be included in the mpi_f08_ext module interface the 15 ompi/mpiext/pcollreq/use-mpi-f08/mpiext_pcollreq_usempif08.h ! section. Note that the extension's mpif.h file will be included the 20 ompi/mpiext/pcollreq/use-mpi-f08/mpiext_pcollreq_usempif08.h ! here. Note that the mpiext_example_mpif.h will automatically be the 14 ompi/mpiext/pcollreq/use-mpi/mpiext_pcollreq_usempi.h ! This whole file will be included in the mpi_ext module interface the 15 ompi/mpiext/pcollreq/use-mpi/mpiext_pcollreq_usempi.h ! section. Note that the extension's mpif.h file will be included the 20 ompi/mpiext/pcollreq/use-mpi/mpiext_pcollreq_usempi.h ! here. Note that the mpiext_example_mpif.h will automatically be the 12 ompi/mpiext/shortfloat/use-mpi/mpiext_shortfloat_usempi.h ! into the mpi_ext module file.