In the two-step CASSCF procedure, one begins with a set of guess orbitals, solves the full CI problem in the active space, determines the gradient for orbital rotations, takes a step in orbital rotation (theta) space down the gradient direction (i.e., obtains new guess orbitals), and repeats the process iteratively until convergence. To allow DIIS interpolation, one can express the current set of guess orbitals as the result of the multiplication of a set of Givens rotation matrices by a matrix of ``reference'' orbitals ( , see [4]). The rotation angles which define the unitary transformation U (a product of Givens rotation matrices) comprise a vector of parameters, p.
In this case, one can define the error vectors as the differences
between subsequent sets of orbital rotation angles, or one could also
reasonably choose the orbital gradient vector. In my DETCAS
program, the regular theta step is determined using a Newton-Raphson
approach with an approximate, diagonal orbital Hessian. This is
equivalent to scaling the orbital gradient to a new coordinate system.
Since the step in theta space is just the scaled gradient, the scaled
gradient is the same as the difference between successive theta
vectors (apart from a sign) before the DIIS procedure starts.
However, I have found it much better to associate the gradient vector
with the next iteration's theta vector, not with the theta
vector from which it was computed. In other words, it is best to
change eq. (1) to the following:
(11) |
Another general consideration is that one does not want to add an interpolated vector to the list of vectors unless it contains some new character to add to the subspace. Otherwise, linear dependencies can result.
An outline of my DIIS procedure for the DETCAS program is given below: