> 
> 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

> 
>> 
>> 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?

> 
>> 
>> 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.

Reply via email to