I don't understand what your session means. Let's try this patch diff --git a/src/sys/mpiuni/mpi.c b/src/sys/mpiuni/mpi.c index d559a513..c058265d 100644 --- a/src/sys/mpiuni/mpi.c +++ b/src/sys/mpiuni/mpi.c @@ -283,6 +283,7 @@ int MPI_Finalize(void) MPI_Comm_free(&comm); comm = MPI_COMM_SELF; MPI_Comm_free(&comm); + num_attr = 1; /* reset the counter */ MPI_was_finalized = 1; return MPI_SUCCESS; }
--Junchao Zhang On Sat, Jun 20, 2020 at 10:48 AM Sam Guo <[email protected]> wrote: > Typo: I mean “Assuming initializer is only needed once for entire session” > > On Saturday, June 20, 2020, Sam Guo <[email protected]> wrote: > >> Assuming finalizer is only needed once for entire session(?), I can put >> initializer into the static block to call it once but where do I call >> finalizer? >> >> >> On Saturday, June 20, 2020, Junchao Zhang <[email protected]> >> wrote: >> >>> The counter num_attr should be recycled. But first try to call PETSc >>> initialize/Finalize only once to see it fixes the error. >>> --Junchao Zhang >>> >>> >>> On Sat, Jun 20, 2020 at 12:48 AM Sam Guo <[email protected]> wrote: >>> >>>> To clarify, I call PETSc initialize and PETSc finalize everytime I call >>>> SLEPc: >>>> >>>> PetscInitializeNoPointers(argc,args,nullptr,nullptr); >>>> >>>> SlepcInitialize(&argc,&args,static_cast<char*>(nullptr),help); >>>> >>>> //calling slepc >>>> >>>> SlepcFinalize(); >>>> >>>> PetscFinalize(); >>>> >>>> >>>> >>>> On Fri, Jun 19, 2020 at 10:32 PM Sam Guo <[email protected]> wrote: >>>> >>>>> Dear PETSc team, >>>>> When I called SLEPc multiple time, I eventually got following >>>>> error: >>>>> >>>>> MPI operation not supported by PETSc's sequential MPI wrappers >>>>> [0]PETSC ERROR: #1 PetscInitialize() line 967 in >>>>> ../../../petsc/src/sys/objects/pinit.c >>>>> [0]PETSC ERROR: #2 SlepcInitialize() line 262 in >>>>> ../../../slepc/src/sys/slepcinit.c >>>>> [0]PETSC ERROR: #3 SlepcInitializeNoPointers() line 359 in >>>>> ../../../slepc/src/sys/slepcinit.c >>>>> PETSC ERROR: Logging has not been enabled. >>>>> You might have forgotten to call PetscInitialize(). >>>>> >>>>> I debugged: it is because of following in petsc/src/sys/mpiuni/mpi.c >>>>> >>>>> if (num_attr >= MAX_ATTR) >>>>> >>>>> in function int MPI_Comm_create_keyval(MPI_Copy_function >>>>> *copy_fn,MPI_Delete_function *delete_fn,int *keyval,void *extra_state) >>>>> >>>>> num_attr is declared static and keeps increasing every >>>>> time MPI_Comm_create_keyval is called. >>>>> >>>>> I am using petsc 3.11.3 but found 3.13.2 has the same logic. >>>>> >>>>> Is this a bug or I didn't use it correctly? >>>>> >>>>> Thanks, >>>>> Sam >>>>> >>>>
