Mark Adams <mfad...@lbl.gov> writes: > On Fri, Feb 9, 2018 at 9:39 PM, Jeff Hammond <jeff.scie...@gmail.com> wrote: > >> https://msdn.microsoft.com/en-us/library/dn473234(v=vs.85).aspx >> >> This function name is archaic and removed in MPI-3. Use the new name. >> >> > OK, Jed did this a few months ago. > > It still fails because my code uses PETSC_COMM_WORLD. I guess I need to > change that.
This runs cleanly with MPICH and Open MPI. Mark, PETSC_COMM_WORLD is _usually_ equivalent to MPI_COMM_WORLD. You should *never* use it in PETSc library code. It is not a "PETSc communicator" or "inner communicator" -- those terms refer to a dup'd communicator held by PETSc objects for PETSc's exclusive use.
#include <petsc/private/petscimpl.h> int main(int argc, char **args) { PetscErrorCode ierr; MPI_Comm newcomm; ierr = PetscInitialize(&argc, &args, NULL, NULL);CHKERRQ(ierr); ierr = PetscCommDuplicate(PETSC_COMM_WORLD, &newcomm, NULL);CHKERRQ(ierr); { // debug PetscCommCounter *counter; PetscMPIInt flg; ierr = MPI_Comm_get_attr(newcomm,Petsc_Counter_keyval,&counter,&flg);CHKERRQ(ierr); if (!flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_CORRUPT,"Bad MPI communicator supplied?"); } ierr = PetscCommDestroy(&newcomm);CHKERRQ(ierr); return PetscFinalize(); }