[Pw_forum] Eigenfunctions in PWSCF
marzari at MIT.EDU
Tue Jan 15 10:03:58 CET 2008
Dear Min Seung,
it's the eigenvalues that are real, not the eigenvectors. Consider
the kinetic energy operator - its eigenvectors are plane waves, that
are not real.
Now, in periodic boundary conditions, we usually choose eigenstates of
the periodic Hamiltonian that are also eigenstates of the translation
operator - i.e. they have the Bloch form u_nk(r)exp(ikr), with u_nk(r)
periodic. u_nk(r) satisfies the Schroedinger-like equation with the
k-dependent Hamiltonian [-h^2/2m (del+ik)^2+V(r)] u_nk = e_nk u_nk.
From this, you see that if u_nk is a solution at a k-point k, its
complex conjugate is a solution at the k-point -k, i.e.
u_nk(r)=(u_n-k(r))* . Actually, you have the gauge freedom of
multiplying the eigenvector by a phase factor, so the equality
is true only a part from a phase factor (if you were to use a
conjugate gradient code, you'd infact find a random phase factor,
at selfconsistency, between u_nk and (u_n-k)* ).
These u_nk are what is stored in evc (I hope - I'm not
that familiar with the innards of PWscf), in their *plane wave
expansion*. Only at Gamma you have that the eigenstates can be chosen as
real (since u_nk(r)=(u_n-k(r))*, and Gamma=-Gamma) - still, this would
mean that u_n0(r) is real, but not the coefficients of its plane wave
expansion - these would satisfy c_G^nk=c(_-G^nk)*. This symmetry can
be exploited, and is, in CP, and in the Gamma version of CP.
The distribution should have some notes on FFTs that would explain
your second question on the double FFT - for Gamma only
calculations, the code lumps together two bands in a single
Note that if u_n0(r) has inversion symmetry, then the coefficients
of the plane wave expansion are also real - albeit this has not been
exploited, afaik, since early calculations (1991-1992) with the
Cambridge CASTEP codes.
Min Seung Kyu wrote:
> Dear users and developers,
> I have a question about eigenfunctions in PWSCF codes.
> I looked at PWSCF source files and I found that the 'evc' variable is
> KS eigenvectors in G-space, right?
> Because Hamiltonian matrix H(G,G') is hermitian, 'evc' should be real.
> When I print out 'evc', however, 'evc' contains imaginary parts.
> For example, when I run 'co.rx.in' (example03 folder), I got these values:
> DBLE(evc(1:4,1)) 0.186884 0.154551 0.154551 0.142085
> AIMAG(evc(1:4,1)) 0.000000 0.000000 0.000000 -0.048560
> DBLE(evc(1:4,2)) -0.024799 -0.021751 -0.021751 -0.068645
> AIMAG(evc(1:4,2)) 0.000000 0.000000 0.000000 -0.145963
> DBLE(evc(1:4,3)) 0.000000 0.000000 0.000000 0.000000
> AIMAG(evc(1:4,3)) 0.000000 -0.005668 0.152298 0.000000
> DBLE(evc(1:4,4)) 0.000000 0.000000 0.000000 0.000000
> AIMAG(evc(1:4,4)) 0.000000 -0.152298 -0.005668 0.000000
> DBLE(evc(1:4,5)) -0.299154 -0.185970 -0.185970 0.011252
> AIMAG(evc(1:4,5)) 0.000000 0.000000 0.000000 0.168998
> ( I added 'WRITE(*,*) evc(1:4,ibnd)' in 'sum_band.f90'. )
> What is the problem?
> Thank you in advance.
> Sincerely, Min.
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