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 8e5c89e4eSSatish Balay PetscBarrier - Blocks until this routine is executed by all 910e053e3SBarry Smith processors owning the object obj. 10e5c89e4eSSatish Balay 11e5c89e4eSSatish Balay Input Parameters: 1210e053e3SBarry Smith . obj - PETSc object (Mat, Vec, IS, SNES etc...) 1310e053e3SBarry Smith The object be caste with a (PetscObject). NULL can be used to indicate the barrier should be across MPI_COMM_WORLD 14e5c89e4eSSatish Balay 15e5c89e4eSSatish Balay Level: intermediate 16e5c89e4eSSatish Balay 17e5c89e4eSSatish Balay Notes: 1810e053e3SBarry Smith This routine calls MPI_Barrier with the communicator of the PETSc Object obj 1910e053e3SBarry Smith 2010e053e3SBarry Smith Fortran Usage: 2110e053e3SBarry Smith You may pass PETSC_NULL_VEC or any other PETSc null object, such as PETSC_NULL_MAT, to indicate the barrier should be 227e4e2a2dSBarry Smith across MPI_COMM_WORLD. You can also pass in any PETSc object, Vec, Mat, etc 23e5c89e4eSSatish Balay 24e5c89e4eSSatish Balay @*/ 25*9371c9d4SSatish Balay PetscErrorCode PetscBarrier(PetscObject obj) { 26e5c89e4eSSatish Balay MPI_Comm comm; 27e5c89e4eSSatish Balay 28e5c89e4eSSatish Balay PetscFunctionBegin; 29e5c89e4eSSatish Balay if (obj) PetscValidHeader(obj, 1); 309566063dSJacob Faibussowitsch PetscCall(PetscLogEventBegin(PETSC_Barrier, obj, 0, 0, 0)); 319566063dSJacob Faibussowitsch if (obj) PetscCall(PetscObjectGetComm(obj, &comm)); 325f80ce2aSJacob Faibussowitsch else comm = PETSC_COMM_WORLD; 339566063dSJacob Faibussowitsch PetscCallMPI(MPI_Barrier(comm)); 349566063dSJacob Faibussowitsch PetscCall(PetscLogEventEnd(PETSC_Barrier, obj, 0, 0, 0)); 35e5c89e4eSSatish Balay PetscFunctionReturn(0); 36e5c89e4eSSatish Balay } 37