Hi Junchao, Thanks for the quick response. By "session" I mean the program. I tried your patch but it does not help. This is the serial. I guess finalizer may not be called?
Thanks, Sam On Sat, Jun 20, 2020 at 8:54 AM Junchao Zhang <[email protected]> wrote: > 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 >>>>>> >>>>>
