How does Psi4 accelerate the convergence of the CPHF equations in the computation of E20indr?

Hello! I’ve been reading the code for the coupled induction subroutine (libsapt_solver/ind20.cc, function SAPT20::ind20rA_B), and it looks like you’re using some kind of convergence acceleration method, since it’s clearly not just plain iterations over equation (43) in [Hohenstein:2011:174107]. Can you please provide more information about this method?

It is effectively a conjugate gradient method to accelerate the Ax=b equations. Some codes use DIIS or similar, but CG seems to perform particularly well here.

Thanks for your response! Indeed, it works very well, cutting down the number of required iterations to about a fourth from the brute force approach I thought Psi4 was using by reading [Hohenstein:2011:174107] (it is also stated this way in Hohenstein’s thesis, so perhaps this feature was added later?). Has this been mentioned in any publications? I think it should be stated somewhere.

We typically do not note these kinds of details anywhere as the Ax=b solvers change fairly readily (typically in the Krylov subspace family) and doesn’t seem to particularly be of general research interest as they are well covered by linear algebra courses. We normally note this kind of thing in something like Psi4NumPy as it’s a practical example of how to write quantum chemistry.

See here. As a note we would love help on the Psi4NumPy project to finish fleshing out this practical guide to quantum chemistry.