[petsc-users] A Question about Vec
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
[petsc-users] A Question about Vec
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. Vec a = b; 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? 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. Thanks you very much, Yan -- next part -- An HTML attachment was scrubbed... URL: http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20100203/93931dcd/attachment.htm
[petsc-users] A Question about Vec
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