Yeah. Thank you all. I think there are bugs in my function evaluation. I just wondering if I could guess where the bug might be from the residual history. I would check my function evaluation. Thank you very much.
I tried add -ksp_norm_type unpreconditioned, but got an error. run with -ksp_max_it 10 -ksp_gmres_restart 30 -ksp_monitor_true_residual -ksp_converged_reason -ksp_view -ksp_norm_type unpreconditioned -ksp_pc_side right -pc_type none The error is [0]PETSC ERROR: --------------------- Error Message ------------------------------------ [0]PETSC ERROR: No support for this operation for this object type! [0]PETSC ERROR: KSP gmres does not support UNPRECONDITIONED with LEFT! [0]PETSC ERROR: ------------------------------------------------------------------------ [0]PETSC ERROR: Petsc Release Version 3.3.0, Patch 6, Mon Feb 11 12:26:34 CST 2013 [0]PETSC ERROR: See docs/changes/index.html for recent updates. [0]PETSC ERROR: See docs/faq.html for hints about trouble shooting. [0]PETSC ERROR: See docs/index.html for manual pages. [0]PETSC ERROR: ------------------------------------------------------------------------ On Thu, Apr 17, 2014 at 5:28 PM, Jed Brown <[email protected]> wrote: > Song Gao <[email protected]> writes: > > > Hello, > > > > I am using KSP framework to solve the problem A \Delta x = b in the > > matrix free fashion. where A is the matrix free matrix. I have another > > assembled matrix for preconditioning, but I'm NOT using it. My code is > not > > working so I'm debugging it. > > I run the code with options -ksp_pc_side left -ksp_max_it 10 > > -ksp_gmres_restart 30 -ksp_monitor_true_residual -pc_type none -ksp_view > > > > I think if pc_type is none, the precondiitoned resid norm should equal to > > true resid norm (Am I correct?). But this doesn't happen. So maybe it > would > > be helpful if I know how preconditioned resid norm and true resid norm > are > > computed. > > > > Website says true resid norm is just b - A \Delta x. But how is > > preconditioned resid norm computed? > > Just apply the preconditioner P^{-1} to the residual above. In > practice, it is usually computed indirectly via a recurrence in the > Krylov method, but they should agree up to rounding error. > > > 0 KSP preconditioned resid norm 9.619278462343e-03 true resid norm > > 9.619278462343e-03 ||r(i)||/||b|| 1.000000000000e+00 > > 1 KSP preconditioned resid norm 9.619210849854e-03 true resid norm > > 2.552369536916e+06 ||r(i)||/||b|| 2.653389801437e+08 > > 2 KSP preconditioned resid norm 9.619210847390e-03 true resid norm > > 2.552458142544e+06 ||r(i)||/||b|| 2.653481913988e+08 > > 3 KSP preconditioned resid norm 9.619210847385e-03 true resid norm > > 2.552458343191e+06 ||r(i)||/||b|| 2.653482122576e+08 > > 4 KSP preconditioned resid norm 9.619210847385e-03 true resid norm > > 2.552458344014e+06 ||r(i)||/||b|| 2.653482123432e+08 > > 5 KSP preconditioned resid norm 9.619210847385e-03 true resid norm > > 2.552458344015e+06 ||r(i)||/||b|| 2.653482123433e+08 > > Try the above with -ksp_norm_type unpreconditioned. The output below > claims there is no preconditioner, so the most likely cause is that your > operator is nonlinear. With MFFD, I would speculate that it is caused > by your nonlinear function being discontinuous, or by reusing some > memory without clearing it (thus computing nonsense after the first > iteration). > > > Linear solve did not converge due to DIVERGED_ITS iterations 10 > > KSP Object: 1 MPI processes > > type: gmres > > GMRES: restart=30, using Classical (unmodified) Gram-Schmidt > > Orthogonalization with no iterative refinement > > GMRES: happy breakdown tolerance 1e-30 > > maximum iterations=10, initial guess is zero > > tolerances: relative=1e-06, absolute=1e-50, divergence=100000 > > left preconditioning > > using PRECONDITIONED norm type for convergence test > > PC Object: 1 MPI processes > > type: none > > linear system matrix followed by preconditioner matrix: > > Matrix Object: 1 MPI processes > > type: mffd > > rows=22905, cols=22905 > > Matrix-free approximation: > > err=1.49012e-08 (relative error in function evaluation) > > Using wp compute h routine > > Does not compute normU > > Matrix Object: 1 MPI processes > > type: seqbaij > > rows=22905, cols=22905, bs=5 > > total: nonzeros=785525, allocated nonzeros=785525 > > total number of mallocs used during MatSetValues calls =0 > > block size is 5 >
