Hello,

We are partitioning a two-dimensional Cartesian communicator into

two one-dimensional subgroups. In this situation we have found

that both one-dimensional communicators inherit the period

logical of the first dimension of the original two-dimensional

communicator when using Open MPI. Using MPICH each

one-dimensional communicator inherits the period corresponding to

the dimensions specified in REMAIN_DIMS, as expected. Could this

be a bug, or are we making a mistake? The relevant calls we make in a

Fortran code are

CALL MPI_CART_CREATE(MPI_COMM_WORLD, 2, (/ NDIMX, NDIMY /), (/ .True., .False. /), .TRUE.,

COMM_CART_2D, IERROR)

CALL MPI_CART_SUB(COMM_CART_2D, (/ .True., .False. /), COMM_CART_X, IERROR)

CALL MPI_CART_SUB(COMM_CART_2D, (/ .False., .True. /), COMM_CART_Y, IERROR)

Following these requests,

CALL MPI_CART_GET(COMM_CART_X, MAXDIM_X, DIMS_X, PERIODS_X, COORDS_X, IERROR)

CALL MPI_CART_GET(COMM_CART_Y, MAXDIM_Y, DIMS_Y, PERIODS_Y, COORDS_Y, IERROR)

will result in

PERIODS_X = T

PERIODS_Y = T

If, on the other hand we define the two-dimensional communicator

using PERIODS = (/ .False., .True. /), we find

PERIODS_X = F

PERIODS_Y = F

Your advice on the matter would be greatly appreciated.

Regards,

John.

We are partitioning a two-dimensional Cartesian communicator into

two one-dimensional subgroups. In this situation we have found

that both one-dimensional communicators inherit the period

logical of the first dimension of the original two-dimensional

communicator when using Open MPI. Using MPICH each

one-dimensional communicator inherits the period corresponding to

the dimensions specified in REMAIN_DIMS, as expected. Could this

be a bug, or are we making a mistake? The relevant calls we make in a

Fortran code are

CALL MPI_CART_CREATE(MPI_COMM_WORLD, 2, (/ NDIMX, NDIMY /), (/ .True., .False. /), .TRUE.,

COMM_CART_2D, IERROR)

CALL MPI_CART_SUB(COMM_CART_2D, (/ .True., .False. /), COMM_CART_X, IERROR)

CALL MPI_CART_SUB(COMM_CART_2D, (/ .False., .True. /), COMM_CART_Y, IERROR)

Following these requests,

CALL MPI_CART_GET(COMM_CART_X, MAXDIM_X, DIMS_X, PERIODS_X, COORDS_X, IERROR)

CALL MPI_CART_GET(COMM_CART_Y, MAXDIM_Y, DIMS_Y, PERIODS_Y, COORDS_Y, IERROR)

will result in

PERIODS_X = T

PERIODS_Y = T

If, on the other hand we define the two-dimensional communicator

using PERIODS = (/ .False., .True. /), we find

PERIODS_X = F

PERIODS_Y = F

Your advice on the matter would be greatly appreciated.

Regards,

John.