[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