[petsc-users] KrylovSchur solver diverges when setting EPS_GHEP

Jose E. Roman jroman at dsic.upv.es
Wed Nov 26 05:45:26 CST 2014


El 25/11/2014, a las 23:00, Denis Davydov escribió:

> 
>> 
>> sinvert should give you more that 2 eigenvalues if you set eps_nev > 2. You may need to increase the number of iterations with eps_max_it
> 
> i would expect that it should, but it is not the case. I tried setting number of iterations 10 times the number of DoFs, and no change.
> It does not seem to be related. Here is an output without shift-and-invert
> 
> EPS Object: 1 MPI processes
>   type: krylovschur
>     Krylov-Schur: 50% of basis vectors kept after restart
>   problem type: generalized symmetric eigenvalue problem
>   selected portion of the spectrum: smallest real parts
>   computing true residuals explicitly
>   number of eigenvalues (nev): 5
>   number of column vectors (ncv): 20
>   maximum dimension of projected problem (mpd): 20
>   maximum number of iterations: 2890
>   tolerance: 1e-07
>   convergence test: absolute
> BV Object: 1 MPI processes
>   type: svec
>   21 columns of global length 289
>   orthogonalization method: classical Gram-Schmidt
>   orthogonalization refinement: if needed (eta: 0.7071)
>   non-standard inner product
>   Mat Object:   1 MPI processes
>     type: seqaij
>     rows=289, cols=289
>     total: nonzeros=1913, allocated nonzeros=5491
>     total number of mallocs used during MatSetValues calls =0
>       not using I-node routines
> DS Object: 1 MPI processes
>   type: hep
>   solving the problem with: Implicit QR method (_steqr)
> ST Object: 1 MPI processes
>   type: shift
>   shift: 0
>   number of matrices: 2
>   all matrices have different nonzero pattern
>   KSP Object:  (st_)   1 MPI processes
>     type: preonly
>     maximum iterations=10000, initial guess is zero
>     tolerances:  relative=1e-08, absolute=1e-50, divergence=10000
>     left preconditioning
>     using NONE norm type for convergence test
>   PC Object:  (st_)   1 MPI processes
>     type: redundant
>       Redundant preconditioner: First (color=0) of 1 PCs follows
>       KSP Object:      (st_redundant_)       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:      (st_redundant_)       1 MPI processes
>         type: lu
>           LU: out-of-place factorization
>           tolerance for zero pivot 2.22045e-14
>           matrix ordering: nd
>           factor fill ratio given 5, needed 2.99686
>             Factored matrix follows:
>               Mat Object:               1 MPI processes
>                 type: seqaij
>                 rows=289, cols=289
>                 package used to perform factorization: petsc
>                 total: nonzeros=5733, allocated nonzeros=5733
>                 total number of mallocs used during MatSetValues calls =0
>                   not using I-node routines
>         linear system matrix = precond matrix:
>         Mat Object:         1 MPI processes
>           type: seqaij
>           rows=289, cols=289
>           total: nonzeros=1913, allocated nonzeros=5491
>           total number of mallocs used during MatSetValues calls =0
>             not using I-node routines
>     linear system matrix = precond matrix:
>     Mat Object:     1 MPI processes
>       type: seqaij
>       rows=289, cols=289
>       total: nonzeros=1913, allocated nonzeros=5491
>       total number of mallocs used during MatSetValues calls =0
>         not using I-node routines


Once again, do not use the -eps_true_residual option.


> 
>> 
>>> 
>>> 2) Another peculiarity is that `-eps_smallest_real` and `-eps_target 0 -st_type sinvert` return different sets of eigenvalues. 
>> 
>> The matrix from the 2D Laplace operator is positive definite, so both should give the same eigenvalues.
>> 
>>> In the latter case there are degenerate eigenvalues. 
>>> Those are consistent with the results given by ARPACK with shift and invert around 0.
>>> The matrices I sent you originally correspond to the eigenvalues of the 2D Laplace operator on a uniform mesh with 256 cells.
>>> If more refined mesh is used (1024 cells instead of 256), same set with degenerate eigenvalues is returned in both cases.
>>> This is not directly related to SLEPc and is a question out of curiosity.
>> 
>> Some eigenvalues of the 2D Laplacian have multiplicity 2. The default SLEPc solver may not return the two copies of the eigenvalue, because the second copy appears much later and the iteration stops as soon as nev eigenvalues have been computed.
> 
> i see… 
> 
> so technically, one could try asking for more eigenvectors to resolve those degenerate eigenvalues?

Yes, or force more restarts by setting a small value of ncv or mpd.

Jose


> 
>> 
>>> 
>>> 3) It is not stated in the documentation explicitly, but I suppose the residual discussed in ‘SolverControl’ section 
>>> always corresponds to the direct problem (even in case when, say, shift-and-invert is applied) and so 
>>> EPSComputeRelativeError and EPSComputeResidualNorm?
>> 
>> The convergence criterion is applied to the transformed problem (shift-and-invert).
> 
> understood, thanks.
> 
> 
> Regards,
> Denis.



More information about the petsc-users mailing list