Actual source code: pbarrier.c
1: #include <petsc/private/petscimpl.h>
3: /* Logging support */
4: PetscLogEvent PETSC_Barrier;
6: /*@C
7: PetscBarrier - Blocks until this routine is executed by all processors owning the object `obj`.
9: Input Parameter:
10: . obj - PETSc object (`Mat`, `Vec`, `IS`, `SNES` etc...)
12: Level: intermediate
14: Notes:
15: The object must be cast with a (`PetscObject`). `NULL` can be used to indicate the barrier
16: should be across `PETSC_COMM_WORLD`.
18: Developer Notes:
19: This routine calls `MPI_Barrier()` with the communicator of the `PetscObject`
21: Fortran Notes:
22: You may pass `PETSC_NULL_VEC` or any other PETSc null object, such as `PETSC_NULL_MAT`, to
23: indicate the barrier should be across `PETSC_COMM_WORLD`. You can also pass in any PETSc
24: object, `Vec`, `Mat`, etc.
26: .seealso: `PetscObject`
27: @*/
28: PetscErrorCode PetscBarrier(PetscObject obj)
29: {
30: MPI_Comm comm = PETSC_COMM_WORLD;
32: PetscFunctionBegin;
33: if (obj) {
35: PetscCall(PetscObjectGetComm(obj, &comm));
36: }
37: PetscCall(PetscLogEventBegin(PETSC_Barrier, obj, 0, 0, 0));
38: PetscCallMPI(MPI_Barrier(comm));
39: PetscCall(PetscLogEventEnd(PETSC_Barrier, obj, 0, 0, 0));
40: PetscFunctionReturn(PETSC_SUCCESS);
41: }