:orphan: # PetscCommDuplicate Duplicates the communicator only if it is not already a PETSc communicator. ## Synopsis ``` #include "petscsys.h" PetscErrorCode PetscCommDuplicate(MPI_Comm comm_in, MPI_Comm *comm_out, PetscMPIInt *first_tag) ``` Collective ## Input Parameter - ***comm_in -*** Input communicator ## Output Parameters - ***comm_out -*** Output communicator. May be `comm_in`. - ***first_tag -*** Tag available that has not already been used with this communicator (you may pass in `NULL` if you do not need a tag) ## Note PETSc communicators are just regular MPI communicators that keep track of which tags have been used to prevent tag conflict. If you pass a non-PETSc communicator into a PETSc creation routine it will attach a private communicator for use in the objects communications. The internal `MPI_Comm` is used to perform all the MPI calls for PETSc, the outer `MPI_Comm` is a user level `MPI_Comm` that may be performing communication for the user or other library and so IS NOT used by PETSc. ## See Also `PetscObjectGetNewTag()`, `PetscCommGetNewTag()`, `PetscCommDestroy()` ## Level developer ## Location src/sys/objects/tagm.c ## Examples src/ksp/ksp/tutorials/ex73.c
--- [Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/sys/objects/tagm.c) [Index of all Sys routines](index.md) [Table of Contents for all manual pages](/manualpages/index.md) [Index of all manual pages](/manualpages/singleindex.md)