2011/12/2 Feng-Chao Wang <span dir="ltr">&lt;<a href="mailto:wolfshow@gmail.com">wolfshow@gmail.com</a>&gt;</span><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<u></u>





<div style="FONT-SIZE:10pt;MARGIN:10px;FONT-FAMILY:verdana">
<div><font face="Verdana" size="2">&gt;Date: Fri, 2 Dec 2011 08:07:54 -0600</font></div>
<div>
<div>&gt;From: Jed Brown &lt;<a href="mailto:jedbrown@mcs.anl.gov" target="_blank">jedbrown@mcs.anl.gov</a>&gt;</div>
<div>&gt;Subject: Re: [petsc-users] How to output the values of a parallel</div>
<div>&gt;PETSc vector to a ASCII file</div>
<div>&gt;To: PETSc users list &lt;<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>&gt;</div>
<div>&gt;Message-ID:</div>
<div>&lt;CAM9tzSkSeN3Z11vdadF66XTe_KVbUo-eA=<a href="mailto:2hvAgROFkTJfsYZg@mail.gmail.com" target="_blank">2hvAgROFkTJfsYZg@mail.gmail.com</a>&gt;</div>
<div>&gt;Content-Type: text/plain; charset=&quot;utf-8&quot;</div>
<div></div>
<div>&gt;On Fri, Dec 2, 2011 at 08:04, Feng-Chao Wang &lt;<a href="mailto:wolfshow@gmail.com" target="_blank">wolfshow@gmail.com</a>&gt; wrote:</div>
<div></div>
<div>&gt; **</div>
<div>&gt; Dear all,</div>
<div>&gt;</div>
<div>&gt; I intend to postprocess the solution of a PDE (stored in a</div>
<div>&gt; parallel PETSc vector ) using tecplot. Thus I want to  output the values of</div>
<div>&gt; the parallel vector as well as other data (such as the grid information) to</div>
<div>&gt; a ASCII file.</div>
<div>&gt;</div>
<div>&gt; When I deal this with</div>
<div>&gt;</div>
<div>&gt; VecGetArray(U, &amp;u);</div>
<div>&gt;</div>
<div>&gt; for (i=0; i&lt;Mx*My; i++)</div>
<div>&gt; {</div>
<div>&gt; PetscViewerASCIIPrintf(viewer,&quot;%F %F %F&quot;, x, y, u[i]);</div>
<div>&gt; }</div>
<div>&gt;</div>
<div>&gt; If more than 1 processor are used, I found that only part of the value of</div>
<div>&gt; u was output correctly (that stored on the first processor).</div>
<div>&gt; I found in the manual page of &quot;PetscViewerASCIIPrintf&quot; that &quot;Not</div>
<div>&gt; Collective, but only first processor in set has any effect&quot;</div>
<div>&gt;</div>
<div></div>
<div>&gt;If you can afford the memory:</div>
<div></div>
<div>&gt;<a href="http://www.mcs.anl.gov/petsc/petsc-dev/docs/manualpages/Vec/VecScatterCreateToZero.html" target="_blank">http://www.mcs.anl.gov/petsc/petsc-dev/docs/manualpages/Vec/VecScatterCreateToZero.html</a></div>

<div> </div>
<div>Thank you very much!</div>
<div>I tried the Scatter method. I found that even I scatter the parallel vector 
to a sequential vector, when I want to output this sequential vector to the 
file, I still can not use 
&quot;PetscViewerASCIIPrintf(viewer,&quot;%F %F %F&quot;, x, y, u[i]);&quot;, 
because the vector can not be directly accessed for output?</div></div></div></blockquote><div><br></div><div>Yes, it is an object. You really must read the manual chapter on Vec objects.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div style="FONT-SIZE:10pt;MARGIN:10px;FONT-FAMILY:verdana"><div><div> </div>
<div> Thus I used VecGetArray(U, &amp;u); and then 
PetscViewerASCIIPrintf. I still got part of the sequential vector, because the 
array u is stored on all the processor?</div></div></div></blockquote><div><br></div><div>This is incorrect. The entire array resides on process zero</div><div><br></div><div>  Matt </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div style="FONT-SIZE:10pt;MARGIN:10px;FONT-FAMILY:verdana"><div>
<div>&gt;Slower:</div>
<div></div>
<div>&gt;<a href="http://www.mcs.anl.gov/petsc/petsc-dev/docs/manualpages/Sys/PetscSynchronizedPrintf.html" target="_blank">http://www.mcs.anl.gov/petsc/petsc-dev/docs/manualpages/Sys/PetscSynchronizedPrintf.html</a></div>

<div> </div>
<div>I tried the PetscSynchronizedPrintf and got the same result. As a beginner 
of PETSc, I wonder if I can output the value of a vector U to the ASCII file 
using Printf(&quot;%f&quot;, U[i])? </div>
<div>If so, I can get the result I want.</div>
<div> </div>
<div>Or, I must use VecGetArray(U, &amp;u); before I want to access the 
data stored in the vector?</div>
<div> </div>
<div>Thank you!</div>
<div> </div>
<div></div>
<div>&gt;Binary output can be written in parallel using</div>
<div></div>
<div>&gt;<a href="http://www.mcs.anl.gov/petsc/petsc-dev/docs/manualpages/Vec/VecView.html" target="_blank">http://www.mcs.anl.gov/petsc/petsc-dev/docs/manualpages/Vec/VecView.html</a></div>
<div> </div>
<div>Yes, the VecView can output the correct data stored in the parallel vector 
to a ASCII file. However, I want to output not only the vector value but also 
the grid information according to the tecplot file format, for example, there 
are three column of data in one file:</div>
<div> </div>
<div>x[0] y[0] vec_value[0]</div>
<div>x[1] y[1] vec_value[1]</div>
<div>x[2] y[2] vec_value[2]</div>
<div>x[3] y[3] vec_value[3]</div>
<div>x[4] y[4] vec_value[4]</div>
<div>x[5] y[5] vec_value[5]</div>
<div>...   ...    ...</div>
<div> </div>
<div> </div>
<div> </div>
<div>******************************************</div></div></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
-- Norbert Wiener<br>