On Wed, Feb 15, 2012 at 18:25, Sylvain Barbot <sylbar.vainbot@gmail.com> wrote:
Hi All,
I'm implementing an elasticity multi-grid solver with Petsc with
matrix shells. I am using the Red-Black Gauss-Siedel smoother. In the
middle of the Red-Black passes, I need to update the ghost points
between processors. To do that effectively, I'd like to update only
the ghost points between the different processors, instead of the
whole array. The goal is to do the most possible operations in place
in local array lx, and having to update global vector x only once. The
working matrix multiply smoothing operation is shown below. I'm using
Petsc 3.1. I read about
http://www.mcs.anl.gov/petsc/petsc-3.1/docs/manualpages/Vec/VecGhostUpdateBegin.html,
but I'm not entirely clear whether this does what I want or not.
VecGhost does not work with a DA (pretty obvious since the structured grid layout doesn't put those points near each other). Writing just the updated points into the local array will cost as much as updating the whole thing, so don't worry about it.
Your red-black Gauss-Seidel will have horrible cache performance anyway, so no need to sweat about the part that isn't the bottleneck.