[petsc-users] accessing DMDA Vec ghost values
Dave May
dave.mayhem23 at gmail.com
Thu May 12 04:48:18 CDT 2016
On 12 May 2016 at 10:42, Sean Dettrick <sdettrick at trialphaenergy.com> wrote:
> Hi,
>
> When discussing DMDAVecGetArrayDOF etc in section 2.4.4, the PETSc 3.7
> manual says "The array is accessed using the usual global indexing on the
> entire grid, but the user may only refer to the local and ghost entries
> of this array as all other entries are undefined”.
>
> OK so far. But how to access the ghost entries?
>
> With a 2D DMDA, I can do this OK:
>
>
> PetscInt xs,xm,ys,ym;
>
> ierr=DMDAGetCorners(da,&xs,&ys,0,&xm,&ym,0);CHKERRQ(ierr);
>
> PetscScalar ***es;
>
> ierr=DMDAVecGetArrayDOF(da,Es,&es);CHKERRQ(ierr);
>
>
> for (int j=ys; j < ys+ym; j++) {
>
> for (int i=xs; i < xs+xm;i++) {
>
> es[j][i][0]=1.;
>
> es[j][i][1]=1.;
>
> }
>
> }
>
> ierr=DMDAVecRestoreArrayDOF(da,Es,&es);CHKERRQ(ierr);
>
> But if I replace DMDAGetCorners with DMDAGetGhostCorners, then the code
> crashes with a seg fault, presumably due to out of bounds memory access.
>
> Is that supposed to happen?
>
If you created the vector Es using
the function DM{Get,Create}GlobalVector(), then the answer is yes.
> What’s the remedy?
>
If you want to access the ghost entries, you need to create the vector
using the function DM{Get,Create}LocalVector().
Thanks,
Dave
>
> Thanks very much!
>
> Sean Dettrick
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20160512/d78b6bb3/attachment.html>
More information about the petsc-users
mailing list