On Mon, Apr 20, 2015 at 7:45 PM, Gideon Simpson <[email protected]>
wrote:
> 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:
>
> PetscErrorCode ConstructMat(Mat A)
>
> 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?
I think if you plan to compose functions like these, then leave the
Assembly() calls outside. However, if you plan to mix
ADD and INSERT calls, then you have to at least call Assembly(A,
FLUSH_ASSEMBLY) in the function.
Thanks,
Matt
> -gideon
>
--
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener