Skip to main content
`Ctrl`+`K`

# 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 and 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

Index of all Sys routines
Table of Contents for all manual pages
Index of all manual pages