I don't fully understand your code and what it is trying to demonstrate, but VecGetArrayWrite is Logically Collective. Having
if(rank == 0) { PetscCall(VecGetArrayWrite(vec, &xx)); PetscCall(VecRestoreArrayWrite(vec, &xx)); } is not allowed. The reason is that VecRestoreArrayWrite() changes the PetscObjectState of the vector, and this state must be changed consistently across all MPI processes that share the vector. > On Dec 10, 2023, at 2:40 AM, Stephan Köhler > <stephan.koeh...@math.tu-freiberg.de> wrote: > > Dear PETSc/Tao team, > > there is a bug in the voector interface: In the function > VecNorm, see, eg. > https://petsc.org/release/src/vec/vec/interface/rvector.c.html#VecNorm line > 197 the check for consistency in line 214 is done on the wrong communicator. > The communicator should be PETSC_COMM_SELF. > Otherwise the program may hang when PetscCheck is executed. > > Please find a minimal example attached. > > > Kind regards, > Stephan Köhler > -- > Stephan Köhler > TU Bergakademie Freiberg > Institut für numerische Mathematik und Optimierung > > Akademiestraße 6 > 09599 Freiberg > Gebäudeteil Mittelbau, Zimmer 2.07 > > Telefon: +49 (0)3731 39-3188 (Büro) > <minimal_ex_vec_norm.cpp><OpenPGP_0xC9BF2C20DFE9F713.asc>