Skip to Content.
Sympa Menu

forum - Re: [abinit-forum] a bug in GW code (cchi0q0.F90)?

forum@abinit.org

Subject: The ABINIT Users Mailing List ( CLOSED )

List archive

Re: [abinit-forum] a bug in GW code (cchi0q0.F90)?


Chronological Thread 
  • From: Xavier Gonze <gonze@pcpm.ucl.ac.be>
  • To: forum@abinit.org
  • Subject: Re: [abinit-forum] a bug in GW code (cchi0q0.F90)?
  • Date: Sat, 24 Mar 2007 11:22:47 +0100

Dear Matteo and Fabien,

One should not forget that the goal is to compute < QP_i | r | QP_j >, and
not <QP_i | [\Sigma , x] | QP_j > .

So, if one knows all the < KS_i | r | KS_j >, one can derive the
< QP_i | r | QP_j > by using the proper transformation matrix from the | KS >
to the | QP >.

Xavier

On 23 Mar 2007, at 18:01, Matteo Giantomassi wrote:

On Fri, 2007-03-23 at 15:00 +0100, Fabien Bruneval wrote:
Actually Matteo, the implementation of the correct commutator for
self-consistent GW could be done in the following way:

First, calculate the commutator on the KS basis set (as usual)
and then, rotate them using the unitary matrix that transforms KS
wavefunctions into GW wavefunctions.


Hi Fabien,

Maybe I dind't understand well, but if you use the unitary matrix to
rotate the matrix elements, you get the same operator but in a
different representation, schematically:

<KS_i | [ H_KS , x] | KS_j > ==> <QP_i | [H_KS ,x ] | QP_j >,

while one should evaluate

<QP_i | [\Sigma , x] | QP_j >

which requires the knowledge of \Sigma(r, r') or equivalently
\Sigma_{G,G'} (q).

It's not so clear to me that these two quantites are equal, but maybe
I'm missing something.

Bye
Matteo

By now, we are doing the opposite: we rotate first the wavefunctions
KS->GW and then we calculate the commutator, which is approximately
right for these wavefunctions.

But I did not feel the need to implement it for all the systems I
studied so far.


fabien



Matteo Giantomassi wrote:
On Fri, 2007-03-23 at 10:19 +0100, Fabien Bruneval wrote:


Hi Deyu!

This is subtle a point, but abinit code is right (as always?!).
Let me explain what the code does:

You want to calculate terms such as < v | r | c >, where v stands for
valence wavefunctions, c for conduction wfs and where r is the position
operator.
The r operator is not periodic, but the bra and ket are. So the easiest
way out is to use the trick:

< v | r | c > = < v | [ H , r ] | c > / (E_v - E_c).

Therefore, the energies in the denominator are the one corresponding to
the Hamiltonian that you have introduced. So far, this Hamiltonian can
be anything, it just needs to have the periodicity of the crystal.

In practice, we have chosen the Hamiltonian that corresponds to the
wavefunctions in the bra and the ket and, as a consequence, the energies
should be consistent with this choice.

To summarize, when you use KS wavefunctions, like in G0W0, scissor+G0W0,
self-consistent GW on the energies-only, the code is perfectly
consistent and you should not change the energies in the denominator!

I have to confess that there is a small inconsistency, when one performs
self-consistent GW calculation on the wavefunctions, because we still
use the commutator of the KS Hamiltonian and not the one of the GW
Hamiltonian. This "approximation" is pretty harmless, since the effect
of the commutator is really small in bulk systems. For nanostructures,
this may require some fix...


Dear all,

I agree with Fabien: it is true that in case of an update of the
wavefunctions in \Chi_0, the treatment is not perfectly consistent since
the code uses quasiparticle energies but without taking into account the
commutator of \Sigma with the position operator x (strictly speacking
one should consider also \Sigma^*, if I'm not wrong).
Anyway using the commutator of the KS hamiltonian should be a good
approximation if the quasiparticle amplitudes are almost equal to the KS
wavefunctions.
Maybe in more problematic systems where the self-energy operator is not
diagonal in the KS basis set, one should use the commutator of \Sigma
with x, but the implementation is not so straightforward. What do you
think?

Best regards
Matteo


If you want a reference on the commutator trick, you can find it in
Baroni and Resta, Phys. Rev. B 33, 7017-7021 (1986).

Bye.

Fabien





deyulu@yahoo.com wrote:

Hello, abinit users:
I think there is a bug in the source code cchi0q0.F90.
When computing polarizability chi0 at long wave length limit (q- >0), the
code uses the quasi-particle energies instead of KS orbital energies.
The quasi-particle energies could be simply KS orbital energies plus a scissor
operator or the output from a previous GW calculation.
In the calculation of the G=0 component using perturbation theory, however, KS orbital energies are used. In order to fix this bug, one should change:

rhotwx(:)=-rhotwx(:)/ediff

to

rhotwx(:)=-rhotwx(:)/egwdiff


Best
Deyu

****************************************************************** *********
Deyu Lu (Ph.D)

190 Chemistry Building
University of California, Davis
One Shields Avenue
Davis, CA 95616
Office phone: (530) 754-9663
Group Webpage: http://angstrom.ucdavis.edu/

****************************************************************** *********













Archive powered by MHonArc 2.6.16.

Top of Page