Thanks for your quick reply. What confused me is that why would the code works fine if I reset the gmres restart number by recalling kspgmressetrestart just before kspsolve?
Sent from my iPhone > On May 2, 2014, at 6:03 PM, "Barry Smith" <[email protected]> wrote: > > > Your shell matrix is buggy in some way. Whenever the residual norm jumps > like crazy at a restart it means that something is wrong with the operator. > > Barry > >> On May 2, 2014, at 4:41 PM, Song Gao <[email protected]> wrote: >> >> Dear PETSc users, >> >> I'm solving a linear system in KSP and trying to setup the solver in codes. >> But I feel strange because my codes don't converge unless I call >> KSPGMRESSetRestart twice. >> >> My codes looks like >> >> call KSPSetOperators ( pet_solv, pet_mat_mf_shell, pet_matp, >> DIFFERENT_NONZERO_PATTERN, ierpetsc ) >> call KSPSetType ( pet_solv, 'gmres', ierpetsc ) >> call KSPGMRESSetRestart ( pet_solv, 30, ierpetsc ) >> call KSPGetPC ( pet_solv, pet_precon, ierpetsc ) >> call PCSetType ( pet_precon, 'asm', ierpetsc ) >> call PCASMSetOverlap ( pet_precon, 1, ierpetsc ) >> call KSPSetUp ( pet_solv, ierpetsc ) >> call PCASMGetSubKSP ( pet_precon, n_local, first_local, pet_solv_sub, >> ierpetsc ) ! n_local is one >> call KSPGetPC ( pet_solv_sub(1), pet_precon_sub, ierpetsc ) >> call PCSetType ( pet_precon_sub, 'jacobi', ierpetsc ) >> call PCJacobiSetUseRowMax ( pet_precon_sub, ierpetsc ) >> call KSPSetFromOptions ( pet_solv, ierpetsc ) >> call KSPGMRESSetRestart ( pet_solv, 29, ierpetsc ) ! adding this >> line, the codes converge >> call KSPSolve ( pet_solv, pet_rhsp, pet_solup, ierpetsc ) >> >> runing with 1 CPU WITHOUT the line with red color and the codes don't >> converge >> >> runtime options: -ksp_monitor_true_residual -ksp_view >> 0 KSP preconditioned resid norm 6.585278940829e+00 true resid norm >> 9.619278462343e-03 ||r(i)||/||b|| 1.000000000000e+00 >> 1 KSP preconditioned resid norm 6.585278219510e+00 true resid norm >> 9.619278462343e-03 ||r(i)||/||b|| 1.000000000000e+00 >> 2 KSP preconditioned resid norm 2.198638170622e+00 true resid norm >> 1.365132713014e-01 ||r(i)||/||b|| 1.419163317039e+01 >> 3 KSP preconditioned resid norm 1.599896387215e+00 true resid norm >> 1.445988845022e-01 ||r(i)||/||b|| 1.503219654865e+01 >> ....... >> 28 KSP preconditioned resid norm 4.478466011191e-01 true resid norm >> 1.529879309381e-01 ||r(i)||/||b|| 1.590430420920e+01 >> 29 KSP preconditioned resid norm 4.398129572260e-01 true resid norm >> 1.530132924055e-01 ||r(i)||/||b|| 1.590694073413e+01 >> 30 KSP preconditioned resid norm 2.783227613716e+12 true resid norm >> 1.530369123550e-01 ||r(i)||/||b|| 1.590939621450e+01 >> >> 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=10000, initial guess is zero >> tolerances: relative=1e-05, absolute=1e-50, divergence=10000 >> left preconditioning >> using PRECONDITIONED norm type for convergence test >> PC Object: 1 MPI processes >> type: asm >> Additive Schwarz: total subdomain blocks = 1, amount of overlap = 1 >> Additive Schwarz: restriction/interpolation type - RESTRICT >> [0] number of local blocks = 1 >> Local solve info for each block is in the following KSP and PC objects: >> - - - - - - - - - - - - - - - - - - >> [0] local block number 0, size = 22905 >> KSP Object: (sub_) 1 MPI processes >> type: preonly >> maximum iterations=10000, initial guess is zero >> tolerances: relative=1e-05, absolute=1e-50, divergence=10000 >> left preconditioning >> using NONE norm type for convergence test >> PC Object: (sub_) 1 MPI processes >> type: jacobi >> linear system matrix = precond matrix: >> 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 >> - - - - - - - - - - - - - - - - - - >> linear system matrix followed by preconditioner matrix: >> Matrix Object: 1 MPI processes >> type: shell >> rows=22905, cols=22905 >> 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 >> WARNING: zero iteration in iterative solver >> >> runing with 1 CPU WITH the line with red color and the codes converge >> >> runtime options: -ksp_monitor_true_residual -ksp_view >> 0 KSP preconditioned resid norm 6.585278940829e+00 true resid norm >> 9.619278462343e-03 ||r(i)||/||b|| 1.000000000000e+00 >> 1 KSP preconditioned resid norm 2.566248171026e+00 true resid norm >> 4.841043870812e-03 ||r(i)||/||b|| 5.032647604250e-01 >> 2 KSP preconditioned resid norm 1.410418402651e+00 true resid norm >> 3.347509391208e-03 ||r(i)||/||b|| 3.480000505561e-01 >> 3 KSP preconditioned resid norm 9.665409287757e-01 true resid norm >> 2.289877121679e-03 ||r(i)||/||b|| 2.380508195748e-01 >> 4 KSP preconditioned resid norm 4.469486152454e-01 true resid norm >> 1.283813398084e-03 ||r(i)||/||b|| 1.334625463968e-01 >> 5 KSP preconditioned resid norm 2.474889829653e-01 true resid norm >> 7.956009139680e-04 ||r(i)||/||b|| 8.270900120862e-02 >> ............ >> 24 KSP preconditioned resid norm 9.518780877620e-05 true resid norm >> 6.273993696172e-07 ||r(i)||/||b|| 6.522312167937e-05 >> 25 KSP preconditioned resid norm 6.837876679998e-05 true resid norm >> 4.612861071815e-07 ||r(i)||/||b|| 4.795433555514e-05 >> 26 KSP preconditioned resid norm 4.864361942316e-05 true resid norm >> 3.394754589076e-07 ||r(i)||/||b|| 3.529115621682e-05 >> KSP Object: 1 MPI processes >> type: gmres >> GMRES: restart=29, using Classical (unmodified) Gram-Schmidt >> Orthogonalization with no iterative refinement >> GMRES: happy breakdown tolerance 1e-30 >> maximum iterations=10000, initial guess is zero >> tolerances: relative=1e-05, absolute=1e-50, divergence=10000 >> left preconditioning >> using PRECONDITIONED norm type for convergence test >> PC Object: 1 MPI processes >> type: asm >> Additive Schwarz: total subdomain blocks = 1, amount of overlap = 1 >> Additive Schwarz: restriction/interpolation type - RESTRICT >> [0] number of local blocks = 1 >> Local solve info for each block is in the following KSP and PC objects: >> - - - - - - - - - - - - - - - - - - >> [0] local block number 0, size = 22905 >> KSP Object: (sub_) 1 MPI processes >> type: preonly >> maximum iterations=10000, initial guess is zero >> tolerances: relative=1e-05, absolute=1e-50, divergence=10000 >> left preconditioning >> using NONE norm type for convergence test >> PC Object: (sub_) 1 MPI processes >> type: jacobi >> linear system matrix = precond matrix: >> 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 >> - - - - - - - - - - - - - - - - - - >> linear system matrix followed by preconditioner matrix: >> Matrix Object: 1 MPI processes >> type: shell >> rows=22905, cols=22905 >> 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 >> WARNING: zero iteration in iterative solver >> >> >> What would be my error here? Thank you. >
