eigensolver keywords

Eigensolver parameters

eigensolver.algo

Determine the algorithm used for real space diagonalization.

type: string

default: 'cfsi'

allowed: 'cfsi','lobpcg'

example: eigensolver.algo = 'lobpcg'

eigensolver.algoproj

Determine the algorithm used for projected (dense) eigenvalue problems; required by ScaLAPACK; ‘DSYEV’,’DSYEVD’,’DSYEVR’,’DSYEVX’,’DSYGV’ only used in LCAO calculations; if ‘DSYEV’, use the overlap matrix factor to tranform the generalized eigenvalue problem into a standard eigenvalue problem, find all eigenpairs, transform eigenpairs back to the non-orthonormal basis; if ‘DSYEVD’, use the overlap matrix factor to tranform the generalized eigenvalue problem into a standard eigenvalue problem, find all eigenpairs by the divide-and-conquer method, transform eigenpairs back to the non-orthonormal basis; if ‘DSYEVR’, use the overlap matrix factor to tranform the generalized eigenvalue problem into a standard eigenvalue problem, find the occupied eigenpairs by the MRRR method, transform eigenpairs back to the non-orthonormal basis; if ‘DSYEVX’ use the overlap matrix factor to tranform the generalized eigenvalue problem into a standard eigenvalue problem, find the occupied eigenpairs, transform eigenpairs back to the non-orthonormal basis; if ‘DSYGV’ find all eigenpairs of the generalized eigenvalue problem; if ‘DSYGVX’ find occupied eigenpairs of the generalized eigenvalue problem; ‘DSYGV’ is most robust and stable in our experience while ‘DSYGVX’ is fastest.

type: string

default: 'DSYGVX'

allowed: 'DSYEV', 'DSYEVD', 'DSYEVR', 'DSYEVX', 'DSYGV', 'DSYGVX'

example: eigensolver.algoproj = 'DSYEVD'

eigensolver.adapCFD

Use adaptive Chebyshev filtering degree; development option, use at your own risk.

type: scalar

default: false

allowed: true,false

example: eigensolver.adapCFD = false

eigensolver.bandi

Index range of the energy bands. If eigensolver.bandi = [il,iu] is defined, the eigensolver will find the eigenvalues and/or eigenvectors with an index between il and iu. il <= iu is assumed. In real space, il is forced to be 1. iu is generally chosen as nval2+max(16,ceil(natom/4)), where nval2 is the number of valence bands (accounting for spin degeneracy) and natom is the number of atoms.

type: array

size: [1,2]

example: eigensolver.bandi = [430,470]

eigensolver.emptyBand

Number of bands included in the calculation in addition to the number of valence bands (nval2). If eigensolver.emptyBand is set and eigensolver.bandi isn’t set, then eigensolver.bandi = [1,nval2+st.emptyBand].

type: scalar

example: eigensolver.emptyBand = 47

eigensolver.xband

Number of buffer bands included in the calculation. This keyword is only relevant if eigensolver.algo = ‘cfsi’ and when performing a non-self-consistent calculation. Simply put, if the required bands (eigensolver.bandi) are well separated from the non-required bands, the later converge more rapidly. The introduction of buffer bands on top of the required bands creates this separation. Note, however, that using buffer bands comes at a cost. A value around natom/4 is usually profitable, where natom is the number of atoms.

type: scalar

default: 0

example: eigensolver.xband = 128

eigensolver.init

Determine the procedure to initialize the occupied Kohn-Sham subspace; only referenced if lcao.status = false (real space calculation); if ‘lcao’ RESCU solves the Kohn-Sham equation once using atomic orbitals and then pursues in real space; if ‘sin/cos’ RESCU uses sines and cosines for an initial basis; if ‘sin/cos/rr’ RESCU uses sines and cosines an performs the Rayleigh-Ritz procedure for an initial basis; if ‘rand’ RESCU uses a randomly generated initial subspace.

type: string

default: 'lcao'

allowed: 'lcao','sin/cos','sin/cos/rr','rand'

example: eigensolver.init = 'lcao'

eigensolver.maxit

Determine the maximal number of Hamiltonian-vector products per vector per self-consistent step; if texttt{eigensolver.algo = ‘cfsi’} then it corresponds to the degree of the Chebyshev polynomial. If a non-self-consistent calculation is performed, then the default is to use 1000 iterations since convergence must be guaranteed.

type: scalar

default: 15

example: eigensolver.maxit = 15

eigensolver.maxRestart

Number of restarts allowed in a self-consistent cycle. The default is to use no restart. For non-self-consistent calculations, this corresponds to the total number of restarts. The default is then 4.

type: scalar

default: 1

example: eigensolver.maxRestart = 2

eigensolver.nsym

eigensolver.nsym give you control over the number of eigenvectors that are calculated at once by the eigensolver. This is relevant for LOBPCG which requires many workspaces, and hence eigensolver.nsym may be crucial in limiting the memory requirements. The default value is equivalent to the number of bands included in the DFT calculations. It is suggested to set eigensolver.nsym if memory is scarce or if the number of bands exceeds 200.

type: scalar

example: eigensolver.nsym = 64

eigensolver.orthogonalize

Determine whether to explicitly orthogonalize before the Rayleigh-Ritz procedure.

type: scalar

default: false

allowed: true,false

example: eigensolver.orthogonalize = false

eigensolver.precond

Eigensolver preconditioning method. This is most important when using LOBPCG. To turn off preconditioning, set eigensolver.precond = -1. eigensolver.precond = 3 is the preconditioner of Teter, Corning and Payne.

type: scalar

default: 4

allowed: [-1,0,1,2,3,4,5,6,7]

example: eigensolver.precond = 4

eigensolver.pwmode

Determine whether to store the wave-functions using their plane-wave coefficients.

type: scalar

default: false

allowed: true,false

example: eigensolver.pwmode = false

eigensolver.tol

Maximal tolerance for the eigenvector residuals. When doing a self-consistent calculation, the eigensolvers use the minimum of eigensolver.tol and dRho/10.

type: scalar

default: 0.1

example: eigensolver.tol = 5e-2

eigensolver.ubmaxit

Determine the number of Hamiltonian products used to estimate the spectrum upper bound using Lanczos algorithm.

type: scalar

default: 12

example: eigensolver.ubmaxit = 10