This issue is a result of a Codex global repository scan.
Line-mode KPOINTS parsing allows nkl[iks] == 0 via assert(nkl[iks] >= 0). Later, each segment divides by nkl[iks - 1], so a zero count causes division by zero. In release builds, the assert is removed entirely.
|
for (int iks = 0; iks < nks_special; iks++) |
|
{ |
|
ifk >> ks[iks].x; |
|
ifk >> ks[iks].y; |
|
ifk >> ks[iks].z; |
|
ModuleBase::GlobalFunc::READ_VALUE(ifk, nkl[iks]); |
|
|
|
assert(nkl[iks] >= 0); |
|
nkstot += nkl[iks]; |
|
/* ISSUE#3482: to distinguish different kline segments */ |
|
if ((nkl[iks] == 1) && (iks != (nks_special - 1))) { |
|
kpt_segid++; |
|
} |
|
kpt_segids.push_back(kpt_segid); |
|
} |
|
assert(nkl[nks_special - 1] == 1); |
|
|
|
// std::cout << " nkstot = " << nkstot << std::endl; |
|
this->renew(nkstot * nspin); // mohan fix bug 2009-09-01 |
|
|
|
int count = 0; |
|
for (int iks = 1; iks < nks_special; iks++) |
|
{ |
|
double dxs = (ks[iks].x - ks[iks - 1].x) / nkl[iks - 1]; |
|
double dys = (ks[iks].y - ks[iks - 1].y) / nkl[iks - 1]; |
|
double dzs = (ks[iks].z - ks[iks - 1].z) / nkl[iks - 1]; |
Relevant code:
ModuleBase::GlobalFunc::READ_VALUE(ifk, nkl[iks]);
assert(nkl[iks] >= 0);
nkstot += nkl[iks];
...
double dxs = (ks[iks].x - ks[iks - 1].x) / nkl[iks - 1];
double dys = (ks[iks].y - ks[iks - 1].y) / nkl[iks - 1];
double dzs = (ks[iks].z - ks[iks - 1].z) / nkl[iks - 1];
Suggested fix:
Validate nkl[iks] > 0 for all segment counts used as divisors and report an input error at runtime rather than relying on debug-only assertions.
This issue is a result of a Codex global repository scan.
Line-mode KPOINTS parsing allows
nkl[iks] == 0viaassert(nkl[iks] >= 0). Later, each segment divides bynkl[iks - 1], so a zero count causes division by zero. In release builds, the assert is removed entirely.abacus-develop/source/source_cell/klist.cpp
Lines 440 to 465 in 84ca04b
Relevant code:
Suggested fix:
Validate
nkl[iks] > 0for all segment counts used as divisors and report an input error at runtime rather than relying on debug-only assertions.