> Subject: Re: [petsc-users] reuse an assembled matrix when a linear problem is
> solved with KSP and DM
> From: [email protected]
> Date: Tue, 17 Sep 2013 20:45:03 -0500
> CC: [email protected]
> To: [email protected]
>
>
> On Sep 17, 2013, at 8:35 PM, Roc Wang <[email protected]> wrote:
>
> > Hello,
> >
> > I am trying to solve a linear problem by using KSPSolve and DM. In the
> > example /src/ksp/ksp/examples/tutorials/ex45.c, the Matrix and the RHS
> > vector are computed by calling KSPSetComputeRHS and
> > KSPSetComputeOperators in which functions ComputeRHS() and ComputeMatrix()
> > are called and the matrix is assembled in ComputeMatrix().
> >
> > Since the linear system is solved in an iteration, it will save time to
> > reuse the matrix assembled in ComputeMatrix(). That is the ComputeMatrix()
> > is called only once, but ComputeRHS() is called in each iteration.
>
> What do you need mean by an "iteration" here? Do you mean one iteration of
> a KSP solvers, of which several are needed to produce the approximate
> solution or something else?
> sorry for the misunderstanding. By iteration, I mean the linear system needs
> to be solved many times with different RHS, the RHS is changed in each time
> the linear sytem is solved. It's not the iteration that the KSP takes.
> The ComputeRHS() function is only called ONCE for each KSPSolve (even
> though KSP may take several iterations to solve the linear system).
> So, I need to call KSPSetComputeRHS() each time I want to change the RHS,
> right?
> The ComputeMatrix() function is actually only called ONCE period, unless
> you call KSPSetComputeOperators() again, even if you call KSPSolve() several
> times it uses the same matrix until you call KSPSetComputerOperators() again.
> Thus, I just need to call KSPSetComputerOperators() once when the matrix
> is assembled the first time to solve the linear system, after that only
> KSPSetComputeRHS(), when I want to change RHS vector.
> > Can anyone tell me what should I do to keep the assembled matrix?
> >
> > I am thinking not to use KSPSetComputeOperators for assembling the
> > matrix, but use DMCreateMatrix() alternatively. Am I right?
>
> That is a completely orthogonal issue; DMCreateMatrix() only gives you an
> empty sparse matrix with the right nonzero structure for the mesh associated
> with DM. You still need to compute its entries yourself, possibly in a
> ComputeMatrix function you write. Yes, I plan to compute the entries after
> calling DMCreateMatrix(), just like calling MatSetValuesStencil() in for
> loop and then MatAssemblyBegin(), MatAssemblyBegin().
>
> Barry
>
> >
> > Any hits would be appreciated very much. Thanks alot.
> >
> >
>