Skip to content

Commit 8db3b40

Browse files
authored
Fix: bug caused by all atoms fixed in md (#2028)
1 parent be85854 commit 8db3b40

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

source/module_md/MD_func.cpp

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,16 @@ void MD_func::RandomVel(
143143
}
144144
}
145145

146-
double factor = 0.5*(3*numIon-frozen_freedom)*temperature/GetAtomKE(numIon, vel, allmass);
146+
double factor;
147+
if(3*numIon == frozen_freedom)
148+
{
149+
factor = 0;
150+
}
151+
else
152+
{
153+
factor = 0.5*(3*numIon-frozen_freedom)*temperature/GetAtomKE(numIon, vel, allmass);
154+
}
155+
147156
for(int i=0; i<numIon; i++)
148157
{
149158
vel[i] = vel[i]*sqrt(factor);
@@ -391,9 +400,15 @@ double MD_func::current_temp(double &kinetic,
391400
const double *allmass,
392401
const ModuleBase::Vector3<double> *vel)
393402
{
394-
kinetic = GetAtomKE(natom, vel, allmass);
395-
396-
return 2 * kinetic / (3 * natom - frozen_freedom);
403+
if(3 * natom == frozen_freedom)
404+
{
405+
return 0;
406+
}
407+
else
408+
{
409+
kinetic = GetAtomKE(natom, vel, allmass);
410+
return 2 * kinetic / (3 * natom - frozen_freedom);
411+
}
397412
}
398413

399414
void MD_func::temp_vector(const int &natom,

0 commit comments

Comments
 (0)