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();
}

Reply via email to