Thanks Barry,<div><br></div><div>^_^</div><div>Alan<br><br><div class="gmail_quote">On Fri, Aug 19, 2011 at 3:51 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 class="im"><br>
On Aug 19, 2011, at 2:55 PM, Alan Wei wrote:<br>
<br>
&gt; Dear Barry,<br>
</div><div class="im">&gt;     In ex19, the X is a kinda of global vec, while the x is a local vec. Since DAVecGetArray makes the x and X sharing the same actual vector data, the vec X is, actually, a global copy of the vec x, isnt it?<br>

<br>
</div>  Not really. If you pass a local (nonparallel) vector to the VecGetArray() the resulting array covers all the entries in the vector.  If you pass a global (parallel) vector then the resulting array only gives you access to the values that are on that one process.<br>

<font color="#888888"><br>
   Barry<br>
</font><div><div></div><div class="h5"><br>
&gt;<br>
&gt; best,<br>
&gt; Alan<br>
&gt;<br>
&gt; On Thu, Aug 18, 2011 at 10:12 PM, Barry Smith &lt;<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>&gt; wrote:<br>
&gt;<br>
&gt; On Aug 18, 2011, at 9:40 PM, Alan Wei wrote:<br>
&gt;<br>
&gt; &gt; Dear Barry,<br>
&gt; &gt;     That is really a great idea, and it is something that I want. I&#39;ve never noticed that the structure in C is so marvelous. However, I have a further question. In that example, a variable x is defined like Field **x, and DAVecGetArray(da,X,&amp;x). I wonder if there is any relationship between da, X and x after using DAVecGetArray. Or it just a prerequisite for using the nice notation of &#39;x&#39;.<br>

&gt;<br>
&gt;   The only real relationship is that x looks into the X data structure to allow you to access the data as if it were in simple arrays. In other words the x and X share the same actual vector data.<br>
&gt;<br>
&gt;    Barry<br>
&gt;<br>
&gt;<br>
&gt; &gt;<br>
&gt; &gt; thanks,<br>
&gt; &gt;<br>
&gt; &gt; Alan<br>
&gt; &gt;<br>
&gt; &gt; On Thu, Aug 18, 2011 at 9:09 PM, Barry Smith &lt;<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>&gt; wrote:<br>
&gt; &gt;<br>
&gt; &gt;  Alan,<br>
&gt; &gt;<br>
&gt; &gt;   I&#39;m not sure what you are getting at but we commonly use tricks like (see src/snes/examples/tutorials/ex19.c)<br>
&gt; &gt;<br>
&gt; &gt; typedef struct {<br>
&gt; &gt;  PetscScalar u,v,omega,temp;<br>
&gt; &gt; } Field;<br>
&gt; &gt;<br>
&gt; &gt;  Then in this case use a DMDAVecGetArray() to get f and x and then have nice notation like<br>
&gt; &gt;<br>
&gt; &gt;      f[j][i].u     = x[j][i].u;<br>
&gt; &gt;      f[j][i].v     = x[j][i].v;<br>
&gt; &gt;      f[j][i].omega = x[j][i].omega - (x[j][i+1].v - x[j][i].v)*dhx;<br>
&gt; &gt;      f[j][i].temp  = x[j][i].temp;<br>
&gt; &gt;<br>
&gt; &gt; note that this means the values are stored interlaced in the vector.<br>
&gt; &gt;<br>
&gt; &gt;   Barry<br>
&gt; &gt;<br>
&gt; &gt; On Aug 18, 2011, at 9:03 PM, Alan Wei wrote:<br>
&gt; &gt;<br>
&gt; &gt; &gt; Dear All,<br>
&gt; &gt; &gt;     I&#39;m trying to &#39;draw&#39; a 2-D cylinder in PETSc. It simply restore the x and y coordinate values in two arrays. I wonder if I can use Vec in PETSc to implement it (i.e. defining a vec circle) so that I can call its x or y coordinate by circle.x or circle.y. Is this possible? also, is this a better way than just defining it as two arrays, i.e. x[ ] and y[ ].<br>

&gt; &gt; &gt;<br>
&gt; &gt; &gt; thanks in advance,<br>
&gt; &gt; &gt; Alan<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br></div>