abacus-develop icon indicating copy to clipboard operation
abacus-develop copied to clipboard

The bands calculated by HSE are very strange

Open Chentao168 opened this issue 1 year ago • 6 comments

Describe the bug

image The band structure calculated using HSE differs significantly from those obtained with PBE and SCAN functionals in 21 atoms IGZO.

Expected behavior

No response

To Reproduce

20240808-hse-bug.zip

Environment

No response

Additional Context

No response

Task list for Issue attackers (only for developers)

  • [ ] Verify the issue is not a duplicate.
  • [ ] Describe the bug.
  • [ ] Steps to reproduce.
  • [ ] Expected behavior.
  • [ ] Error message.
  • [ ] Environment details.
  • [ ] Additional context.
  • [ ] Assign a priority level (low, medium, high, urgent).
  • [ ] Assign the issue to a team member.
  • [ ] Label the issue with relevant tags.
  • [ ] Identify possible related issues.
  • [ ] Create a unit test or automated test to reproduce the bug (if applicable).
  • [ ] Fix the bug.
  • [ ] Test the fix.
  • [ ] Update documentation (if necessary).
  • [ ] Close the issue and inform the reporter (if applicable).

Chentao168 avatar Aug 08 '24 02:08 Chentao168

Could you please do this thing: img_v3_02d8_ca51a6a9-bbe6-4e26-83b0-b80704cf036g and check the change of condnum of H during SCF by this following script?

import numpy as np

nbasis = 26 # use the nbasis you use
nbands = 26 # use the nbands you use
h_traj = np.loadtxt('h_mat.txt').view(complex)
s_traj = np.loadtxt('s_mat.txt').view(complex)

h_traj = h_traj.reshape(-1, nbasis, nbasis)
s_traj = s_traj.reshape(-1, nbasis, nbasis)
print(h_traj.shape, s_traj.shape)
eignvals, _ = np.linalg.eigh(s_traj[0])
print(f"The smallest 3 eigenvalues of the first S matrix: {eignvals[:3]}")
num_scf = h_traj.shape[0]
# check
for i in range(num_scf):
    h = h_traj[i]
    s = s_traj[i]
    # check condition number of h and s
    h_condnum = np.linalg.cond(h)
    s_condnum = np.linalg.cond(s)
    # check hermiticity
    assert np.allclose(s, s.conj().T, rtol=1e-14)
    print(f"SCF {i+1:3d} H condnum: {h_condnum:10.2f}, S condnum: {s_condnum:10.2f}")

I think there is something unexpected happens.

kirk0830 avatar Aug 08 '24 09:08 kirk0830

According to the bands, it seems that maybe too few k-points are used when SCF. You can try to increase the k-points. In addition, maybe you can set symmetry=-1 and mixing_type=pulay in INPUT to avoid potential undefined risks.

PeizeLin avatar Aug 08 '24 17:08 PeizeLin

img_v3_00dl_9580b59d-b28d-4ccb-9f2d-8bf1c4f8f37g I suspect it's an issue with NSCF. I used k points of 6 * 6 * 1 and 10 * 10 * 1 for SCF and set the output DOS to out_dos without any problem. However, when I tried NSCF, I found that both DOS were incorrect.

Chentao168 avatar Aug 11 '24 03:08 Chentao168

Did you forget to upload the STRU file in your archive... ?

maki49 avatar Aug 11 '24 05:08 maki49

Did you forget to upload the STRU file in your archive... ?

I have uploaded the STRU file.

Chentao168 avatar Aug 11 '24 07:08 Chentao168

Running NSCF with 661 kpoints gives the same dos as SCF. Maybe the problem lies in the line of kpoints used in NSCF? DOS

maki49 avatar Aug 12 '24 03:08 maki49

I close this issue due to no further update from @Chentao168. Please feel free to reopen it.

WHUweiqingzhou avatar Oct 15 '24 05:10 WHUweiqingzhou