> On Oct 9, 2015, at 1:58 PM, Leonardi Filippo > <[email protected]> wrote: > > Actually I used to use KSPSolve directly, then I've started using > KSPSetCompute... because (if I remember correctly) (as you mention) I wanted > KSPComputeMatrix to compute all the coarse matrices for me. > > Now I switched to completely use algebraic multigrid or galerkin computed > matrices, so I can revert back to use the KSPSolve directly, but, for testing > purposes, it may be good to keep being able to use PCMG. > > My question now is: can I use SetComputeMatrix() and then call > KSPSolve(ksp,b,x)? (I forgot if i need to use b,x = NULL or not when using > the compute matrix routine.)
What about providing the ComputeMatrix() but NOT the computerrhs or computeinitialguess? Make sure to call KSPSetInitialGuessNonzero() so KSP doesn't zero out the x you pass in). Barry > ________________________________________ > Da: Barry Smith [[email protected]] > Inviato: venerdì 9 ottobre 2015 20.49 > A: Leonardi Filippo > Cc: [email protected] > Oggetto: Re: [petsc-users] Compute initial guess multiple times > > The current model is a bit wonky. > > > At the first call to KSPSolve after a call to KSPSetComputeOperators the > computematrix, computerhs, and computeinitialguess are called. > > In subsequent calls to KSPSolve ONLY the computerhs is called. > > So for example > > KSPSetComputeOperators() > KSPSolve -- computematrix, rhs, initial guess called > KSPSolve --- computerhs called > KSPSetComputerOperators() > KSPSolve -- computematrix, rhs, initial guess called > > > Note that the KSPSetCompute...() functions are just one particular way of > using KSP. You can also use the "standard" interface > > Set values into matrix and rhs and initial guess (call > KSPSetInitialGuessNonzero) > KSPSolve(ksp,b,x) > change values in b, this would use the current values in x as the initial > guess for the next solve > KSPSolve(ksp,b,x) > change values in b and x > KSPSolve() > Change values in matrix and b and x (for initial guess) > KSPSolve() > > This gives you exact detailed control over when and what you set in > initial guesses. > > Is there a particular reason for your problem that it is better to use the > KSPSetCompute...() interface? > > Barry > > Note I wrote the KSPSetCompute...() interface so that PCMG could "build its > own" coarse grid matrix values without the user needing to set values for all > the levels before calling KSPSolve. > > > >> On Oct 9, 2015, at 5:04 AM, Filippo Leonardi >> <[email protected]> wrote: >> >> So, I want to solve a system Ax = b multiple times, reuse A with different >> bs. >> It is natural to set differents initial guesses each time for iterative >> solvers. >> >> And >> KSPSetComputeInitialGuess(ksp,ComputeGuess,&user); >> is what PETSc provide for setting the Guess. >> >> I am unsure if I am making something wrong, but it seems to me that this >> function is called only once the matrix is first setted up. I want to be >> called each time. >> >> See my modified ex32.c for comparison. >> >> ./ex32 -pc_type mg -pc_mg_type full -ksp_type fgmres -ksp_monitor_short - >> pc_mg_levels 3 -mg_coarse_pc_factor_shift_type nonzero - >> ksp_initial_guess_nonzero >> >> Thanks. >> >> Best, >> Filippo<ex32.c> >
