<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Apr 20, 2015 at 7:45 PM, Gideon Simpson <span dir="ltr"><<a href="mailto:gideon.simpson@gmail.com" target="_blank">gideon.simpson@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">In cutting up a petsc code into subroutines, is there any design philosophy as to when to call global routines, like assemble?  The problem I have in mind is that I want to build up a matrix, allowing for it to be of MPIAIJ type.  Currently, I’m populating it row by row with a loop using MatSetValues.  Since this is an uninteresting piece of the code, and it may be reused elsewhere, I was thinking of writing, in a separate file:<br>
<br>
PetscErrorCode ConstructMat(Mat A)<br>
<br>
But within ConstructMat, should I only populate the entries? Is it better design to put MatAssemblyBegin/End in that, or in the main program, after this has been called?</blockquote><div><br></div><div>I think if you plan to compose functions like these, then leave the Assembly() calls outside. However, if you plan to mix</div><div>ADD and INSERT calls, then you have to at least call Assembly(A, FLUSH_ASSEMBLY) in the function.</div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="HOEnZb"><font color="#888888">
-gideon<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">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></div>