> 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.
> > 
> >  
> 
                                          

Reply via email to