On Tue, Feb 24, 2009 at 3:47 PM, Yixun Liu <span dir="ltr">&lt;<a href="mailto:enjoywm@cs.wm.edu">enjoywm@cs.wm.edu</a>&gt;</span> wrote<br><div class="gmail_quote">You mean I have no need to call<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

VecSet(v, 0.0); and<br>
MatZeroEntries(mat);<br>
<br>
after I set the size for the vector or matrix?<br><div><div class="Wj3C7c"></div></div></blockquote><div><br>Yes, do not call them.<br><br>  Matt<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div class="Wj3C7c">
Barry Smith wrote:<br>
&gt;<br>
&gt; Jed is right. Our intention is to have the vector initialized to zero<br>
&gt; at creation time IF we allocate the array space.<br>
&gt; Tracking down a not properly initialized vector is the type of bug<br>
&gt; that takes forever to find; plus I wanted consistency<br>
&gt; between vectors and matrix. Users SHOULD NOT call a MatZeroEntries()<br>
&gt; initially on matrices (since it screws up<br>
&gt; preallocation) so we should not have them do it on vectors either for<br>
&gt; consistency.<br>
&gt;<br>
&gt; Barry<br>
&gt;<br>
&gt; On Feb 24, 2009, at 10:57 AM, Jed Brown wrote:<br>
&gt;<br>
&gt;&gt; On Tue 2009-02-24 06:53, Matthew Knepley wrote:<br>
&gt;&gt;&gt; On Mon, Feb 23, 2009 at 8:26 PM, Barry Smith &lt;<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>&gt;<br>
&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Vectors have all entries equal to zero. Dense matrices have all entries<br>
&gt;&gt;&gt; equal to zero. Sparse matrices have no entries (logically this is<br>
&gt;&gt;&gt; the same<br>
&gt;&gt;&gt; as entries equal to zero).<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; We do not automatically zero the entires upon allocation. You have<br>
&gt;&gt;&gt; to call<br>
&gt;&gt;&gt; VecZeroEntries() or VecSet()<br>
&gt;&gt;&gt; to initialize the vector.<br>
&gt;&gt;<br>
&gt;&gt; That&#39;s what I would have expected, but Barry is correct, at least for<br>
&gt;&gt; the usual types. See, for instance<br>
&gt;&gt;<br>
&gt;&gt; PetscErrorCode PETSCVEC_DLLEXPORT VecCreate_Seq(Vec V)<br>
&gt;&gt; {<br>
&gt;&gt; Vec_Seq *s;<br>
&gt;&gt; PetscScalar *array;<br>
&gt;&gt; PetscErrorCode ierr;<br>
&gt;&gt; PetscInt n = PetscMax(V-&gt;map-&gt;n,V-&gt;map-&gt;N);<br>
&gt;&gt; PetscMPIInt size;<br>
&gt;&gt;<br>
&gt;&gt; PetscFunctionBegin;<br>
&gt;&gt; ierr = MPI_Comm_size(((PetscObject)V)-&gt;comm,&amp;size);CHKERRQ(ierr);<br>
&gt;&gt; if (size &gt; 1) {<br>
&gt;&gt; SETERRQ(PETSC_ERR_ARG_WRONG,&quot;Cannot create VECSEQ on more than one<br>
&gt;&gt; process&quot;);<br>
&gt;&gt; }<br>
&gt;&gt; ierr = PetscMalloc(n*sizeof(PetscScalar),&amp;array);CHKERRQ(ierr);<br>
&gt;&gt; ierr = PetscLogObjectMemory(V, n*sizeof(PetscScalar));CHKERRQ(ierr);<br>
&gt;&gt; ierr = PetscMemzero(array,n*sizeof(PetscScalar));CHKERRQ(ierr);<br>
&gt;&gt; ierr = VecCreate_Seq_Private(V,array);CHKERRQ(ierr);<br>
&gt;&gt; s = (Vec_Seq*)V-&gt;data;<br>
&gt;&gt; s-&gt;array_allocated = array;<br>
&gt;&gt; PetscFunctionReturn(0);<br>
&gt;&gt; }<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; In well-structured code, the cost of zeroing the vector is tiny and the<br>
&gt;&gt; effort to track down uninitialized bugs is significant enough that this<br>
&gt;&gt; seems like a sane default.<br>
&gt;&gt;<br>
&gt;&gt; Jed<br>
&gt;<br>
<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <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>