[petsc-users] VecScatter Question

Satish Balay balay at mcs.anl.gov
Thu Feb 9 17:42:58 CST 2012


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 <balay at mcs.anl.gov> 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
> > >
> >
> >
> 



More information about the petsc-users mailing list