VecScatterCreate

Creates a vector scatter context.

Synopsis

#include "petscvec.h" 
PetscErrorCode  VecScatterCreate(Vec xin,IS ix,Vec yin,IS iy,VecScatter *newctx)
Collective on Vec

Input Parameters

xin - a vector that defines the shape (parallel data layout of the vector) of vectors from which we scatter
yin - a vector that defines the shape (parallel data layout of the vector) of vectors to which we scatter
ix - the indices of xin to scatter (if PETSC_NULL scatters all values)
iy - the indices of yin to hold results (if PETSC_NULL fills entire vector yin)

Output Parameter

newctx -location to store the new scatter context

Options Database Keys

-vecscatter_merge - VecScatterBegin() handles all of the communication, VecScatterEnd() is a nop eliminates the chance for overlap of computation and communication
-vecscatter_ssend - Uses MPI_Ssend_init() instead of MPI_Send_init()
-vecscatter_sendfirst - Posts sends before receives
-vecscatter_rr - use ready receiver mode for MPI sends
-vecscatter_packtogether - Pack all messages before sending, receive all messages before unpacking ONLY implemented for BLOCK SIZE of 4 and 12! (others easily added)

C++ variants

VecScatter VecScatterCreate(Vec x,Vec y,IS is)->VecScatterCreate(x,PETSC_NULL,y,is,&s); return s;
  VecScatterCreate(Vec x,Vec y,IS is,VecScatter *s)->VecScatterCreate(x,PETSC_NULL,y,is,s)
VecScatter VecScatterCreate(Vec x,IS is,Vec y)->VecScatterCreate(x,is,y,PETSC_NULL,&s); return s;
  VecScatterCreate(Vec x,IS is,Vec y,VecScatter *s)->VecScatterCreate(x,is,y,PETSC_NULL,s)
VecScatter VecScatterCreate(Vec x,IS is1,Vec y,IS is2)->VecScatterCreate(x,is1,y,is2,&s); return s;

Notes

In calls to VecScatter() you can use different vectors than the xin and yin you used above; BUT they must have the same parallel data layout, for example, they could be obtained from VecDuplicate(). A VecScatter context CANNOT be used in two or more simultaneous scatters; that is you cannot call a second VecScatterBegin() with the same scatter context until the VecScatterEnd() has been called on the first VecScatterBegin(). In this case a separate VecScatter is needed for each concurrent scatter.

See Also

VecScatterDestroy(), VecScatterCreateToAll(), VecScatterCreateToZero()

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/dm/ao/examples/tutorials/ex2.c.html
src/dm/da/examples/tutorials/ex6.c.html
src/dm/da/examples/tutorials/ex6f90.F.html