Dear Barry, <div>    Thanks for your reply. </div><div><br></div><div>best,</div><div>Alan</div><div>    <br><br><div class="gmail_quote">On Thu, Aug 18, 2011 at 5:49 PM, Barry Smith <span dir="ltr">&lt;<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div><div></div><div class="h5"><br>
On Aug 18, 2011, at 5:02 PM, Alan Wei wrote:<br>
<br>
&gt; Dear all,<br>
&gt;     I hope you&#39;re having a nice day.<br>
&gt;     I&#39;m trying to get the x, y-value of a coordinate created by DMDACreate2d. Lines I wrote down are:<br>
&gt;<br>
&gt;   DMDAGetCoordinateDA(da, &amp;cda);<br>
&gt;   DMDAGetGhostedCoordinates(da, &amp;gc);<br>
&gt;   DMDAVecGetArray(cda, gc, &amp;coors);<br>
&gt;<br>
&gt;   for (i = xs; i &lt; xs+xm; i++) {<br>
&gt;     for (j = ys; j &lt; ys+ym; j++) {<br>
&gt;       printf(&quot;%f  %f\n&quot;, coors[j][i].x, coors[j][i].y);<br>
&gt;     }<br>
&gt;   }<br>
&gt;<br>
&gt;   DMDAVecRestoreArray(cda, gc, &amp;coors);<br>
&gt;<br>
&gt; I wonder why I need to use &quot;DMDAVecRestoreArray(cda, gc, &amp;coors);&quot; I used it because the manual said I need. Actually, I tried to comment it out and there is no difference.<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Alan<br>
<br>
</div></div>   The practical reason is you might get memory bleeding if you don&#39;t.  The philosphical reason is that a call DMDAVecGetArray() or VecGetArray() or others is a request to access the internal data structure of an object, the object then gives you permission to access that data. the RestoreArray() is a statement by you that after this call you will NOT access that data directly (without another GetArray call). Imagine if you did<br>

<font color="#888888"><br>
    Barry<br>
<br>
<br>
<br>
<br>
</font></blockquote></div><br></div>