Author Topic: How to solve SCF convergence problems  (Read 33897 times)


  • Global Moderator
  • Hero Member
  • *****
  • Posts: 560
  • Karma: +0/-0
How to solve SCF convergence problems
« on: April 25, 2008, 04:20:45 PM »
Convergence settings and hints for SCF convergence in Turbomole

  • set the maximum number of SCF iterations with $scfiterlimit
           Remember that the orbitals are being changed during the energy calculation,
           so if SCF did not converge, restarting dscf or ridft will continue the job.

  • use a higher DIIS damping  ($scfdamp),
          We recommend to start with a damping factor between 5 to 15.
          Turbomole will automatically adapt that value during the SCF
          iterations and decrease or increase it depending on the convergence

          If that does not help, try:

              a) set the damping factor to a high value like 15, and limit
                 the number of SCF iterations to, say, 20.
                 Delete DIIS scratch files after that run (files dens, ddens, errvec, oldfock).

              b) after that, reduce the damping factor to something like
                 4 and continue with $scfiterlimit of 300 (or so).

            -> you might have to repeat step a) a few times with a slowly decreasing
               damping factor before continuing with step b).

            You can check the convergence graphically (if gnuplot is installed)
            by calling
                 cgnce <output-filename>
            If the energy starts to oscillate, the damping factor is too high...

  • use another orbital shift ($scforbitalshift)
          make sure that $scforbitalshift is set to 'automatic 0.1' and not
          'closed shell'. closed shell used to be the (very) old default, but
          the automatic setting is much more stable.

  • use the converged orbitals from a calculation with smaller basis set:

          - first do the calculation in a smaller basis set (SVP, TZVP)

          - next, enter on the command line
              cpc bigbas
            this will create a new directory called bigbas and copies all input
            files in there
          - call define, change the basis set and you will get in the menu where
            you can generate start orbitals. Do NOT call 'eht' here, instead enter:
              use ../control
            this will read in the files of your first calculation and define
            will project the converged orbitals to the new basis set

          - continue with define and enter the ri sub-menu if you do RI-DFT
            calculations to assign auxiliary basis sets to your new basis set

          - finally, just start the energy calculation.

  • if you do not have to stick to a specific multiplicity, try $fermi to do
          a pseudo-Fermi smearing for the occupation numbers. This will often give
          very good occupation numbers (and the spin state with the lowest energy),
          or sometimes half filled orbitals which indicates multi-reference
          cases or Jahn-Teller effects.