[petsc-users] A Question about Vec

Satish Balay balay at mcs.anl.gov
Wed Feb 3 23:24:11 CST 2010


On Wed, 3 Feb 2010, Ryan Yan wrote:

> Hi all,
> Can someone help me to understand the "Vec"?
> 
> My question is: in the following piece of code, will "a" be changed, if "b"
> is changed by the subroutine "SNESComputeFunction"? I did see that both a
> and b are both pointers to an object.

Yes - all petsc datatypes [Vec,Mat etc..] are pointers to [opaque] objects.

> 
> Vec a = b;

So you can make copy of this pointer - and use it aswell.

> Vec c;
> 
> initalize c;
> SNESComputeFunction(snes, c, b);
> 
> If the answer is yes, then I guess what is modified is actually "*b" in the
> above code, is that right?

yes - the object [refered by this pointer] is modified.

> BTW, I am wondering is there any explicit way that one can compare two
> variables in the instance above in PETSc , especially when the content of
> the object is rich.

In the above case - if you are carrying multiple copies of pointers
arround - you just check the pointers. [ a == b]

The alternative is having multiple objects.

Vec a, b

<create a>
<set values in a>

VecDuplicate(a,&b)
VecCopy(a,b)
VecEqual(a,b,flag)

Here 'a','b' are different vecs - so if a is modified - it has no relation to values of 'b'

Satish



More information about the petsc-users mailing list