Author: balaji Date: 2012-11-29 10:19:33 -0600 (Thu, 29 Nov 2012) New Revision: 10686 Modified: mpich2/trunk/src/mpi/comm/comm_split_type.c mpich2/trunk/src/mpid/ch3/src/mpid_init.c Log: Added support for MPI_UNDEFINED in MPI_Comm_split_type. Fixes tt#1753. Reviewed by goodell. Modified: mpich2/trunk/src/mpi/comm/comm_split_type.c =================================================================== --- mpich2/trunk/src/mpi/comm/comm_split_type.c 2012-11-28 19:56:15 UTC (rev 10685) +++ mpich2/trunk/src/mpi/comm/comm_split_type.c 2012-11-29 16:19:33 UTC (rev 10686) @@ -34,11 +34,16 @@ { int mpi_errno = MPI_SUCCESS; - MPIU_Assert(split_type == MPI_COMM_TYPE_SHARED); + /* Only MPI_COMM_TYPE_SHARED and MPI_UNDEFINED are supported */ + MPIU_Assert(split_type == MPI_COMM_TYPE_SHARED || split_type == MPI_UNDEFINED); if (MPID_Comm_fns == NULL || MPID_Comm_fns->split_type == NULL) { - /* Default implementation is to just return MPI_COMM_SELF */ - mpi_errno = MPIR_Comm_split_impl(comm_ptr, comm_ptr->rank, key, newcomm_ptr); + int color = (split_type == MPI_COMM_TYPE_SHARED) ? comm_ptr->rank : MPI_UNDEFINED; + + /* The default implementation is to either pass MPI_UNDEFINED + * or the local rank as the color (in which case a dup of + * MPI_COMM_SELF is returned) */ + mpi_errno = MPIR_Comm_split_impl(comm_ptr, color, key, newcomm_ptr); } else { mpi_errno = Modified: mpich2/trunk/src/mpid/ch3/src/mpid_init.c =================================================================== --- mpich2/trunk/src/mpid/ch3/src/mpid_init.c 2012-11-28 19:56:15 UTC (rev 10685) +++ mpich2/trunk/src/mpid/ch3/src/mpid_init.c 2012-11-29 16:19:33 UTC (rev 10686) @@ -55,7 +55,7 @@ mpi_errno = MPID_Get_node_id(comm_ptr, comm_ptr->rank, &id); if (mpi_errno) MPIU_ERR_POP(mpi_errno); - nid = id; + nid = (stype == MPI_COMM_TYPE_SHARED) ? id : MPI_UNDEFINED; mpi_errno = MPIR_Comm_split_impl(comm_ptr, nid, key, newcomm_ptr); if (mpi_errno) MPIU_ERR_POP(mpi_errno);