<div class="gmail_quote">On Thu, Nov 24, 2011 at 07:33, Dominik Szczerba <span dir="ltr">&lt;<a href="mailto:dominik@itis.ethz.ch">dominik@itis.ethz.ch</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div id=":sd">MatCreateMPIAIJ(PETSC_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE, NTOT,<br>
NTOT, 500, PETSC_NULL, 500, PETSC_NULL, &amp;A);<br>
<br>
(with 500 a big overshoot)<br>
<br>
then I do in a loop:<br>
<br>
1. ierr = MatMPIAIJSetPreallocation(A, 500, PETSC_NULL, 500,<br>
PETSC_NULL); CHKERRQ(ierr);<br>
2. ierr = MatZeroEntries(A); CHKERRQ(ierr);<br>
<br>
Line 1. does not matter the first time in the loop, info.mallocs is<br>
always 0, but if it is commented out, info.mallocs is non-zero the<br>
second time loop is executed.<br>
So I am confused, is the preallocation in MatCreateMPIAIJ not<br>
sufficient? Does it need to be refreshed?</div></blockquote></div><br><div>You must be changing the number of nonzeros in each iteration of the loop.</div><div><br></div><div>I suggest assembling all possible entries (even the ones that happen to be zero) in the first assembly. Then there will be space and you can reuse the data structure.</div>