From: Brent K. <bkr...@ic...> - 2009-01-12 22:56:20
|
Thanks to all of you for the ideas (Roy, John and David). I will try some things and get back to you on this. I would like to not have to either rebuild the system matrix or reinvert that matrix, as both are expensive and hopefully unnecessary in my case. -Brent Roy Stogner wrote: > > On Mon, 12 Jan 2009, John Peterson wrote: > >> On Mon, Jan 12, 2009 at 3:00 PM, Brent Kraczek >> <bkr...@ic...> wrote: >>> Dear all, >>> >>> I am trying to set-up a simple poisson system where I will change my >>> RHS >>> repeatedly, but the main system matrix will not change, so it will only >>> need to be inverted once. I have been looking through the class >>> definition for LinearImplicitSystem and its parent classes, but I don't >>> see how to implement this. (I did run across a comment about multiple >>> RHS in regard to the variable assemble_before_solve, but it's still not >>> clear to me.) >>> >>> Is there an example of this, or could you point me toward which member >>> functions to use to accomplish this? >> >> I think what you'll want is if-tests in your matrix assembly code >> which only assemble the matrix on the first trip through and on >> subsequent calls to assemble only assemble the right-hand sides. >> There's nothing that I know of in the library which makes this >> particularly easy to do, unfortunately. > > This isn't too hard without library support. Just stick a member > boolean in your system (or a static local boolean in your assembly > function) for matrix_valid, default it to false, set it to true after > an assembly, set it back to false when something happens to invalidate > that matrix. The only time you'll want library support is in those > special cases (FEMSystem's nonlinear solvers, for example) where the > library knows enough to decide that only the residual needs > reassembly, and in that particular case there's already an API for it. > > But I digress. I think Brent's problem wasn't how to avoid redundant > matrix assembly, it was how to avoid redundant matrix inversion (or, > more generally, how to avoid throwing away and rebuilding your > preconditioner). > > I think for that we currently force you to add a matrix named > "Preconditioner" to the system, which can be saved and used again on > subsequent solves. I'm hazy on the details, though; I've never done > that myself. > --- > Roy |