1af0996ceSBarry Smith #include <petsc/private/petscimpl.h> /*I "petscsys.h" I*/ 2e5c89e4eSSatish Balay 3e5c89e4eSSatish Balay /* Logging support */ 495c0884eSLisandro Dalcin PetscLogEvent PETSC_Barrier; 5e5c89e4eSSatish Balay 6*ffeef943SBarry 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 1410450e9eSJacob Faibussowitsch Notes: 1510450e9eSJacob Faibussowitsch The object must be cast with a (`PetscObject`). `NULL` can be used to indicate the barrier 1610450e9eSJacob Faibussowitsch should be across `PETSC_COMM_WORLD`. 1710450e9eSJacob Faibussowitsch 18aec76313SJacob Faibussowitsch Developer Notes: 19811af0c4SBarry Smith This routine calls `MPI_Barrier()` with the communicator of the `PetscObject` 2010e053e3SBarry Smith 21aec76313SJacob Faibussowitsch Fortran Notes: 2210450e9eSJacob Faibussowitsch You may pass `PETSC_NULL_VEC` or any other PETSc null object, such as `PETSC_NULL_MAT`, to 2310450e9eSJacob Faibussowitsch indicate the barrier should be across `PETSC_COMM_WORLD`. You can also pass in any PETSc 2410450e9eSJacob Faibussowitsch object, `Vec`, `Mat`, etc. 25e5c89e4eSSatish Balay 2610450e9eSJacob Faibussowitsch .seealso: `PetscObject` 27e5c89e4eSSatish Balay @*/ 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