[Pw_forum] How to calculate unoccupied states using cp.x

Nicola Marzari marzari at MIT.EDU
Thu Sep 13 01:39:51 CEST 2007

> Would someone please tell me if it is possible to obtain correct 
> eigenvalues of unoccupied states using cp.x? If yes, how?
> P.S., I am using espresso-3.2.
> Thank you very much.
> Best regards,
> Hongjun Xiang

I haven't done this in while, but, broadly speaking, these should
be the two possibilities (I suppose you are looking at an insulator -
actually, let's consider the water molecule - i.e. 8 electrons, four

1) You do a ground state calculation with CP, using 4 bands. You get
the right ground state, the right occupied eigenvalues. You restart
the code (option 'nscf') with a larger, arbitrary number of states.
In 'nscf' the charge density is not updated (so your Hamiltonian
is frozen forever), and you minimize with damped CP dynamics
a total energy functional in which the Hamiltonian is the frozen
one above, and in which both the occupied and the unoccupied states are
fully occupied. This gives you correctly both the occupied and
unoccupied eigenstates and eigenvalues (if you think at it, you
are using the correct H[frozen rho]|psi_i> to evolve all the psi_i
to the overall ground state). In standard CP wouldn't work basically
for the same reasons you cannot deal with a metal. The ortho constraint
mixes all the states in the manifold together, and there is no
dynamics on the occupation numbers (or matrix), while the system
is not invariant for a unitary transformation in the extended
manifold (empty + full).

2) a second option, for which you need the latest CVS, is to
use CP in "ensemble-DFT" mode (there is a PRL of ours from 1997, and
Paolo Umari has recently finished coding all the various parts).
Basically, this is composed of a conj-grad minimization on the
orbitals (this can also be used for pure insulators, and it is
faster in reaching the ground state than damped dynamics) and an
optimization of the occupation matrix. In practice, it evolves orbitals 
and occupations at the same time, so it would allow you to do a single
calculation with filled and empty states at the same time. For an
insulator, it is probably not worth, and reciped 1) is more efficient.
For a metal, it is the only possibility, although it will still
struggle (I think) to give very high, completely empty orbitals 
correctly (since those do not affect the total energy you are
minimizing - we have a precondition on the occupations to speed
things up). Note that only the 'cs' smearing option works, at this
stage, and the code requires a bit of insider infos to work smoothly.
We'll improve the documentation.

Bottom line - for an insulator, especially if you need a lot of
empty states, use recipe 1). For a metal, use recipe 2) to converge
to the ground state. If you need only few empty orbitals, 2) will 
probably give them correctly already. If you need a lot, use 2)
with only a few empty ones, and then run 1) after 2), with option
'nscf' and a lot of states (that will be all filled up, and
optimized properly).

Best luck - let us know,


Prof Nicola Marzari   Department of Materials Science and Engineering
13-5066   MIT   77 Massachusetts Avenue   Cambridge MA 02139-4307 USA
tel 617.4522758 fax 2586534 marzari at mit.edu http://quasiamore.mit.edu

More information about the users mailing list