Scf level shift?

Level-shifting of the virtual orbitals seems to have been implemented for MSSCF, OCC, and other modules, but not for the SCF module as far as I can tell. In my experience with other programs this is more useful in converging the SCF than MOM or damping, though there is a risk of forcing convergence to an excited state. (I have yet to find a case where MOM or damping actually led to convergence.) Can this feature be implemented in a future release? In the meantime, is there a way to shift the virtual orbitals up in energy via some code in the input file?


If it is implemented for MCSCF, you could maybe do a one-configuration MCSCF and use level-shifting this way.

Not sure if MCSCF can handle a single determinant. Can you post this as an issue in the Psi4 GitHub?

Do you have a quick description of how level shifting is implemented in Molpro?

I don’t have Molpro, but as far as I know level shifting is done by shifting the Fock matrix (MO basis) elements for the virtual orbitals up in energy by the amount specified (something like 0.3 to 0.5 au as a default).

Did you want me to create a pull request for this? I thought only developers could do that…

We are a open source code. Pull requests more than welcome, we usually highlight new developers as well in various ways.

We are happy to give pointers as well if you are unsure how to start!

Second that. And if implementing the levelshift is clear to you, but the logic around the many convergence accelerators is too daunting in C++, be aware that as soon as 1.2 is released, we’re moving SCF iteration management to python, so it’ll be much easier to build a smart SCF driver.

Level shifts are implemented in Implement level shifts by susilehtola · Pull Request #2225 · psi4/psi4 · GitHub