On Thu, 9 Feb 2012, Mohammad Mirzadeh wrote:
So this actually means it somehow matches the local indices?
Hm - no local indices here.
What i mean by that is,
y[ iy[i] ] = x[ ix[i] ].
Sure - with global indices.
Is that why ix and iy should have the same size?
When you specify data movement - you specify both source and destination for each element that is to be moved. If you are moving n elements - you have n sources, and n destination values - hence ix[n], iy[n] Satish
Mohammad
On Thu, Feb 9, 2012 at 3:17 PM, Satish Balay <[email protected]> wrote:
On Thu, 9 Feb 2012, Mohammad Mirzadeh wrote:
Hi guys,
I'm just wondering if I understand how the VecScatter works. Considering (petsc 3.2-p6 manual page 53):
VecScatterCreate(Vec x,IS ix,Vec y,IS iy,VecScatter *ctx); VecScatterBegin(VecScatter ctx,Vec x,Vec y,INSERT VALUES,SCATTER FORWARD); VecScatterEnd(VecScatter ctx,Vec x,Vec y,INSERT VALUES,SCATTER FORWARD); VecScatterDestroy(VecScatter *ctx);
is the following statement correct?
VecScatter looks into "ix" and "iy" index sets and `matches' the global indecies between the two to copy data from vector "x" to vector "y". For example, if "ix" maps local index "1" to global index "10", VecScatter looks inside "iy" to find a local index that is mapped to global index "10" and sends the data accordingly to the correct processor.
nope - it means - if you have x[10],y[10]:
ix = {1,5,9} iy = {0,2,1}
Then you get: y[0] = x[1] y[2] = x[5] y[1] = x[9]
[all numbers above are global indices]
Satish
Thanks, Mohammad