These are required defined constants, to be defined in the files mpi.h (for C) and mpif.h (for Fortran).
/* return codes (both C and Fortran) */ MPI_SUCCESS MPI_ERR_BUFFER MPI_ERR_COUNT MPI_ERR_TYPE MPI_ERR_TAG MPI_ERR_COMM MPI_ERR_RANK MPI_ERR_REQUEST MPI_ERR_ROOT MPI_ERR_GROUP MPI_ERR_OP MPI_ERR_TOPOLOGY MPI_ERR_DIMS MPI_ERR_ARG MPI_ERR_UNKNOWN MPI_ERR_TRUNCATE MPI_ERR_OTHER MPI_ERR_INTERN MPI_PENDING MPI_ERR_IN_STATUS MPI_ERR_LASTCODEThe following are defined C type definitions, also included in the file mpi.h./* assorted constants (both C and Fortran) */ MPI_BOTTOM MPI_PROC_NULL MPI_ANY_SOURCE MPI_ANY_TAG MPI_UNDEFINED MPI_BSEND_OVERHEAD MPI_KEYVAL_INVALID
/* status size and reserved index values (Fortran) */ MPI_STATUS_SIZE MPI_SOURCE MPI_TAG MPI_ERROR
/* Error-handling specifiers (C and Fortran) */ MPI_ERRORS_ARE_FATAL MPI_ERRORS_RETURN
/* Maximum sizes for strings */ MPI_MAX_PROCESSOR_NAME MPI_MAX_ERROR_STRING
/* elementary datatypes (C) */ MPI_CHAR MPI_SHORT MPI_INT MPI_LONG MPI_UNSIGNED_CHAR MPI_UNSIGNED_SHORT MPI_UNSIGNED MPI_UNSIGNED_LONG MPI_FLOAT MPI_DOUBLE MPI_LONG_DOUBLE MPI_BYTE MPI_PACKED
/* elementary datatypes (Fortran) */ MPI_INTEGER MPI_REAL MPI_DOUBLE_PRECISION MPI_COMPLEX MPI_DOUBLE_COMPLEX MPI_LOGICAL MPI_CHARACTER MPI_BYTE MPI_PACKED
/* datatypes for reduction functions (C) */ MPI_FLOAT_INT MPI_DOUBLE_INT MPI_LONG_INT MPI_2INT MPI_SHORT_INT MPI_LONG_DOUBLE_INT
/* datatypes for reduction functions (Fortran) */ MPI_2REAL MPI_2DOUBLE_PRECISION MPI_2INTEGER
/* optional datatypes (Fortran) */ MPI_INTEGER1 MPI_INTEGER2 MPI_INTEGER4 MPI_REAL2 MPI_REAL4 MPI_REAL8
/* optional datatypes (C) */ MPI_LONG_LONG_INT
/* special datatypes for constructing derived datatypes MPI_UB MPI_LB
/* reserved communicators (C and Fortran) */ MPI_COMM_WORLD MPI_COMM_SELF
/* results of communicator and group comparisons */
MPI_IDENT MPI_CONGRUENT MPI_SIMILAR MPI_UNEQUAL
/* environmental inquiry keys (C and Fortran) */ MPI_TAG_UB MPI_IO MPI_HOST MPI_WTIME_IS_GLOBAL
/* collective operations (C and Fortran) */ MPI_MAX MPI_MIN MPI_SUM MPI_PROD MPI_MAXLOC MPI_MINLOC MPI_BAND MPI_BOR MPI_BXOR MPI_LAND MPI_LOR MPI_LXOR
/* Null handles */ MPI_GROUP_NULL MPI_COMM_NULL MPI_DATATYPE_NULL MPI_REQUEST_NULL MPI_OP_NULL MPI_ERRHANDLER_NULL
/* Empty group */ MPI_GROUP_EMPTY
/* topologies (C and Fortran) */ MPI_GRAPH MPI_CART
/* opaque types (C) */ MPI_Aint MPI_StatusFor Fortran, here are examples of how each of the user-defined functions should be declared./* handles to assorted structures (C) */ MPI_Group MPI_Comm MPI_Datatype MPI_Request MPI_Op
/* prototypes for user-defined functions (C) */ typedef int MPI_Copy_function(MPI_Comm oldcomm, int keyval, void *extra_state, void *attribute_val_in, void *attribute_val_out, int *flag); typedef int MPI_Delete_function(MPI_Comm comm, int keyval, void *attribute_val, void *extra_state) typedef void MPI_Handler_function(MPI_Comm *, int *, ...); typedef void MPI_User_function( void *invec, void *inoutvec, int *len, MPI_Datatype *datatype);
The user-function argument to MPI_OP_CREATE should be declared
like this:
FUNCTION USER_FUNCTION( INVEC(*), INOUTVEC(*), LEN, TYPE) <type> INVEC(LEN), INOUTVEC(LEN) INTEGER LEN, TYPEThe copy-function argument to MPI_KEYVAL_CREATE should be declared like this:
PROCEDURE COPY_FUNCTION(OLDCOMM, KEYVAL, EXTRA_STATE, ATTRIBUTE_VAL_IN, ATTRIBUTE_VAL_OUT, FLAG, IERR) INTEGER OLDCOMM, KEYVAL, EXTRA_STATE, ATTRIBUTE_VAL_IN, ATTRIBUTE_VAL_OUT, IERR LOGICAL FLAGThe delete-function argument to MPI_KEYVAL_CREATE should be declared like this:
PROCEDURE DELETE_FUNCTION(COMM, KEYVAL, ATTRIBUTE_VAL, EXTRA_STATE, IERR) INTEGER COMM, KEYVAL, ATTRIBUTE_VAL, EXTRA_STATE, IERR