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>

Reply via email to