PetscSubcommCreate

Create a PetscSubcomm context.

Synopsis

#include "petsc.h"    
#include "petscsys.h"    
PetscErrorCode PETSCMAT_DLLEXPORT PetscSubcommCreate(MPI_Comm comm,PetscInt nsubcomm,PetscSubcomm *psubcomm)
Collective on MPI_Comm

Input Parameter

comm - MPI communicator
nsubcomm - the number of subcommunicators to be created

Output Parameter

psubcomm -location to store the PetscSubcomm context

Notes

To avoid data scattering from subcomm back to original comm, we create subcommunicators by iteratively taking a process into a subcommunicator. Example: size=4, nsubcomm=(*psubcomm)->n=3

comm=(*psubcomm)->parent

rank: [0] [1] [2] [3] color: 0 1 2 0

subcomm=(*psubcomm)->comm

subrank: [0] [0] [0] [1]

dupcomm=(*psubcomm)->dupparent

duprank: [0] [2] [3] [1]

Here, subcomm[color = 0] has subsize=2, owns process [0] and [3] subcomm[color = 1] has subsize=1, owns process [1] subcomm[color = 2] has subsize=1, owns process [2] dupcomm has same number of processes as comm, and its duprank maps

processes in subcomm contiguously into a 1d array

duprank: [0] [1] [2] [3] rank: [0] [3] [1] [2] subcomm[0] subcomm[1] subcomm[2]

Keywords

communicator, create

See Also

PetscSubcommDestroy()

Level:advanced
Location:
src/sys/objects/subcomm.c
Index of all Sys routines
Table of Contents for all manual pages
Index of all manual pages