xref: /petsc/src/sys/utils/pbarrier.c (revision 10450e9e44b354a0a3da7bbd573407bdf051df10)
1e5c89e4eSSatish Balay 
2af0996ceSBarry Smith #include <petsc/private/petscimpl.h> /*I "petscsys.h" I*/
3e5c89e4eSSatish Balay 
4e5c89e4eSSatish Balay /* Logging support */
595c0884eSLisandro Dalcin PetscLogEvent PETSC_Barrier;
6e5c89e4eSSatish Balay 
77e4e2a2dSBarry Smith /*@C
8667f096bSBarry Smith   PetscBarrier - Blocks until this routine is executed by all processors owning the object `obj`.
9e5c89e4eSSatish Balay 
102fe279fdSBarry Smith   Input Parameter:
11811af0c4SBarry Smith . obj - PETSc object  (`Mat`, `Vec`, `IS`, `SNES` etc...)
12e5c89e4eSSatish Balay 
13e5c89e4eSSatish Balay   Level: intermediate
14e5c89e4eSSatish Balay 
15*10450e9eSJacob Faibussowitsch   Notes:
16*10450e9eSJacob Faibussowitsch   The object must be cast with a (`PetscObject`). `NULL` can be used to indicate the barrier
17*10450e9eSJacob Faibussowitsch   should be across `PETSC_COMM_WORLD`.
18*10450e9eSJacob Faibussowitsch 
19aec76313SJacob Faibussowitsch   Developer Notes:
20811af0c4SBarry Smith   This routine calls `MPI_Barrier()` with the communicator of the `PetscObject`
2110e053e3SBarry Smith 
22aec76313SJacob Faibussowitsch   Fortran Notes:
23*10450e9eSJacob Faibussowitsch   You may pass `PETSC_NULL_VEC` or any other PETSc null object, such as `PETSC_NULL_MAT`, to
24*10450e9eSJacob Faibussowitsch   indicate the barrier should be across `PETSC_COMM_WORLD`. You can also pass in any PETSc
25*10450e9eSJacob Faibussowitsch   object, `Vec`, `Mat`, etc.
26e5c89e4eSSatish Balay 
27*10450e9eSJacob Faibussowitsch .seealso: `PetscObject`
28e5c89e4eSSatish Balay @*/
29d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscBarrier(PetscObject obj)
30d71ae5a4SJacob Faibussowitsch {
31*10450e9eSJacob Faibussowitsch   MPI_Comm comm = PETSC_COMM_WORLD;
32e5c89e4eSSatish Balay 
33e5c89e4eSSatish Balay   PetscFunctionBegin;
34*10450e9eSJacob Faibussowitsch   if (obj) {
35*10450e9eSJacob Faibussowitsch     PetscValidHeader(obj, 1);
36*10450e9eSJacob Faibussowitsch     PetscCall(PetscObjectGetComm(obj, &comm));
37*10450e9eSJacob Faibussowitsch   }
389566063dSJacob Faibussowitsch   PetscCall(PetscLogEventBegin(PETSC_Barrier, obj, 0, 0, 0));
399566063dSJacob Faibussowitsch   PetscCallMPI(MPI_Barrier(comm));
409566063dSJacob Faibussowitsch   PetscCall(PetscLogEventEnd(PETSC_Barrier, obj, 0, 0, 0));
413ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
42e5c89e4eSSatish Balay }
43