Gideon Simpson <[email protected]> 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.
signature.asc
Description: PGP signature
