Hi Satish,<br>Thank you very much for the crystal clear explanation.<br><br>Yan<br><br><br><div class="gmail_quote">On Thu, Feb 4, 2010 at 12:24 AM, Satish Balay <span dir="ltr">&lt;<a href="mailto:balay@mcs.anl.gov">balay@mcs.anl.gov</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im">On Wed, 3 Feb 2010, Ryan Yan wrote:<br>
<br>
&gt; Hi all,<br>
&gt; Can someone help me to understand the &quot;Vec&quot;?<br>
&gt;<br>
&gt; My question is: in the following piece of code, will &quot;a&quot; be changed, if &quot;b&quot;<br>
&gt; is changed by the subroutine &quot;SNESComputeFunction&quot;? I did see that both a<br>
&gt; and b are both pointers to an object.<br>
<br>
</div>Yes - all petsc datatypes [Vec,Mat etc..] are pointers to [opaque] objects.<br>
<br>
&gt;<br>
&gt; Vec a = b;<br>
<br>
So you can make copy of this pointer - and use it aswell.<br>
<div class="im"><br>
&gt; Vec c;<br>
&gt;<br>
&gt; initalize c;<br>
&gt; SNESComputeFunction(snes, c, b);<br>
&gt;<br>
&gt; If the answer is yes, then I guess what is modified is actually &quot;*b&quot; in the<br>
&gt; above code, is that right?<br>
<br>
</div>yes - the object [refered by this pointer] is modified.<br>
<div class="im"><br>
&gt; BTW, I am wondering is there any explicit way that one can compare two<br>
&gt; variables in the instance above in PETSc , especially when the content of<br>
&gt; the object is rich.<br>
<br>
</div>In the above case - if you are carrying multiple copies of pointers<br>
arround - you just check the pointers. [ a == b]<br>
<br>
The alternative is having multiple objects.<br>
<br>
Vec a, b<br>
<br>
&lt;create a&gt;<br>
&lt;set values in a&gt;<br>
<br>
VecDuplicate(a,&amp;b)<br>
VecCopy(a,b)<br>
VecEqual(a,b,flag)<br>
<br>
Here &#39;a&#39;,&#39;b&#39; are different vecs - so if a is modified - it has no relation to values of &#39;b&#39;<br>
<font color="#888888"><br>
Satish<br>
<br>
</font></blockquote></div><br>