VecScatterBegin

Begins a generalized scatter from one vector to another. Complete the scattering phase with VecScatterEnd().

Synopsis

#include "petscvec.h" 
PetscErrorCode  VecScatterBegin(Vec x,Vec y,InsertMode addv,ScatterMode mode,VecScatter inctx)
Collective on VecScatter and Vec

Input Parameters

x - the vector from which we scatter
y - the vector to which we scatter
addv - either ADD_VALUES or INSERT_VALUES, with INSERT_VALUES mode any location not scattered to retains its old value; i.e. the vector is NOT first zeroed.
mode - the scattering mode, usually SCATTER_FORWARD. The available modes are: SCATTER_FORWARD or SCATTER_REVERSE
inctx - scatter context generated by VecScatterCreate()

Options Database

-vecscatter_rr - use ready receiver mode (i.e. receives are post BEFORE sends)
-vecscatter_ssend - use MPI_Ssend() instead of MPI_Send()
-vecscatter_packtogether - packs all the message before sending any and receivers all before sending. Default for the alltoall versions.
-vecscatter_sendfirst - post ALL sends before posting receives (cannot be used with -vecscatter_rr)
-vecscatter_alltoallv - use MPI_Alltoallv() instead of sends and receives
-vecscatter_alltoallw - use MPI_Alltoallw() instead of MPI_Alltoallv() for INSERT_VALUES

Notes

The vectors x and y need not be the same vectors used in the call to VecScatterCreate(), but x must have the same parallel data layout as that passed in as the x to VecScatterCreate(), similarly for the y. Most likely they have been obtained from VecDuplicate().

You cannot change the values in the input vector between the calls to VecScatterBegin() and VecScatterEnd().

If you use SCATTER_REVERSE the first two arguments should be reversed, from the SCATTER_FORWARD.

y[iy[i]] = x[ix[i]], for i=0,...,ni-1

This scatter is far more general than the conventional scatter, since it can be a gather or a scatter or a combination, depending on the indices ix and iy. If x is a parallel vector and y is sequential, VecScatterBegin() can serve to gather values to a single processor. Similarly, if y is parallel and x sequential, the routine can scatter from one processor to many processors.

See Also

VecScatterCreate(), VecScatterEnd()

Level:intermediate
Location:
src/vec/vec/utils/vscat.c
Index of all Vec routines
Table of Contents for all manual pages
Index of all manual pages

Examples

src/ksp/ksp/examples/tutorials/ex33.c.html
src/dm/ao/examples/tutorials/ex2.c.html
src/dm/da/examples/tutorials/ex2.c.html
src/dm/da/examples/tutorials/ex6.c.html
src/dm/da/examples/tutorials/ex6f90.F.html