[petsc-users] VecGhostRestoreLocalForm

Zhang, Junchao jczhang at mcs.anl.gov
Sat Jul 20 08:45:46 CDT 2019




On Sat, Jul 20, 2019 at 5:47 AM José Lorenzo via petsc-users <petsc-users at mcs.anl.gov<mailto:petsc-users at mcs.anl.gov>> wrote:
Hello,

I am not sure I understand the function VecGhostRestoreLocalForm. If I proceed as stated in the manual,


    VecGhostUpdateBegin<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecGhostUpdateBegin.html#VecGhostUpdateBegin>(x,INSERT_VALUES<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/INSERT_VALUES.html#INSERT_VALUES>,SCATTER_FORWARD<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/SCATTER_FORWARD.html#SCATTER_FORWARD>);


    VecGhostUpdateEnd<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecGhostUpdateEnd.html#VecGhostUpdateEnd>(x,INSERT_VALUES<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/INSERT_VALUES.html#INSERT_VALUES>,SCATTER_FORWARD<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/SCATTER_FORWARD.html#SCATTER_FORWARD>);


    VecGhostGetLocalForm<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecGhostGetLocalForm.html#VecGhostGetLocalForm>(x,&xlocal);


    VecGetArray<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecGetArray.html#VecGetArray>(xlocal,&xvalues);


       // access the non-ghost values in locations xvalues[0:n-1] and ghost values in locations xvalues[n:n+nghost];


    VecRestoreArray<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecRestoreArray.html#VecRestoreArray>(xlocal,&xvalues);


    VecGhostRestoreLocalForm<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecGhostRestoreLocalForm.html#VecGhostRestoreLocalForm>(x,&xlocal)


Does VecRestoreArray update the values in the local vector xlocal, and then VecGhostRestoreLocalForm update the values of the global vector x?

Yes, you can think  VecRestoreArray finalizes the updates to xlocal. VecGhostRestoreLocalForm does not update global vector. It is for bookkeeping purposes.
x and xlocal share the same memory that contains the actual vector data. If you changed ghost points through xvalues[], to get the global vector x updated, you have to call  VecGhostUpdateBegin/End after above code, for example, to ADD two ghosts.


Does one need to call these two functions?

Yes.  In PETSc, *Get and *Restore have to be paired.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20190720/c6f8c451/attachment.html>


More information about the petsc-users mailing list