<div class="gmail_quote">On Wed, Jun 1, 2011 at 21:53, John Fettig <span dir="ltr">&lt;<a href="mailto:john.fettig@gmail.com">john.fettig@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;">
<div id=":3ta">What are the recommendations for reducing the cost of inserting values<br>
into an AIJ matrix?  In my application (transient finite element<br>
solution of flow and heat, linear elements), this is accounting for up<br>
to 20% of overall runtime.  Is this expected?<br></div></blockquote><div><br></div><div>2D or 3D? What kind of elements?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div id=":3ta">
<br>
I have double checked that the matrices are preallocated correctly,<br>
and I have set MAT_NEW_NONZERO_ALLOCATION_ERR and it runs without<br>
error.<br>
<br>
The matrices periodically change size/nonzero pattern, but until then<br>
the values are zeroed out and MatSetOption( mat,<br>
MAT_KEEP_NONZERO_PATTERN, PETSC_TRUE); is called.<br>
<br>
The call to MatSetValues happens on a per-element basis on the local<br>
element matrix, so one call per element.  I re-activated the<br>
MAT_SetValues event and have included a -log_summary from a short run.</div></blockquote></div><br><div>The overhead of the profiling can be nontrivial for small elements. How does the run-time change if you deactivate that event?</div>
<div><br></div><div>How much of the overall time is spent in matrix assembly (your code plus MatSetValues)?</div><div><br></div><div>It looks like the linear solve is around 18 iterations. For first order elements, that is probably too many for matrix-free with a lagged Jacobian to pay off. The trade-off is much more favorable for higher order elements, or if the preconditioner is better.</div>