deepmodeling / abacus-develop

An electronic structure package based on either plane wave basis or numerical atomic orbitals.
http://abacus.ustc.edu.cn
GNU Lesser General Public License v3.0
163 stars 128 forks source link

Hybrid functional HSE cannot give right bandgap of Si #4168

Closed Luc1anoo closed 3 months ago

Luc1anoo commented 4 months ago

Describe the bug

Hybrid functional HSE cannot give right bandgap of Si. The bandgap of Si is only 0.03eV using HSE functional, which is even smaller than the value calculated by PBE functional.

I also tested KPT of 9×9×9, which gave bandgap of 0.028eV.

Expected behavior

No response

To Reproduce

Si2.zip

Environment

ABACUS:3.6.0 mirror: abacus:3.6.0-user-guide

Additional Context

No response

Task list for Issue attackers (only for developers)

QuantumMisaka commented 4 months ago

I've repeated this result by using 9 9 9 KPOINTS.

It seems truly a problem

PeizeLin commented 4 months ago

There's something wrong in nscf. @Luc1anoo You can use pyatb to calculate the band structure instead.

=====================================

I've found the bug coming from PR #3451, commit 68ff6cb. @maki49 Could you help to fix it? THX. nscf_bug.zip

Luc1anoo commented 4 months ago

After compiling the updated ABACUS, hybrid functional hse calculation gave the bandgap of 1.51825 eV. Given the general accuracy of the hybrid functional calculation of silicon band structure, this result is still not acceptable. To Reproduce: Si_update.zip There is another point to note: compared with the previous, the structure has been optimized, and the volume of the original cell became larger after optimization. For the updated ABACUS, both configurations were calculated. The band gap before optimization was 1.45308eV, while the band gap after optimization was 1.51825 eV(i.e. the result in the Si_update file). Using VASP, my experience is that tensile strain will reduce band gap rather than increase.

WHUweiqingzhou commented 3 months ago

@maki49, do you think the result is acceptable? @dyzheng, could you have a look?

WHUweiqingzhou commented 3 months ago

@Luc1anoo, According to the report https://deepmodeling-activity.github.io/abacus-test.github.io/index.html?pname=sc I see the band gap of Si is 1.2 eV, which is quite close to the result of VASP. Could you double-check it? Which one is wrong now, INPUT or code? image

Luc1anoo commented 3 months ago

@Luc1anoo, According to the report https://deepmodeling-activity.github.io/abacus-test.github.io/index.html?pname=sc I see the band gap of Si is 1.2 eV, which is quite close to the result of VASP. Could you double-check it? Which one is wrong now, INPUT or code? image

I have tested with the same input files as abacustest, the result I got is 1.47351 eV.

QuantumMisaka commented 3 months ago

@WHUweiqingzhou @Luc1anoo

I've repeated the 1.48 eV band-gap with the attachment above. And after I relax the STRU under HSE calculation with KPT=9 9 9, the band-gap become 1.21 eV

E_bandgap      0.0891066414         1.2123580532

I consider @Luc1anoo can try to do nscf after a relaxed STRU

Update: the 1.21 eV results is only from relax but not cell-relax, which is also not precise, I'm checking

QuantumMisaka commented 3 months ago

By doing cell-relax in HSE in KPT 9 9 9, the band-gap is changed from 1.21 eV to 1.28 eV from SCF

 E_bandgap      0.0938700965         1.2771681842   

my STRU:

ATOMIC_SPECIES
Si  28.0855 Si_ONCV_PBE-1.0.upf upf201

NUMERICAL_ORBITAL
Si_gga_8au_100Ry_2s2p1d.orb

LATTICE_CONSTANT
1.8897260000

LATTICE_VECTORS
        0.0000000000        2.7300817457        2.7300817962
        2.7300817452       -0.0000000000        2.7300817963
        2.7300817452        2.7300817457       -0.0000000000

ATOMIC_POSITIONS
Direct

Si #label
0.0000   #magnetism
2 #number of atoms
        0.2500000000        0.2500000000        0.2500000000 m 1 1 1
        0.0000000000        0.0000000000        0.0000000000 m 1 1 1

my INPUT:

INPUT_PARAMETERS RUNNING ABACUS-DFT

#Parameters (1.General)
suffix                  ABACUS  # suffix of OUTPUT DIR
nspin                   1   #  1/2/4 4 for SOC
symmetry                0   #  0/1  1 for open, default
esolver_type            ksdft  # ksdft, ofdft, sdft, tddft, lj, dp
dft_functional          hse  # same as upf file, can be lda/pbe/scan/hf/pbe0/hse
ks_solver             genelpa  # default for ksdft-lcao
vdw_method              none  # d3_bj
pseudo_dir              /data/home/liuzq/example/PP
orbital_dir             /data/home/liuzq/example/ALLORB

#Parameters (2.Iteration)
calculation             cell-relax # scf relax cell-relax md
ecutwfc                 100
scf_thr                 1e-7
scf_nmax                300
relax_nmax              400
relax_method            bfgs  # cg, bfgs, cg_bfgs, sd, "fire"
force_thr_ev            0.02  # ev

#Parameters (3.Basis)
basis_type              lcao  # lcao or pw

#Parameters (4.Smearing)
smearing_method         gau    # mp/gaussian/fixed mp-ISMAER=1 gau-ISMAER=0
smearing_sigma          0.001  # Rydberg, 0.008 for mp and 0.001-0.002 for gau

#Parameters (5.Mixing)
#mixing_type             broyden  # pulay/broyden
#mixing_beta             0.4  # for metal: 0.05-0.4
#mixing_gg0              1.0  # only for metal

#Parameters (6.Calculation)
cal_force          1
cal_stress         1
out_stru           1  # print STRU in OUT
out_chg            1  # print CHG or not
out_bandgap        1
out_mul            1  # print Mulliken charge and mag of atom in mulliken.txt

and after nscf , the band-gap is 1.25 eV

$ grep band OUT.ABACUS/running_nscf.log 
                           occupied bands = 4
 end of band structure calculation 
 band eigenvalue in this processor (eV) :
 E_bandgap 1.25438 eV
 | DOS (density of states) and bands will be output here.             |
 Output bands in file: OUT.ABACUS/BANDS_1.dat
 ModuleIO        nscf_band                  0.00      1        0.00     0.02  

Also the band graph can be plotted by abacus-plot with 6.39 eV Fermi energy band

@Luc1anoo You can try it twice, with the newest LibRI (which will be faster)
https://gitee.com/abacus_dft/LibRI

Luc1anoo commented 3 months ago

In my case, the result 0.03eV bandgap is fundamentally wrong and it's fixed by https://github.com/deepmodeling/abacus-develop/pull/3451 (For those who may encounter this problem for the first time, this means that you need to compile the version of ABACUS after this PR.) Then the reason I still got inaccurate bandgap of 1.47351 eV, even using the same inputs of abacustest(ecutwfc=100, Kmesh =14 14 14), is that I used a orbital Si_gga_8au_100Ry_2s2p1d.orb , which is old in SG15-V1.0__Orbitals-V1.0.zip. When I change to the orbital with the same name but in SG15-V1.0__StandardOrbitals-V2.0.zip , I got a bandgap of 1.2eV.