#include "petscvec.h" PetscErrorCode VecScatterBegin(Vec x,Vec y,InsertMode addv,ScatterMode mode,VecScatter inctx)Collective on VecScatter and Vec
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 |
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.
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