Author Topic: scfdamp  (Read 2446 times)


  • Jr. Member
  • **
  • Posts: 19
  • Karma: +0/-0
« on: January 25, 2014, 01:34:01 pm »
Dear all,
I have a question about scfdamp. If I choose $scfdamp 0.7, does this means that I take 30% of the new Fock-operator +70 old Fock-operator or does this means I take 100% new Fock-operator +70% old Fock-operator?

I am confused, because it is possible to choose a scfdamping above 1.0.



  • Global Moderator
  • Sr. Member
  • *****
  • Posts: 410
  • Karma: +0/-0
Re: scfdamp
« Reply #1 on: January 28, 2014, 11:34:42 am »
Hi Turboooo,

DIIS is a bit more complicated than just taking a linear combination of new and old Fock matrices. What DIIS does is to extrapolate a guess for a good density which can be used in the next SCF iteration. For that it calculates so called error vectors of previous steps of the SCF procedure, linearly combines them and minimizes the result. There are several different ways to define the error vector, see the Turbomole documentation or (search for scfdiis) or search the internet for DIIS and Pulay.

DIIS will extrapolate new coefficients, but how good this guess is depends on the 'history' of the previous SCF steps.
A high value of $scfdamp will follow DIIS only a very short way, a low value of the damping factor will trust the new extrapolated coefficients. If you start from guess orbitals, the DIIS error will be much larger than later on, when your energy is almost converged. Therefore $scfdamp starts with a higher value and reduces it in each step if the energy goes down (plus some other criteria) or increases the damping factor otherwise.

Typical cases where $scfdamp should be set to high or very high numbers at the beginning (5, 10 20, ...) is whenever the start orbitals are bad or when the occupation changes during the SCF procedure - which can be the case if you use $fermi.


« Last Edit: January 29, 2014, 10:04:43 am by uwe »