MPI_CART_SUB(3)
π MPI_CART_SUB(3) β Open MPI, bestie edition π
okay so this is the MPI_Cart_sub page from the Open MPI manual, and honestly? it's a whole vibe. it partitions a communicator into subgroups, which form lower-dimensional Cartesian subgrids. that's the whole ~thing~. let's get into it β¨
β¨ SYNTAX β¨
πΈ C Syntax
#include <mpi.h>
int MPI_Cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *comm_new)
πΈ Fortran Syntax
USE MPI
! or the older form: INCLUDE 'mpif.h'
MPI_CART_SUB(COMM, REMAIN_DIMS, COMM_NEW, IERROR)
INTEGER COMM, COMM_NEW, IERROR
LOGICAL REMAIN_DIMS(*)
πΈ Fortran 2008 Syntax
USE mpi_f08
MPI_Cart_sub(comm, remain_dims, newcomm, ierror)
TYPE(MPI_Comm), INTENT(IN) :: comm
LOGICAL, INTENT(IN) :: remain_dims(*)
TYPE(MPI_Comm), INTENT(OUT) :: newcomm
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
π INPUT PARAMETERS π
commβ a communicator that's got that Cartesian structure going on (it's a handle, bestie).remain_dimsβ a logical vector, and here's the tea β: the *i*th entry ofremain_dimssays whether the *i*th dimension is kept in the subgrid (true) or dropped (false). that's it, that's the whole job π
π«Ά OUTPUT PARAMETERS π«Ά
comm_newβ the communicator holding the subgrid that includes the calling process (handle). yes bestie, your subgrid πierrorβ Fortran only: the error status (integer).
π¦ DESCRIPTION π¦
so like. if a Cartesian topology was already created with MPI_Cart_create, then MPI_Cart_sub is the function you call to partition the communicator group into subgroups that form lower-dimensional Cartesian subgrids π β and then to build, for each subgroup, a communicator with the associated subgrid Cartesian topology. it's lowkey closely related to MPI_Comm_split, iykyk.
Example: picture this β assume MPI_Cart_create( ..., comm) already defined a (2 x 3 x 4) grid. let remain_dims = (true, false, true). then a call to
MPI_Cart_sub(comm, remain_dims, comm_new);
will create three communicators, each with eight processes in a 2 x 4 Cartesian topology. iconic β¨
and if instead remain_dims = (false, false, true), then the call to MPI_Cart_sub(comm, remain_dims, comm_new) will create six nonoverlapping communicators, each with four processes, in a one-dimensional Cartesian topology. two completely different looks, same function. main character energy fr fr π
π ERRORS π
almost all MPI routines return an error value, okay? C routines hand it back as the return result of the function, and Fortran routines tuck it into the last argument. noted π
before that error value gets returned, the current MPI error handler associated with the communication object is called (think communicator, window, file β you know the drill). if no communication object is associated with the MPI call, then the call is considered attached to MPI_COMM_SELF and will call that associated MPI error handler. and when MPI_COMM_SELF is not initialized β that's before MPI_Init/MPI_Init_thread, after MPI_Finalize, or when using the Sessions Model exclusively β the error raises the initial error handler. π¨
you can change that initial error handler by calling MPI_Comm_set_errhandler on MPI_COMM_SELF when using the World model, or via the mpi_initial_errhandler CLI argument to mpiexec, or via info key to MPI_Comm_spawn/MPI_Comm_spawn_multiple. and if no other appropriate error handler has been set, then the MPI_ERRORS_RETURN error handler is called for MPI I/O functions, and the MPI_ERRORS_ABORT error handler is called for all other MPI functions.
Open MPI ships with three predefined error handlers you can use π
MPI_ERRORS_ARE_FATALβ causes the program to abort all connected MPI processes. like, everyone. gone. πMPI_ERRORS_ABORTβ an error handler that can be invoked on a communicator, window, file, or session. when called on a communicator, it acts as ifMPI_Abortwas called on that communicator. if called on a window or file, it acts as ifMPI_Abortwas called on a communicator containing the group of processes in the corresponding window or file. if called on a session, it aborts only the local process. nuance, bestie πMPI_ERRORS_RETURNβ returns an error code to the application. polite. respectful. π
MPI applications can also implement their own error handlers by calling:
MPI_Comm_create_errhandlerthenMPI_Comm_set_errhandlerMPI_File_create_errhandlerthenMPI_File_set_errhandlerMPI_Session_create_errhandlerthenMPI_Session_set_errhandleror atMPI_Session_initMPI_Win_create_errhandlerthenMPI_Win_set_errhandler
β οΈ note that MPI does not guarantee that an MPI program can continue past an error. like, no cap, don't count on it surviving π
see the MPI man page for a full list of MPI error codes, and the Error Handling section of the MPI-3.1 standard for more information. π§
π SEE ALSO:
MPI_Cart_create
π COPYRIGHT π
2003-2026, The Open MPI Community
and that's the page babes π it was authored by The Open MPI Community (copyright 2003-2026, slay), and this particular rendering is dated Sep 11, 2026 β go forth and subdivide those grids, you gorgeous Cartesian icon π¦β¨π
π¦ where this page comes from
- arch rolling: openmpi 5.0.11-1 Β· BSD-3-Clause AND LicenseRef-MPICH
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms