Skip to content

Commit 9c412e6

Browse files
committed
fix a bug that makes tests 108 & 109 fail.
1 parent 9e3d872 commit 9c412e6

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

source/module_esolver/esolver_ks.cpp

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,22 +60,28 @@ void ESolver_KS:: Run(int istep, UnitCell_pseudo& cell)
6060
// double drho = this->estate.caldr2();
6161
// EState should be used after it is constructed.
6262
drho = GlobalC::CHR.get_drho();
63-
63+
double hsolver_error = 0.0;
6464
if(firstscf)
6565
{
6666
firstscf = false;
67-
double hsover_error = this->diag_ethr * std::max(1.0, GlobalC::CHR.nelec);
67+
hsolver_error = this->diag_ethr * std::max(1.0, GlobalC::CHR.nelec);
6868
// The error of HSolver is larger than drho, so a more precise HSolver should be excuted.
69-
if(hsover_error > drho)
69+
if(hsolver_error > drho)
7070
{
71-
reset_diagethr(GlobalV::ofs_running, hsover_error);
71+
reset_diagethr(GlobalV::ofs_running, hsolver_error);
7272
this->hamilt2density(istep, iter, this->diag_ethr);
7373
drho = GlobalC::CHR.get_drho();
74+
hsolver_error = this->diag_ethr * std::max(1.0, GlobalC::CHR.nelec);
7475
}
7576
}
7677

77-
if(drho < this->scf_thr)
78-
conv_elec = true;
78+
conv_elec = (drho < this->scf_thr);
79+
80+
// If drho < hsolver_error in the first iter or drho < scf_thr, we do not change rho.
81+
if( drho < hsolver_error || conv_elec)
82+
{
83+
if(drho < hsolver_error) GlobalV::ofs_warning << " drho < hsolver_error, keep charge density unchanged." << std::endl;
84+
}
7985
else
8086
{
8187
//charge mixing
@@ -129,6 +135,12 @@ void ESolver_KS:: set_ethr(int istep, int iter)
129135
}
130136
}
131137
if(GlobalV::FINAL_SCF) this->diag_ethr = 1.0e-2;
138+
139+
if(GlobalV::CALCULATION=="md"||GlobalV::CALCULATION=="relax"||GlobalV::CALCULATION=="cell-relax")
140+
{
141+
this->diag_ethr = std::max(this->diag_ethr, INPUT.pw_diag_thr);
142+
}
143+
132144
}
133145
else
134146
{

0 commit comments

Comments
 (0)