2006-03-04 13:23:19 +00:00
|
|
|
/*
|
|
|
|
* 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.
|
2006-07-20 19:48:03 +00:00
|
|
|
* Copyright (c) 2006 Cisco Systems, Inc. All rights reserved.
|
2006-03-04 13:23:19 +00:00
|
|
|
* $COPYRIGHT$
|
|
|
|
*
|
|
|
|
* Additional copyrights may follow
|
|
|
|
*
|
|
|
|
* $HEADER$
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "ompi_config.h"
|
|
|
|
|
|
|
|
#include "ompi/mpi/f77/bindings.h"
|
|
|
|
#include "ompi/mpi/f77/constants.h"
|
|
|
|
|
2006-07-20 19:48:03 +00:00
|
|
|
/**
|
|
|
|
* This file contains two parts:
|
|
|
|
*
|
|
|
|
* 1. Various constants used in the Fortran bindings.
|
|
|
|
* 2. A special, internal OMPI function used for testing constant
|
|
|
|
* values (i.e., not an MPI API function)
|
|
|
|
*
|
|
|
|
* The constants in #1 are in this file because certain linkers (e.g.,
|
|
|
|
* OSX) need to have object files with functions in them or they won't
|
|
|
|
* pull in global variables from that file. Specifically, the
|
|
|
|
* constants in #1 used to be in a .c file by themselves (with no
|
|
|
|
* functions), which led to certain cases where the OSX linker
|
|
|
|
* wouldn't "see" them because there were no functions in the
|
|
|
|
* resulting .o file that would cause the constants to be pulled for
|
|
|
|
* run-time/link-time resolution.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Constants for the Fortran layer. These values are referred to via
|
|
|
|
common blocks in the Fortran equivalents. See
|
|
|
|
ompi/mpi/f77/constants.h for a more detailed explanation. */
|
|
|
|
|
|
|
|
#define INST(upper_case, lower_case, single_u, double_u) \
|
|
|
|
ompi_fortran_common_t lower_case = OMPI_FORTRAN_COMMON_INIT; \
|
|
|
|
ompi_fortran_common_t upper_case = OMPI_FORTRAN_COMMON_INIT; \
|
|
|
|
ompi_fortran_common_t single_u = OMPI_FORTRAN_COMMON_INIT; \
|
|
|
|
ompi_fortran_common_t double_u = OMPI_FORTRAN_COMMON_INIT
|
|
|
|
|
|
|
|
INST(MPI_FORTRAN_BOTTOM, mpi_fortran_bottom,
|
|
|
|
mpi_fortran_bottom_, mpi_fortran_bottom__);
|
|
|
|
INST(MPI_FORTRAN_IN_PLACE, mpi_fortran_in_place,
|
|
|
|
mpi_fortran_in_place_, mpi_fortran_in_place__);
|
|
|
|
INST(MPI_FORTRAN_ARGV_NULL, mpi_fortran_argv_null,
|
|
|
|
mpi_fortran_argv_null_, mpi_fortran_argv_null__);
|
|
|
|
INST(MPI_FORTRAN_ARGVS_NULL, mpi_fortran_argvs_null,
|
|
|
|
mpi_fortran_argvs_null_, mpi_fortran_argvs_null__);
|
|
|
|
INST(MPI_FORTRAN_ERRCODES_IGNORE, mpi_fortran_errcodes_ignore,
|
|
|
|
mpi_fortran_errcodes_ignore_, mpi_fortran_errcodes_ignore__);
|
|
|
|
INST(MPI_FORTRAN_STATUS_IGNORE, mpi_fortran_status_ignore,
|
|
|
|
mpi_fortran_status_ignore_, mpi_fortran_status_ignore__);
|
|
|
|
INST (MPI_FORTRAN_STATUSES_IGNORE, mpi_fortran_statuses_ignore,
|
|
|
|
mpi_fortran_statuses_ignore_, mpi_fortran_statuses_ignore__);
|
|
|
|
|
2006-03-04 13:23:19 +00:00
|
|
|
/* This is an internal test function for Open MPI; it does not have a
|
|
|
|
profiled equivalent. */
|
|
|
|
|
|
|
|
PN(void, ompi_test_fortran_constants, OMPI_TEST_FORTRAN_CONSTANTS, (char *bottom, char *in_place, char *argv, char *argvs, char *status, char *statuses, MPI_Fint *flag));
|
|
|
|
|
|
|
|
#if OMPI_HAVE_WEAK_SYMBOLS
|
|
|
|
#pragma weak OMPI_TEST_FORTRAN_CONSTANTS = ompi_test_fortran_constants_f
|
|
|
|
#pragma weak ompi_test_fortran_constants = ompi_test_fortran_constants_f
|
|
|
|
#pragma weak ompi_test_fortran_constants_ = ompi_test_fortran_constants_f
|
|
|
|
#pragma weak ompi_test_fortran_constants__ = ompi_test_fortran_constants_f
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if ! OMPI_HAVE_WEAK_SYMBOLS
|
|
|
|
OMPI_GENERATE_F77_BINDINGS (OMPI_TEST_FORTRAN_CONSTANTS,
|
|
|
|
ompi_test_fortran_constants,
|
|
|
|
ompi_test_fortran_constants_,
|
|
|
|
ompi_test_fortran_constants__,
|
|
|
|
ompi_test_fortran_constants_f,
|
2006-03-04 17:41:57 +00:00
|
|
|
(char *bottom, char *in_place, char *argv, char *argvs, char *status, char *statuses, MPI_Fint *flag),
|
2006-03-04 13:23:19 +00:00
|
|
|
(bottom, in_place, argv, argvs, status, statuses, flag) )
|
|
|
|
#endif
|
|
|
|
|
|
|
|
void ompi_test_fortran_constants_f(char *bottom, char *in_place,
|
|
|
|
char *argv, char *argvs,
|
|
|
|
char *status, char *statuses,
|
|
|
|
MPI_Fint *flag)
|
|
|
|
{
|
|
|
|
*flag = 1;
|
|
|
|
if (!OMPI_IS_FORTRAN_BOTTOM(bottom)) {
|
|
|
|
fprintf(stderr, "WARNING: Fortran MPI_BOTTOM not recognized properly\n");
|
|
|
|
*flag = 0;
|
|
|
|
}
|
|
|
|
if (!OMPI_IS_FORTRAN_IN_PLACE(in_place)) {
|
|
|
|
fprintf(stderr, "WARNING: Fortran MPI_IN_PLACE not recognized properly\n");
|
|
|
|
*flag = 0;
|
|
|
|
}
|
|
|
|
if (!OMPI_IS_FORTRAN_ARGV_NULL(argv)) {
|
|
|
|
fprintf(stderr, "WARNING: Fortran MPI_ARGV_NULL not recognized properly\n");
|
|
|
|
*flag = 0;
|
|
|
|
}
|
|
|
|
if (!OMPI_IS_FORTRAN_ARGVS_NULL(argvs)) {
|
|
|
|
fprintf(stderr, "WARNING: Fortran MPI_ARGVS_NULL not recognized properly\n");
|
|
|
|
*flag = 0;
|
|
|
|
}
|
|
|
|
if (!OMPI_IS_FORTRAN_STATUS_IGNORE(status)) {
|
|
|
|
fprintf(stderr, "WARNING: Fortran MPI_STATUS_IGNORE not recognized properly\n");
|
|
|
|
*flag = 0;
|
|
|
|
}
|
|
|
|
if (!OMPI_IS_FORTRAN_STATUSES_IGNORE(statuses)) {
|
|
|
|
fprintf(stderr, "WARNING: Fortran MPI_STATUSES not recognized properly\n");
|
|
|
|
*flag = 0;
|
|
|
|
}
|
|
|
|
}
|