typedef struct _n_PetscSubcomm* PetscSubcomm;
PetscSubcommChild() returns the associated subcommunicator on this process
PetscSubcommContiguousParent() returns a parent communitor but with all child of the same subcommunicator having contiguous rank
PETSC_SUBCOMM_GENERAL - similar to MPI_Comm_split() each process sets the new communicator (color) they will belong to and the order within that communicator
PETSC_SUBCOMM_CONTIGUOUS - each new communicator contains a set of process with contiguous ranks in the original MPI communicator
PETSC_SUBCOMM_INTERLACED - each new communictor contains a set of processes equally far apart in rank from the others in that new communicator
Example: Consider a communicator with six processes split into 3 subcommunicators.
PETSC_SUBCOMM_CONTIGUOUS - the first communicator contains rank 0,1 the second rank 2,3 and the third rank 4,5 in the original ordering of the original communicator
PETSC_SUBCOMM_INTERLACED - the first communicator contains rank 0,3, the second 1,4 and the third 2,5