We have some number of old density matrices D*k* - 1,*D**k* - 2 etc, and want to write the new density matrix as
align: | center |
---|---|
alt: | D_k = \Delta D + \sum_{i=1}^N c_i D_{k-i}, |
D_k = \Delta D + \sum_{i=1}^N c_i D_{k-i},
where Δ*D* will be sent to TWOFCK and should give efficient screening. Currently we are minimizing the Frobenius norm (sum of squares of elements) of Δ*D*, using one old density matrix. In the general case we have to solve S**c = y, where
S*i**j* = (D*k* - *i*,*D**k* - *j*) and y*i* = (D*k*,*D**k* - *i*).
Here “(cdot,\cdot)”(FIX) is the inner product between the D “vectors”. However, the use of the Frobenius norm gives the larges weight to the large elements of Δ*D*. This is not really what we want, because we care more about producing as many small elements in Δ*D* as possible. Therefore we can imagine to introduce a metric matrix M, so that
align: | center |
---|---|
alt: | (A,B) = \sum_{ij} A^*_{ij}M_{ij}B_{ij}, |
(A,B) = \sum_{ij} A^*_{ij}M_{ij}B_{ij},
and set M to emphasize the elements that have a chance of being made small. In practice one could imagine
Doing this for the water molecule SCF in test 1 shrinks the elements in the final iteration Δ*D* by four orders of magnitude. In this case I used five old density matrices. Just using a large number of old densities without modifying the metric did very little. A simple test inside Dirac shows that it is not enough to use one historical density matrix with a modified metric. The reason is that at the end of the SCF the change in density is almost orthogonal to the last density matrix.
It would also be possible to give larger weight to certain elements of Δ*D*, for example those that come from different integral blocks or centers.