The bands calculated by HSE are very strange
Describe the bug
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
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).
Could you please do this thing:
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.
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.
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.
Did you forget to upload the STRU file in your archive... ?
Did you forget to upload the STRU file in your archive... ?
I have uploaded the STRU file.
Running NSCF with 661 kpoints gives the same dos as SCF.
Maybe the problem lies in the line of kpoints used in NSCF?
I close this issue due to no further update from @Chentao168. Please feel free to reopen it.