<p>Dear Matthew:</p><p>You mean lda is correct in these codes even for PETSc2.3.3? I need to confirm this, because the results become wrong using lda. However, I use nlrows and can get right results. thanks.</p><p>Regards,</p>
<p>Yujie&nbsp;<br></p><br><div class="gmail_quote">On Tue, Jan 20, 2009 at 5:34 PM, Matthew Knepley <span dir="ltr">&lt;<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
That fixes a bug since the the data is actually stored with leading<br>
dimension lda, rather<br>
than nlrows.<br>
<br>
 &nbsp;Matt<br>
<div><div class="Wj3C7c"><br>
On Tue, Jan 20, 2009 at 7:27 PM, Yujie &lt;<a href="mailto:recrusader@gmail.com">recrusader@gmail.com</a>&gt; wrote:<br>
&gt; Dear Barry and Matthew:<br>
&gt;<br>
&gt; I always fingure out what&#39;s wrong with MatGetSubMatrix_MPIDense() in my<br>
&gt; application. Because I use other pacakges based on PETSc, it is difficult to<br>
&gt; change my PETSc2.3.3 to 3.0.0. I have to debug my codes to find something.<br>
&gt;<br>
&gt; Now, I have confirmed the question is in &quot;*bv++ = av[irow[j] - rstart];&quot; of<br>
&gt;<br>
&gt; (PETSC2.3.3)<br>
&gt;<br>
&gt; /* Now extract the data pointers and do the copy, column at a time */<br>
&gt; 245: newmatd = (Mat_MPIDense*)newmat-&gt;data;<br>
&gt; 246: bv = ((Mat_SeqDense *)newmatd-&gt;A-&gt;data)-&gt;v;<br>
&gt; 247:<br>
&gt; 248: for (i=0; i&lt;ncols; i++) {<br>
&gt; 249: av = v + nlrows*icol[i];<br>
&gt; 250: for (j=0; j&lt;nrows; j++) {<br>
&gt; 251: *bv++ = av[irow[j] - rstart];<br>
&gt; 252: }<br>
&gt; 253: }<br>
&gt;<br>
&gt; The codes generate an error of segmentation violation.<br>
&gt;<br>
&gt; I have checkec PETsc3.0.0 version. the corresponding codes are:<br>
&gt;<br>
&gt; 220: /* Now extract the data pointers and do the copy, column at a time */<br>
&gt; 221: newmatd = (Mat_MPIDense*)newmat-&gt;data;<br>
&gt; 222: bv = ((Mat_SeqDense *)newmatd-&gt;A-&gt;data)-&gt;v;<br>
&gt; 223:<br>
&gt; 224: for (i=0; i&lt;ncols; i++) {<br>
&gt; 225: av = v + ((Mat_SeqDense *)newmatd-&gt;A-&gt;data)-&gt;lda*icol[i];<br>
&gt; 226: for (j=0; j&lt;nrows; j++) {<br>
&gt; 227: *bv++ = av[irow[j] - rstart];<br>
&gt; 228: }<br>
&gt; 229: }<br>
&gt;<br>
&gt; why change &quot;nlrows&quot; to &quot;((Mat_SeqDense *)newmatd-&gt;A-&gt;data)-&gt;lda&quot;? After I<br>
&gt; revise the codes in PETsc2.3.3, the error disappears. However, the results<br>
&gt; from my codes become wrong. Could you give me some advice? thanks a lot.<br>
&gt;<br>
&gt; Regards,<br>
&gt;<br>
&gt; Yujie<br>
&gt;<br>
&gt;<br>
<br>
<br>
<br>
</div></div><font color="#888888">--<br>
What most experimenters take for granted before they begin their<br>
experiments is infinitely more interesting than any results to which<br>
their experiments lead.<br>
-- Norbert Wiener<br>
</font></blockquote></div><br>