[petsc-users] A Question about Vec

2010-02-04 Thread Ryan Yan
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

2010-02-03 Thread Ryan Yan
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

2010-02-03 Thread Satish Balay
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