next up previous
Next: Kpoint grid Up: Setting plane wave code Previous: Exchange correlation functional

Diagonalization

The following two variables for the energy cutoffs are mandatory, and have no default values. All energies are in Rydbergs.

energy_cutoff             Cutoff for the Hamiltonian matrix
submatrix_energy_cutoff   Cutoff for the submatrix to be used for the generation of the starting guesses.

Example:

energy_cutoff 70
submatrix_energy_cutoff 10

Set the energy cutoffs to be 70 and 10 Rydbergs.

Advice: take the submatrix cutoff about 1/5 of the energy_cutoff, but never larger than about 10 Rydbergs. The generation of the starting guess is not optimized, and can become very time consuming if the submatrix is too large. Also, the memory requirements increase rapidly wit submatrix_energy_cutoff, because the full submatrix is kept in memory.

The accuracy of the diagonalization scheme is determined by the keyword accuracy_diag. The diagonalization stops when the gradient (i.e. the residual) is below accuracy_diag. The accuracy of the eigenvalues is normally at least as good, often an order of magnitude better.

Example:

accuracy_diag 1e-10

(requires high accuracy)

Default: accuracy_diag 1e-12

Advice: The energy is normally converged to 1e-6 only, so an accuracy of 1e-7 is often sufficient. However, to get the forces accurate to n digits, one should require accuracy_diag to be less than 1e-(2n). For example if you set relax_accuracy to 1e-4, you must set accuracy_diag to 1e-9 or smaller.

The variable max_iter_diag determines when to stop iterating on the trial eigenvectors, if no convergence is achieved. This variable should be set such that during the first two or three self-consistent iterations, the diagonalization is stopped by max_iter_diag. There is no point in converging the eigenvectors for a Hamiltonian which is not nearly close to self-consistency.

Example:

max_iter_diag 30

Default: max_iter_diag 40

With the variable bandgap, you can set the expected bandgap of an insulator in eV. In this case, only the minimum number of bands are computed, and the diagonalization scheme uses this bandgap for performance optimization. If you screw up bandgap, the performance can get terrible, and the diagonalization routine can bomb out, so be careful.

In case of matrix diagonalization bombouts, try to increase: diagsafety 2.0 Default: diagsafety 1.0

You can also try randomizing the starting guess by a line like:

randomize_diag_start_guess 1.0

Default: randomize_diag_start_guess 0

For the direct energy minimization, it is often useful to checkpoint the wave functions and charge density during the iteration. This can be done with

checkpoint_emin frequency

Example:

checkpoint_emin 50 writes the wave functions to disk every 50 iterations. By default, no checkpointing is done.


next up previous
Next: Kpoint grid Up: Setting plane wave code Previous: Exchange correlation functional

Andrew Canning
Wed May 13 15:17:45 PDT 1998