Difference between revisions of "Self-consistent GW on eigenvalues only"

From The Yambo Project
Jump to navigation Jump to search
 
(42 intermediate revisions by the same user not shown)
Line 1: Line 1:
In this tutorial you will learn how to perform '''self-consistent GW on eigenvalues only''' for G or both G and W. For molecules systems and also for many solids, the G<sub>0</sub>W<sub>0</sub> approach often gives poor results.   
[[File:Evgw.png|thumb|Self-consistent GW]]
In this tutorial you will learn how to perform '''self-consistent GW on eigenvalues only for G or both G and W (evGW)'''. For molecules systems and also for many solids, the G<sub>0</sub>W<sub>0</sub> approach often gives poor results.   
The main reason of this failure is that the DFT  starting point with local or semi-local exchange correlation functionals give a too small gap compared with the experimental one, and a single shot GW is not able to correct this error.  
The main reason of this failure is that the DFT  starting point with local or semi-local exchange correlation functionals give a too small gap compared with the experimental one, and a single shot GW is not able to correct this error.  
In order to overcome this problem a possible solution is to use as starting point a hybrid  functional like [https://en.wikipedia.org/wiki/Hybrid_functional#PBE0 PBE0], [https://en.wikipedia.org/wiki/Hybrid_functional#B3LYP B3LYP],[https://en.wikipedia.org/wiki/Hybrid_functional#HSE HSE] etc..  or to perform a self-consistent GW.
In order to overcome this problem a possible solution is to use as starting point a hybrid  functional like [https://en.wikipedia.org/wiki/Hybrid_functional#PBE0 PBE0], [https://en.wikipedia.org/wiki/Hybrid_functional#B3LYP B3LYP],[https://en.wikipedia.org/wiki/Hybrid_functional#HSE HSE] etc..  or to perform a self-consistent GW.
Line 6: Line 7:
In this tutorial we  will show how to perform self-consistent GW on the eigenvalues only with the Yambo code.<br>
In this tutorial we  will show how to perform self-consistent GW on the eigenvalues only with the Yambo code.<br>


# Generate an input file for a G<sub>0</sub>W<sub>0</sub> calculation as explained in the [http://www.yambo-code.org/wiki/index.php?title=How_to_obtain_the_quasi-particle_band_structure_of_a_bulk_material:_h-BN GW basics tutorial] doing: <br><code> yambo -X p -g n -p p -V qp -F yambo_g0w0_input.in </code>
# Generate an input file for a G<sub>0</sub>W<sub>0</sub> calculation as explained in the [http://www.yambo-code.org/wiki/index.php?title=How_to_obtain_the_quasi-particle_band_structure_of_a_bulk_material:_h-BN GW basics tutorial] doing: <br><code> yambo -X p -g n -p p -V qp -F yambo_g0w0_input.in </code><br> notice that in order to perform self-consistent GW, you have to include all k-points and a reasonable number of valence and conduction bands in the [[Variables#QPkrange|QPkrange]].
# run your first GW calculation doing: <br><code>yambo –F yambo_g0w0_input.in -J G0W0</code>
# run your first GW calculation doing: <br><code>yambo –F yambo_g0w0_input.in -J G0W0</code>
# at the end of the run you will get a quasi-particle file o-G0W0.qp.<br> Now you can read this new quasi-particle band structure and perform another GW.<br>
# at the end of the run you will get a quasi-particle file <span style="color:green">o-G0W0.qp</span>.<br> Now you can read this new quasi-particle band structure and perform another GW.<br>
# copy your gw input in a new file: <br><code> cp yambo_g0w0_input.in yambo_g1w1_input.in </code>
# copy your gw input in a new file: <span style="color:blue"> cp yambo_g0w0_input.in yambo_g1w1_input.in </span>
# modify the <code>yambo_g1w1_input.in</code> to force Yambo to read the previous quasi-particle corrections<br> <code> GfnQPdb= "E < ./G0W0/ndb.QP"</code><br> and<br> <code>XfnQPdb= "E < ./G0W0/ndb.QP" </code><br>
# modify the <code>yambo_g1w1_input.in</code> to force Yambo to read the previous quasi-particle corrections<br> <code> GfnQPdb= "E < ./G0W0/ndb.QP"</code><br> and<br> <code>XfnQPdb= "E < ./G0W0/ndb.QP" </code><br>
# repeat point 1) and 2) for the G1W1, G2W2, etc… until the differences between o-GnWn.qp and o-Gn+1Wn+1.qp are small enough.
# repeat point 1) and 2) for the G1W1, G2W2, etc… until the differences between <span style="color:green">o-GnWn.qp</span> and <span style="color:green">o-Gn+1Wn+1.qp</span> are small enough.


Usually self-consistent GW converges in about 3/4 iterations. Notice that in many molecular systems the self-consistency on the eigenvalues only (evGW) can modify the level orders.
Usually self-consistent GW converges in about 3/4 iterations, see for instance the figure below. Notice that self-consistency on the eigenvalues can modify the energy level orders.
Moreover evGW removes large part of initial dependency of the GW from the DFT functional.
Moreover '''evGW''' removes large part of dependency of the GW results from the DFT functional.<br>


Ff you want to perform self-consistency only on G and not on W you can comment the line:
If you want to perform '''self-consistency only on G''' and not on W comment the line:
<code>#XfnQPdb= "E < ./G0W0/ndb.QP"</code>


<code>#XfnQPdb= "E < ./GW0/ndb.QP"</code>
In general increasing the self-consistency level gives larger band gap: &Delta;<sub>DFT</sub> < &Delta;<sub>GoWo</sub> < &Delta;<sub>GWo</sub>< &Delta;<sub>GW</sub>.


[[File:Qp hbn.png|center| 600px |Self-consistent GW on eigenvalues]]
In this figure we show the convergence of quasi-particle energy in self-consistent GW for both G and W for hexagonal Boron Nitride, see Ref. <ref name=hbn>Artus L. et al. [https://doi.org/10.1002/adpr.202000101 Ellipsometry Study of Hexagonal Boron Nitride using Synchrotron Radiation: Transparency Window in the Far‐UVC]</ref> 
== Convergence and other issues ==


As example you can consider the results on hexgonal-Boron Nitride in ref.<ref>Artus L. et al. [https://doi.org/10.1002/adpr.202000101 Ellipsometry Study of Hexagonal Boron Nitride using Synchrotron Radiation: Transparency Window in the Far‐UVC]</ref>
<span style="color:#FF0000"> Convergence </span>: convergence parameters for the self-consistent GW are the same of the [http://www.yambo-code.org/wiki/index.php?title=Silicon standard GoWo calculation] plus the bands range  [[Variables#QPkrange|QPkrange]] employed for the self-consistency. You should perform some tests increasing the bands range and see if you converge to the same result. Notice that at each iteration the GW correction is fitted and applied also to the bands not included in the bands range. Do not use non-continuous bands/k-points range this could give wired results and the code does not check against these errors.
[[File:Qp hbn.png|center|Self-consistent GW on eigenvalues]]
 
<span style="color:#FF0000"> Yambo version </span>: the '''self-consistent GW works only in Yambo 5.x''', please do not use it in Yambo 4.x
 
<!--
<span style="color:#FF0000"> Internal and external self-consistency in Yambo</span>: In Yamo there is another way to perform self-consistent GW, the use of the internal variables [[Variables#GWoIter|GWoIter]], [[Variables#GWoIter|GWIter]] see section [http://www.yambo-code.org/wiki/index.php?title=How_to_obtain_the_quasi-particle_band_structure_of_a_bulk_material:_h-BN#Step_5:_Eigenvalue_only_self-consistent_evGW0_and_evGW Eigenvalue only self-consistent evGW0 and evGW]. We advise not  to use these variables but to make an external script as described in this tutorial, because there it not restart for the GW, and therefore an interrupted job cannot be continued. Moreover the two approaches can give slightly different results. Using the internal loop the bands not included in the GW are rigidly shifted at each iteration, while in the external way Yambo performs a fit of the GW correction and apply it to the bands not included in the GW, this fit can include also the effect of stretching and can be different for the rigid shif.
For large bands range the two methods give the same results.
-->
 
== References ==

Latest revision as of 21:12, 9 April 2021

Self-consistent GW

In this tutorial you will learn how to perform self-consistent GW on eigenvalues only for G or both G and W (evGW). For molecules systems and also for many solids, the G0W0 approach often gives poor results. The main reason of this failure is that the DFT starting point with local or semi-local exchange correlation functionals give a too small gap compared with the experimental one, and a single shot GW is not able to correct this error. In order to overcome this problem a possible solution is to use as starting point a hybrid functional like PBE0, B3LYP,HSE etc.. or to perform a self-consistent GW. In general in self-consistent GW also the wave-function should be updated, but for many systems DFT wave-functions are already quite good and a self-consistency on eigenvalues only can be sufficient, for a discussion see for example ref.[1]

In this tutorial we will show how to perform self-consistent GW on the eigenvalues only with the Yambo code.

  1. Generate an input file for a G0W0 calculation as explained in the GW basics tutorial doing:
    yambo -X p -g n -p p -V qp -F yambo_g0w0_input.in
    notice that in order to perform self-consistent GW, you have to include all k-points and a reasonable number of valence and conduction bands in the QPkrange.
  2. run your first GW calculation doing:
    yambo –F yambo_g0w0_input.in -J G0W0
  3. at the end of the run you will get a quasi-particle file o-G0W0.qp.
    Now you can read this new quasi-particle band structure and perform another GW.
  4. copy your gw input in a new file: cp yambo_g0w0_input.in yambo_g1w1_input.in
  5. modify the yambo_g1w1_input.in to force Yambo to read the previous quasi-particle corrections
    GfnQPdb= "E < ./G0W0/ndb.QP"
    and
    XfnQPdb= "E < ./G0W0/ndb.QP"
  6. repeat point 1) and 2) for the G1W1, G2W2, etc… until the differences between o-GnWn.qp and o-Gn+1Wn+1.qp are small enough.

Usually self-consistent GW converges in about 3/4 iterations, see for instance the figure below. Notice that self-consistency on the eigenvalues can modify the energy level orders. Moreover evGW removes large part of dependency of the GW results from the DFT functional.

If you want to perform self-consistency only on G and not on W comment the line: #XfnQPdb= "E < ./G0W0/ndb.QP"

In general increasing the self-consistency level gives larger band gap: ΔDFT < ΔGoWo < ΔGWo< ΔGW.

Self-consistent GW on eigenvalues

In this figure we show the convergence of quasi-particle energy in self-consistent GW for both G and W for hexagonal Boron Nitride, see Ref. [2]

Convergence and other issues

Convergence : convergence parameters for the self-consistent GW are the same of the standard GoWo calculation plus the bands range QPkrange employed for the self-consistency. You should perform some tests increasing the bands range and see if you converge to the same result. Notice that at each iteration the GW correction is fitted and applied also to the bands not included in the bands range. Do not use non-continuous bands/k-points range this could give wired results and the code does not check against these errors.

Yambo version : the self-consistent GW works only in Yambo 5.x, please do not use it in Yambo 4.x


References