--------------------------------------------------------------------

imthd algorithm parameters in line #6 of pescan.input

--------------------------------------------------------------------

1 (H-Eref)^2 CG niter, nline, iprec, idump

2 (H-Eref) CG; Eref=0 niter, nline, iprec, idump

3 (H-Eref)^2 LOBPCG niter, iprec, ideflt, iblock

4 (H-Eref)^2 PARPACK niter, ncv

5 (H-Eref) PARPACK niter, ncv

6 (H-Eref)^2 PRIMME method, ncv_min, ncv_max, nmatvec

7 (H-Eref) PRIMME method, ncv_min, ncv_max, nmatvec

--------------------------------------------------------------------

- imthd=1: Preconditioned Conjugate Gradient
(PCG) algorithm, where
*niter*is the maximum number of iterations,*nline*is the number of line mimizations per iteration,*iprec*sets the preconditioner to be used (if*iprec*is different from 1 the preconditioner is set to the identity matrix), and*idump*indicates whether the wavefunctions will be saved (if*idump*is equal to 1 the wavefunctions are dumped to disk in G-space). Usually,*niter*should be set to 5 to 10, and to*nline*100. However, these values should be increased if more accurate results are desired. - imthd=2: PCG, but the smallest eigenstates are computed. In this case,
*nline*should be set to at least 10. Again, the values of*niter*and*nline*should be increased if more accurate results are desired. - imthd=3: Locally Optimal Block
Preconditioned
Conjugate Gradient (LOBPCG) algorithm (in-house implementation), where
*niter*is the maximum number of iterations,*iprec*sets the preconditioner to be used (if*iprec*is different from 1 the preconditioner is set to the identity matrix),*ideflt*activates deflation (if*ideflt*is equal to 1 do special deflation), and*iblock*is the block size. In the current implementation of Pescan we recommend*ideflt*=1 and*iblock*=1. - imthd=4: Implicit restarted Arnoldi (IRL) implemented in PARPACK, where
*niter*is the maximum number of restarts, and*ncv*is the maximum basis size. In the current implementation of Pescan we recommend*ncv>=3*mx*(in line 4 of pescan.input) and*niter=10***ncv.* - imthd=5: Similar to imthd=4 but IRL is applied to the unfolded spectrum.
- imthd=6: Variants of the (Jacobi-)Davidson algorithms implemented in PRIMME (PReconditioned Iterative MultiMethod Eigensolver), where
*method*sets the algorithm to be used (= 1, DEFAULT_MIN_TIME; = 2, DEFAULT_MIN_MATVECS, = 0: data for PRIMME is read from the file escan.input.primme, therefore enabling an advanced use of PRIMME's functionalities),*ncv_min*is minimum basis size for restarting,*ncv_max*is the maximum basis size allowed in each iteration, and*nmatvec*is the maximum number of matrix vector multiplications. Based on our tests, we recommend*method=2*,*ncv_min=**mx*,*ncv_max=3***ncv_min*, and*nmatvec=**10*ncv_max.* - imthd=7: Similar to imthd=6 but PRIMME is applied to the unfolded spectrum.

For the systems we have studied:

- PCG and
LOBPCG showed to be reliable for finding the states closest to the band
gap. However, they may "stagnate", i.e.they may fail to make
approximate
eigenpairs
converge to the desired accuracy.
- IRL converges slowly for most folded spectrum computations. In unfolded computations with the original operator, IRL sometimes shows mis-convergence (that is, convergence to the wrong eigenvalues, resulting in relevant eigenpairs being missed).
- The
GD+
*k*(Olsen algorithm) method from PRIMME (that is option PRIMME MIN_MATVECS) is reliable for both FS and unfolded computations. However, more research has to be done in order to improve its performance for unfolded computations. Therefore, for performance purposes, we recommend*imthd=6*together with*method=2.*

Based on the systems we have studied and the number os eigenstates we have computed, we recommend the default PRIMME MIN_MATVECS, with the restart size close to the number of required eigestates, and a basis size equal to 2 or 3 times the restart size. Also, for large systems, it is important to set tol to a smaller value that would be normally set for PCG or LOBPCG.

*Important considerations about the tolerance (in line 4 of pescan.input):*