The use of a variable integral threshold, operating for the first few cycles of an SCF, is justifiable on the basis that the MO coefficients are usually of poor quality in these cycles. In Q-Chem, the integrals in the first iteration are calculated at a threshold of (for an anticipated final integral threshold greater than, or equal to ) to ensure the error in the first iteration is solely sourced from the poor MO guess. Following this, the integral threshold used is computed as
where the DIIS error is that calculated from the previous cycle, VARTHRESH is the variable threshold set by the program (by default) and is the temporary threshold used for integral evaluation. Each cycle requires recalculation of all integrals. The variable integral threshold procedure has the greatest impact in early SCF cycles.
In an incremental Fock matrix build,
J. Comput. Chem.
(1982), 3, pp. 385. , 230 J. Comput. Chem.
(1986), 7, pp. 274. , 417 J. Comput. Chem.
(1989), 10, pp. 104. , 976 J. Chem. Phys.
(1997), 106, pp. 9708. is computed recursively as
where is the SCF cycle, and J and K are computed using the difference density
Using Schwartz integrals and elements of the difference density, Q-Chem is able to determine at each iteration which ERIs are required, and if necessary, recalculated. As the SCF nears convergence, becomes sparse and the number of ERIs that need to be recalculated declines dramatically, saving the user large amounts of computational time.
Incremental Fock matrix builds and variable thresholds are only used when the SCF is carried out using the direct SCF algorithm and are clearly complementary algorithms. These options are controlled by the following input parameters, which are only used with direct SCF calculations.
$comment HF/3-21G single point calculation on a large molecule read in the molecular coordinates from file $end $molecule read base_pair.inp $end $rem METHOD HF Hartree-Fock BASIS 3-21G Basis set INCFOCK 5 Incremental Fock after 5 cycles VARTHRESH 3 1.0d-03 variable threshold MAX_SCF_CYCLES 100 $end