An alternative to level-shifting for cases exhibiting small (or zero) HOMO/LUMO gaps is the pseudo-fraction occupation number (pFON) approach,799 which corresponds to a “smearing out” of the occupation numbers at the HOMO level. Often, this improves the stability and accelerates the convergence by eliminating the discontinuous occupancy changes (from one SCF iteration to the next) that can arise in small-gap systems. Essentially, more than one electron configuration is allowed during the same orbital optimization, with fractional occupancies. This is formally equivalent to a finite-temperature formalism.
The pFON method introduces a density matrix
with occupancies that can be fractional, whereas for a conventional SCF calculation either (occupied) or (virtual). In pFON, the occupation numbers follow a Fermi-Dirac distribution,
where is an SCF eigenvalue (orbital energy) and is a temperature. In Q-Chem’s implementation, the Fermi energy is set to . To ensure conservation of the total number of electrons, the pFON approach re-scales the occupation numbers so that .
There are several parameters to control the electronic temperature throughout a pFON SCF run. The temperature can either be held constant at finite temperature ( = ), or the system can be cooled from a higher temperature down to the final temperature. So far, no zero-temperature extrapolation has been implemented.
$molecule 0 1 Pt -0.20408 1.19210 0.54029 Pt 2.61132 1.04687 0.66196 Pt 0.83227 0.03296 -1.49084 Pt 0.95832 -1.05360 0.92253 Pt -1.66760 -1.07875 -1.02416 $end $rem METHOD pbe MAX_SCF_CYCLES = 200 ECP fit-lanl2dz SYMMETRY false OCCUPATIONS 2 ! pseudo-fractional occupation numbers FON_NORB 10 ! 10 fractionally occupied orbitals above and below the Fermi level FON_T_START 1000 ! starting electronic temperature: 1000 K FON_T_END 0 ! final electronic temperature: 0 K FON_T_METHOD 2 ! constant cooling scheme FON_T_SCALE 25 ! reduce the temperature by 25 K per cooling step FON_E_THRESH 5 ! freeze occupation numbers once DIIS error is 10-5 GEN_SCFMAN false $end