/*D
   MPI_Comm_set_attr - Stores attribute value associated with a key

Synopsis:
.vb
int MPI_Comm_set_attr(MPI_Comm comm, int comm_keyval, void *attribute_val)
.ve

Input Parameters:
+ comm - communicator to which attribute will be attached (handle)
. comm_keyval - key value (integer)
- attribute_val - attribute value (None)

Notes:
Values of the permanent attributes 'MPI_TAG_UB', 'MPI_HOST', 'MPI_IO',
'MPI_WTIME_IS_GLOBAL', 'MPI_UNIVERSE_SIZE', 'MPI_LASTUSEDCODE', and
'MPI_APPNUM' may not be changed.

The type of the attribute value depends on whether C, C++, or Fortran
is being used.
In C and C++, an attribute value is a pointer ('void *'); in Fortran, it is an
address-sized integer.

If an attribute is already present, the delete function (specified when the
corresponding keyval was created) will be called.

.N ThreadSafe

.N Fortran

.N Errors
.N MPI_SUCCESS
.N MPI_ERR_COMM
.N MPI_ERR_KEYVAL
.N MPI_ERR_OTHER

.seealso: MPI_Comm_create_keyval, MPI_Comm_delete_attr
D*/

/*D
   MPI_Attr_put - Stores attribute value associated with a key

Synopsis:
.vb
int MPI_Attr_put(MPI_Comm comm, int keyval, void *attribute_val)
.ve

Input Parameters:
+ comm - communicator to which attribute will be attached (handle)
. keyval - key value, as returned by MPI_KEYVAL_CREATE (integer)
- attribute_val - attribute value (None)

.N Deprecated
   The replacement for this routine is 'MPI_Comm_set_attr'.

.N ThreadSafe

.N Fortran

.N Errors
.N MPI_SUCCESS
.N MPI_ERR_COMM
.N MPI_ERR_KEYVAL
.N MPI_ERR_OTHER

.seealso: MPI_Attr_get, MPI_Keyval_create, MPI_Attr_delete, MPI_Comm_set_attr
D*/

