Page 1 of 1
Eigenvector residuals?
Posted: Wed Nov 10, 2010 7:42 pm
by jmoussa
Is there any way to compute/output the eigenvector residuals? This is useful because eigenvectors can converge at different rates and it isn't necessarily worth it to wait for all of them to converge (for instance, many codes have "buffer" eigenvectors that are not tested for convergence). The simple work-around is to print the eigenvalues several times during the diagonalization process and use the convergence of eigenvalues as an indirect metric of eigenvector accuracy. It would be nice, but non-essential, to have the more elegant solution (residuals).
Re: Eigenvector residuals?
Posted: Thu Nov 25, 2010 12:24 am
by fgygi
As of release 1.52.2, the only way to check convergence of the eigenvectors is indeed to monitor the eigenvalues. There is also the <eigenvalue_sum> value that helps checking convergence when empty states are used. So yes, it would be useful to be able to trace eigenvectors' residuals. This is something that is being presently considered in order to implement a tolerance criterion for convergence of the ground state (instead of the fixed number of iterations currently given to the "run" command). The relevant issues are: 1) should the residuals be printed for each eigenvector (potentially a lot of output) or only some sum of norms (Frobenius norm of the subspace correction, infinity norm, etc. ?) 2) What is the natural scale of the residual, or in other words, how does the residual of a vector grow with system size and with basis set size, and how should it be normalized? It would be nice to have a definition of residual such that, say, a value of 1.e-4 means the same level of quality on systems of different sizes or using different values of Ecut (especially if we want to use that number to determine when to stop iterating). We don't have a good definition at this point, but we are open to suggestions.