Florian Lindner <[email protected]> writes:

> Hello,
>
> I have a piece of code that looks like that:
>
>   // PETSC_COMM_WORLD = MPI_COMM_WORLD;
>   PetscBool petscIsInitialized;
>   PetscInitialized(&petscIsInitialized);
>     
>   if (not petscIsInitialized) {
>     PetscErrorCode ierr;
>
>     std::cout << "PETSC == WORLD: " << (PETSC_COMM_WORLD == MPI_COMM_WORLD) 
> << std::endl;
>     std::cout << "PETSC_COMM_WORLD: " << PETSC_COMM_WORLD << std::endl;
>     std::cout << "Petsc before PetscInitializeNoArguments()"  << std::endl;
>     ierr = PetscInitializeNoArguments(); CHKERRV(ierr);
>     std::cout << "Petsc after PetscInitializeNoArguments()"  << std::endl;
>   }
>
> PETSC_COMM_WORLD is touched nowhere else in our source, I promise, having 
> grepped through right now.
>
> The code runs fine like that, but when I uncomment the first line it does not 
> anymore.
>
> As far as I know PETSC_COMM_WORLD equals to MPI_COMM_WORLD unless
> changed, 

src/sys/objects/pinit.c:

  /* user may set this BEFORE calling PetscInitialize() */
  MPI_Comm PETSC_COMM_WORLD = MPI_COMM_NULL;

(and later)

  if (PETSC_COMM_WORLD == MPI_COMM_NULL) PETSC_COMM_WORLD = MPI_COMM_WORLD;

You can set PETSC_COMM_WORLD before PetscInitialize, but its value is
not valid/useful before PetscInitialize.

> but when I run it prints
>
> PETSC == WORLD: 0
> PETSC_COMM_WORLD: 67108864
>
> The first line uncommented gives:
>
> PETSC == WORLD: 1
> PETSC_COMM_WORLD: 1140850688
>
> (and an error in my program: Attempting to use an MPI routine before 
> initializing MPICH)
>
> Just trying to understand what's going on...
>
> Thanks and have a nice weekend!
>
> Florian

Attachment: signature.asc
Description: PGP signature

Reply via email to