xref: /petsc/src/sys/utils/pbarrier.c (revision 6d8694c4fbab79f9439f1ad13c0386ba7ee1ca4b)
1af0996ceSBarry Smith #include <petsc/private/petscimpl.h> /*I "petscsys.h" I*/
2e5c89e4eSSatish Balay 
3e5c89e4eSSatish Balay /* Logging support */
495c0884eSLisandro Dalcin PetscLogEvent PETSC_Barrier;
5e5c89e4eSSatish Balay 
6ffeef943SBarry Smith /*@
7667f096bSBarry Smith   PetscBarrier - Blocks until this routine is executed by all processors owning the object `obj`.
8e5c89e4eSSatish Balay 
92fe279fdSBarry Smith   Input Parameter:
10811af0c4SBarry Smith . obj - PETSc object  (`Mat`, `Vec`, `IS`, `SNES` etc...)
11e5c89e4eSSatish Balay 
12e5c89e4eSSatish Balay   Level: intermediate
13e5c89e4eSSatish Balay 
14*ce78bad3SBarry Smith   Fortran Note:
1510450e9eSJacob Faibussowitsch   You may pass `PETSC_NULL_VEC` or any other PETSc null object, such as `PETSC_NULL_MAT`, to
1610450e9eSJacob Faibussowitsch   indicate the barrier should be across `PETSC_COMM_WORLD`. You can also pass in any PETSc
1710450e9eSJacob Faibussowitsch   object, `Vec`, `Mat`, etc.
18e5c89e4eSSatish Balay 
19*ce78bad3SBarry Smith   Note:
20*ce78bad3SBarry Smith   The object must be cast with a (`PetscObject`). `NULL` can be used to indicate the barrier
21*ce78bad3SBarry Smith   should be across `PETSC_COMM_WORLD`.
22*ce78bad3SBarry Smith 
23*ce78bad3SBarry Smith   Developer Note:
24*ce78bad3SBarry Smith   This routine calls `MPI_Barrier()` with the communicator of the `PetscObject`
25*ce78bad3SBarry Smith 
26*ce78bad3SBarry Smith .seealso: `PetscObject`, `MPI_Comm`, `MPI_Barrier`
27e5c89e4eSSatish Balay @*/
PetscBarrier(PetscObject obj)28d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscBarrier(PetscObject obj)
29d71ae5a4SJacob Faibussowitsch {
3010450e9eSJacob Faibussowitsch   MPI_Comm comm = PETSC_COMM_WORLD;
31e5c89e4eSSatish Balay 
32e5c89e4eSSatish Balay   PetscFunctionBegin;
3310450e9eSJacob Faibussowitsch   if (obj) {
3410450e9eSJacob Faibussowitsch     PetscValidHeader(obj, 1);
3510450e9eSJacob Faibussowitsch     PetscCall(PetscObjectGetComm(obj, &comm));
3610450e9eSJacob Faibussowitsch   }
379566063dSJacob Faibussowitsch   PetscCall(PetscLogEventBegin(PETSC_Barrier, obj, 0, 0, 0));
389566063dSJacob Faibussowitsch   PetscCallMPI(MPI_Barrier(comm));
399566063dSJacob Faibussowitsch   PetscCall(PetscLogEventEnd(PETSC_Barrier, obj, 0, 0, 0));
403ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
41e5c89e4eSSatish Balay }
42