[petsc-users] ghost points, DMs, and vector operations
Jed Brown
jed at jedbrown.org
Fri Feb 24 23:30:01 CST 2017
Gideon Simpson <gideon.simpson at gmail.com> writes:
> I’ve got a simple problem where I use a DM to handle a representation of a vector complex numbers, storing the real and imaginary components at each lattice point. I also have ghost points at either end, i.e.:
>
> DMDACreate1d (PETSC_COMM_WORLD, DM_BOUNDARY_GHOSTED, N, 2 , 1 , NULL, &dm ) ;
>
> I have a few related questions:
>
> 1. Is there a quick way to zero out the ghost points, other than to do
>
> DMGetLocalVector(dm,&local);
> DMGlobalToLocalBegin(dm,global,INSERT_VALUES,local);
> DMGlobalToLocalEnd(dm,global,INSERT_VALUES,local);
> DMDAVecGetArray(dm, local, &array);
> DMDAGetLocalInfo(dm, &info);
> if(info.xs == 0){
> array[-1].u =0.0;
> array[-1].v =0.0;
> }
> if(info.xs + info.xm == info.mx){
> array[info.mx].u =0.0;
> array[info.mx].v =0.0;
> }
> /* call restores after */
You can do it this way to make the loop independent of the number of
ghost points, though you likely have to do something different if you
have a different number of ghosts. I.e., the simplification only works
for toy problems; for anything real you need to write the loops.
for (i=info.gxs; i<0; i++) array[i] = 0;
for (i=info.mx; i<info.gxs+info.gxm; i++) array[i] = 0;
You can also just VecZeroEntries(local) before the global-to-local.
> My point is, I don’t really need to interfere with any of the entries, just the values in those two ghost points.
>
> 2. If I take a dot product of two such vectors (associated with the dm, as arrays of complex numbers in terms of real and imaginary parts), does the dot product operate on the ghost points too, or just the “real” values?
Local vectors are strictly local, and inner products of local vectors
rarely makes sense. You probably want a global vector
(DMCreateGlobalVector), in which case the dot product is ... global.
> 3. If I apply a VecCopy, VecAXPY, or any similar operation to such vectors, do they also operate on the ghost points?
"ghost points" aren't special in any way. Local vectors are serial
vectors that contain ghost points. Global vectors are parallel vectors
that don't have ghost points.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20170224/cbea6cb2/attachment.pgp>
More information about the petsc-users
mailing list