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
signature.asc
Description: PGP signature
