Hi Satish, Thank you very much for the crystal clear explanation. Yan
On Thu, Feb 4, 2010 at 12:24 AM, Satish Balay <balay at mcs.anl.gov> wrote: > 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 > > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20100204/bf07236c/attachment.htm>