On Wed, Jun 6, 2018 at 6:30 AM, Smith, Barry F. <[email protected]> wrote: > > > > > On Jun 5, 2018, at 7:36 PM, Matthew Overholt <[email protected]> > wrote: > > > > > > On Tue, Jun 5, 2018 at 1:48 PM, Smith, Barry F. <[email protected]> > wrote: > > > > > > > On Jun 5, 2018, at 4:08 PM, Matthew Overholt <[email protected]> > wrote: > > > > > > Yes to Matthew - not repeating Phase 1: Fill-reduction analysis and > symbolic factorization . Numerical factoring is required because the > matrix values have changed (although only slightly) as well as the RHS. > > > > > > We are using KSPPREONLY with Picard iterations. Thank you, Barry, for > the KSP*Preconditioner calls I wasn't aware of. > > > > > > It sounds like PETSc and/or Pardiso automatically determines whether > Phase 1 is required or not, but if we want to force a new Phase 1 (such as > in a long unsteady run), then I suppose we could just destroy KSP and > remake it. > > > > I'm confused. Yes PETSc will do a new analysis if the nonzero > structure changes otherwise it will never do a new analysis. > > > > Is your nonzero structure changing? > > > > If you nonzero structure is not changing you have to do nothing. > > > > If the nonzero structure does change than the code needs to do a new > analysis because the old factors (for the numerical part) cannot work with > the new nonzero locations of the matrix. > > > > I really don't see why you have to do anything? > > > > Barry > > > > No, the nonzero structure never changes. Redoing the analysis is not > required, in the sense that a solution can still be obtained without it; > however, for long unsteady runs (with heat sources turning on and off) the > matrix values change so much that, without redoing the analysis, more > iterations are required to converge at each time step, resulting in a > doubling of the total solve time compared to when the analysis is > periodically redone. I don't know exactly what Pardiso is doing "under the > hood" but that has been our experience. > > Strange; I've never heard of this before, anyways, > > You could trick it by "saying" that the nonzero structure has changed > even if it has not. The matrix struct has a field A->nonzerostate you > could simply increase this value by 1 (include #include > <petsc/private/matimpl.h> to get access to the field). Any time you change > this value will trigger a new analysis stage. > > Thanks, I'll give this a try.
Matt...
