<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Jul 7, 2017 at 2:49 AM, Dave May <span dir="ltr"><<a href="mailto:dave.mayhem23@gmail.com" target="_blank">dave.mayhem23@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail-"><div><div><div class="gmail_quote"><div>On Fri, 7 Jul 2017 at 11:31, Florian Lindner <<a href="mailto:mailinglists@xgm.de" target="_blank">mailinglists@xgm.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello,<br>
<br>
I'm having some struggle understanding the preallocation for MPIAIJ matrices, especially when a value is in off-diagonal<br>
vs. diagonal block.<br>
<br>
The small example program is at <a href="https://pastebin.com/67dXnGm3" rel="noreferrer" target="_blank">https://pastebin.com/67dXnGm3</a><br>
<br>
In general it should be parallel, but right now I just run it in serial.</blockquote><div><br></div></div></div></div></span><div><div><div class="gmail_quote"><div>When you run this code in serial, the mat type will be MATSEQAIJ. Hence, the call to MatMPIAIJSetPreallocation() will have no effect because the mat type does not match MPIAIJ. As a result, your code doesn't perform any preallocation for SEQAIJ matrices.</div><div><br></div><div>In addition to calling MatMPIAIJSetPreallocation(), add a call to MatSEQAIJSetPreallocation.</div></div></div></div></blockquote><div><br></div><div>To make it easier we now provide</div><div><br></div><div>  <a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatXAIJSetPreallocation.html">http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatXAIJSetPreallocation.html</a></div><div><br></div><div>    Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div><div class="gmail_quote"><div>Thanks,</div><div>  Dave</div></div></div></div><div class="gmail-HOEnZb"><div class="gmail-h5"><div><div><div class="gmail_quote"><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
<br>
According to my understanding of<br>
<br>
<a href="http://www.mcs.anl.gov/petsc/petsc-3.7/docs/manualpages/Mat/MatMPIAIJSetPreallocation.html" rel="noreferrer" target="_blank">http://www.mcs.anl.gov/petsc/<wbr>petsc-3.7/docs/manualpages/<wbr>Mat/MatMPIAIJSetPreallocation.<wbr>html</a><br>
<br>
a entry is in the diagonal submatrix, if its row is in the OwnershipRange and its column is in OwnershipRangeColumn.<br>
That also means that in a serial run, there is only a diagonal submatrix.<br>
<br>
However, having MAT_NEW_NONZERO_ALLOCATION_ERR set, I get an error when<br>
<br>
Inserting 6 elements in row 2, though I have exactly<br>
<br>
2 o_nnz = 0, d_nnz = 6 (means 6 elements allocated in the diagonal submatrix of row 2)<br>
<br>
Error is:<br>
<br>
[0]PETSC ERROR: Argument out of range<br>
[0]PETSC ERROR: New nonzero at (2,5) caused a malloc<br>
Use MatSetOption(A, MAT_NEW_NONZERO_ALLOCATION_<wbr>ERR, PETSC_FALSE) to turn off this check<br>
<br>
<br>
What is wrong with my understanding?<br>
<br>
Thanks,<br>
Florian<br>
</blockquote></div></div></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div>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</div><div><br></div><div><a href="http://www.caam.rice.edu/~mk51/" target="_blank">http://www.caam.rice.edu/~mk51/</a><br></div></div></div>
</div></div>