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
> <[email protected]> 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>