[petsc-users] Question with setting up KSP solver parameters.

Song Gao song.gao2 at mail.mcgill.ca
Fri May 2 16:41:26 CDT 2014


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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20140502/84ec0c1d/attachment.html>


More information about the petsc-users mailing list