2004-04-16 06:33:49 +04:00
|
|
|
/*
|
2005-11-05 22:57:48 +03:00
|
|
|
* 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.
|
2004-11-28 23:09:25 +03:00
|
|
|
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
|
|
* University of Stuttgart. All rights reserved.
|
2005-03-24 15:43:37 +03:00
|
|
|
* Copyright (c) 2004-2005 The Regents of the University of California.
|
|
|
|
* All rights reserved.
|
2004-11-22 04:38:40 +03:00
|
|
|
* $COPYRIGHT$
|
|
|
|
*
|
|
|
|
* Additional copyrights may follow
|
|
|
|
*
|
2004-04-16 06:33:49 +04:00
|
|
|
* $HEADER$
|
|
|
|
*/
|
|
|
|
|
2004-06-07 19:33:53 +04:00
|
|
|
#include "ompi_config.h"
|
2004-04-16 06:33:49 +04:00
|
|
|
|
2006-02-12 04:33:29 +03:00
|
|
|
#include "ompi/mpi/f77/bindings.h"
|
|
|
|
#include "ompi/mpi/f77/constants.h"
|
|
|
|
#include "ompi/errhandler/errhandler.h"
|
|
|
|
#include "ompi/communicator/communicator.h"
|
2004-04-16 06:33:49 +04:00
|
|
|
|
2004-06-07 19:33:53 +04:00
|
|
|
#if OMPI_HAVE_WEAK_SYMBOLS && OMPI_PROFILE_LAYER
|
2004-04-16 06:33:49 +04:00
|
|
|
#pragma weak PMPI_FILE_READ_SHARED = mpi_file_read_shared_f
|
|
|
|
#pragma weak pmpi_file_read_shared = mpi_file_read_shared_f
|
|
|
|
#pragma weak pmpi_file_read_shared_ = mpi_file_read_shared_f
|
|
|
|
#pragma weak pmpi_file_read_shared__ = mpi_file_read_shared_f
|
2004-06-07 19:33:53 +04:00
|
|
|
#elif OMPI_PROFILE_LAYER
|
|
|
|
OMPI_GENERATE_F77_BINDINGS (PMPI_FILE_READ_SHARED,
|
2004-04-16 06:33:49 +04:00
|
|
|
pmpi_file_read_shared,
|
|
|
|
pmpi_file_read_shared_,
|
|
|
|
pmpi_file_read_shared__,
|
|
|
|
pmpi_file_read_shared_f,
|
|
|
|
(MPI_Fint *fh, char *buf, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *status, MPI_Fint *ierr),
|
|
|
|
(fh, buf, count, datatype, status, ierr) )
|
|
|
|
#endif
|
|
|
|
|
2004-06-07 19:33:53 +04:00
|
|
|
#if OMPI_HAVE_WEAK_SYMBOLS
|
2004-04-16 06:33:49 +04:00
|
|
|
#pragma weak MPI_FILE_READ_SHARED = mpi_file_read_shared_f
|
|
|
|
#pragma weak mpi_file_read_shared = mpi_file_read_shared_f
|
|
|
|
#pragma weak mpi_file_read_shared_ = mpi_file_read_shared_f
|
|
|
|
#pragma weak mpi_file_read_shared__ = mpi_file_read_shared_f
|
|
|
|
#endif
|
|
|
|
|
2004-06-07 19:33:53 +04:00
|
|
|
#if ! OMPI_HAVE_WEAK_SYMBOLS && ! OMPI_PROFILE_LAYER
|
|
|
|
OMPI_GENERATE_F77_BINDINGS (MPI_FILE_READ_SHARED,
|
2004-04-16 06:33:49 +04:00
|
|
|
mpi_file_read_shared,
|
|
|
|
mpi_file_read_shared_,
|
|
|
|
mpi_file_read_shared__,
|
|
|
|
mpi_file_read_shared_f,
|
|
|
|
(MPI_Fint *fh, char *buf, MPI_Fint *count, MPI_Fint *datatype, MPI_Fint *status, MPI_Fint *ierr),
|
|
|
|
(fh, buf, count, datatype, status, ierr) )
|
|
|
|
#endif
|
|
|
|
|
2004-04-20 22:50:43 +04:00
|
|
|
|
2004-06-07 19:33:53 +04:00
|
|
|
#if OMPI_PROFILE_LAYER && ! OMPI_HAVE_WEAK_SYMBOLS
|
2006-02-12 04:33:29 +03:00
|
|
|
#include "ompi/mpi/f77/profile/defines.h"
|
2004-04-20 22:50:43 +04:00
|
|
|
#endif
|
|
|
|
|
2004-09-17 08:03:19 +04:00
|
|
|
void mpi_file_read_shared_f(MPI_Fint *fh, char *buf, MPI_Fint *count,
|
|
|
|
MPI_Fint *datatype, MPI_Fint *status,
|
|
|
|
MPI_Fint *ierr)
|
2004-04-16 06:33:49 +04:00
|
|
|
{
|
2005-03-26 21:49:16 +03:00
|
|
|
MPI_File c_fh = MPI_File_f2c(*fh);
|
|
|
|
MPI_Datatype c_type = MPI_Type_f2c(*datatype);
|
|
|
|
MPI_Status *c_status;
|
A bunch of changes to support MPI_INTEGER*x, MPI_REAL*x,
MPI_COMPLEX*x, and some optional C datatypes in MPI reduction
operations. These types are not technically supported by the letter
of the MPI standard, but are implied by the spirit of it (and there
are definitely users that use them in real applications)
- Add checks in configure for back-end C types for MPI_INTEGER*x and
MPI_REAL*x
- Create C data structs for MPI_COMPLEX*x
- Fixed typo for MPI_INTEGER8 in mpi.h
- Updated configure macros to create MPI_FORTRAN_INTEGER* defines, as
opposed to MPI_FORTRAN_INT, which was causing [me] lots of confusion
(between C "*_INT" names and Fortran "*_INT" names). This caused
some trivial updates in ddt, ompi_info, and the MPI layer to match.
- Update ompi_info to show whether we have each MPI_INTEGER*x,
MPI_REAL*x, and MPI_COMPLEX*x
- Extended reduction operations for optional datatypes:
- "C integer" now includes long long int, long long, and unsigned
long long
- "Fortran integer" now includes MPI_INTEGER*x
- "Floating point" now includes MPI_REAL*x
- "Complex" now includes MPI_COMPLEX*x
This commit was SVN r5511.
2005-04-27 14:23:06 +04:00
|
|
|
#if OMPI_SIZEOF_FORTRAN_INTEGER != SIZEOF_INT
|
2005-03-26 21:49:16 +03:00
|
|
|
MPI_Status c_status2;
|
2004-09-17 08:03:19 +04:00
|
|
|
#endif
|
|
|
|
|
2005-03-26 21:49:16 +03:00
|
|
|
/* See if we got MPI_STATUS_IGNORE */
|
|
|
|
if (OMPI_IS_FORTRAN_STATUS_IGNORE(status)) {
|
|
|
|
c_status = MPI_STATUS_IGNORE;
|
|
|
|
} else {
|
|
|
|
/* If sizeof(int) == sizeof(INTEGER), then there's no
|
|
|
|
translation necessary -- let the underlying functions write
|
|
|
|
directly into the Fortran status */
|
2004-09-17 08:03:19 +04:00
|
|
|
|
A bunch of changes to support MPI_INTEGER*x, MPI_REAL*x,
MPI_COMPLEX*x, and some optional C datatypes in MPI reduction
operations. These types are not technically supported by the letter
of the MPI standard, but are implied by the spirit of it (and there
are definitely users that use them in real applications)
- Add checks in configure for back-end C types for MPI_INTEGER*x and
MPI_REAL*x
- Create C data structs for MPI_COMPLEX*x
- Fixed typo for MPI_INTEGER8 in mpi.h
- Updated configure macros to create MPI_FORTRAN_INTEGER* defines, as
opposed to MPI_FORTRAN_INT, which was causing [me] lots of confusion
(between C "*_INT" names and Fortran "*_INT" names). This caused
some trivial updates in ddt, ompi_info, and the MPI layer to match.
- Update ompi_info to show whether we have each MPI_INTEGER*x,
MPI_REAL*x, and MPI_COMPLEX*x
- Extended reduction operations for optional datatypes:
- "C integer" now includes long long int, long long, and unsigned
long long
- "Fortran integer" now includes MPI_INTEGER*x
- "Floating point" now includes MPI_REAL*x
- "Complex" now includes MPI_COMPLEX*x
This commit was SVN r5511.
2005-04-27 14:23:06 +04:00
|
|
|
#if OMPI_SIZEOF_FORTRAN_INTEGER == SIZEOF_INT
|
2005-03-26 21:49:16 +03:00
|
|
|
c_status = (MPI_Status *) status;
|
2004-09-17 08:03:19 +04:00
|
|
|
#else
|
2005-03-26 21:49:16 +03:00
|
|
|
c_status = &c_status2;
|
2004-09-17 08:03:19 +04:00
|
|
|
#endif
|
2005-03-26 21:49:16 +03:00
|
|
|
}
|
2004-09-17 08:03:19 +04:00
|
|
|
|
2005-03-26 21:49:16 +03:00
|
|
|
*ierr = OMPI_FINT_2_INT(MPI_File_read_shared(c_fh,
|
|
|
|
OMPI_ADDR(buf),
|
|
|
|
OMPI_FINT_2_INT(*count),
|
|
|
|
c_type,
|
|
|
|
c_status));
|
2004-09-17 08:03:19 +04:00
|
|
|
|
A bunch of changes to support MPI_INTEGER*x, MPI_REAL*x,
MPI_COMPLEX*x, and some optional C datatypes in MPI reduction
operations. These types are not technically supported by the letter
of the MPI standard, but are implied by the spirit of it (and there
are definitely users that use them in real applications)
- Add checks in configure for back-end C types for MPI_INTEGER*x and
MPI_REAL*x
- Create C data structs for MPI_COMPLEX*x
- Fixed typo for MPI_INTEGER8 in mpi.h
- Updated configure macros to create MPI_FORTRAN_INTEGER* defines, as
opposed to MPI_FORTRAN_INT, which was causing [me] lots of confusion
(between C "*_INT" names and Fortran "*_INT" names). This caused
some trivial updates in ddt, ompi_info, and the MPI layer to match.
- Update ompi_info to show whether we have each MPI_INTEGER*x,
MPI_REAL*x, and MPI_COMPLEX*x
- Extended reduction operations for optional datatypes:
- "C integer" now includes long long int, long long, and unsigned
long long
- "Fortran integer" now includes MPI_INTEGER*x
- "Floating point" now includes MPI_REAL*x
- "Complex" now includes MPI_COMPLEX*x
This commit was SVN r5511.
2005-04-27 14:23:06 +04:00
|
|
|
#if OMPI_SIZEOF_FORTRAN_INTEGER != SIZEOF_INT
|
2005-06-28 18:13:44 +04:00
|
|
|
if (MPI_SUCCESS == OMPI_FINT_2_INT(*ierr) &&
|
|
|
|
MPI_STATUS_IGNORE != c_status) {
|
2005-03-26 21:49:16 +03:00
|
|
|
MPI_Status_c2f(c_status, status);
|
|
|
|
}
|
2004-09-17 08:03:19 +04:00
|
|
|
#endif
|
2004-04-16 06:33:49 +04:00
|
|
|
}
|