> You can set PETSC_COMM_WORLD before PetscInitialize, but its value is > not valid/useful before PetscInitialize.
I have added text to the manual page for PETSC_COMM_WORLD to make this clear. > On Dec 19, 2014, at 11:30 AM, Jed Brown <[email protected]> wrote: > > 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
