首先,这种情况就是因为出现了个别原子距离靠得太近,已经不符合科学实际了,例如两个原子距离0.2埃,这是严重违背科学事实的。在AMS中,出现这种情况,是会停止模拟下去的(Lammps不检查这一项的合理性)。
那么用户就应该检查,哪个原子对,出现了这种近距离?为什么会运动到这么近的距离,都不弹开?是步长太长了吗?是原子间排斥力太小(不符合事实)了吗?等等。
这是初始模型本身有问题!
生成的.out文件中尾部,会告知具体哪些原子距离太近,可以根据编号去检查,例如:
Atoms 1 and 897 are extremely close (<0.001 Bohr). Input error? If this was intended, set the System%AllowCloseAtoms option to True.
显示1和897号原子几乎重叠在一起了。 造成这种问题主要来源是两个方面:
其中
修改模拟条件,避免该偶然事件(原子剧烈碰撞导致原子距离过近):修改分子个数、模拟条件如温度等。 如果体系温度很高,例如4000K甚至10000K,步长设置需要比0.25fs小,否则会导致原子在1个step,就运动到与另一个原子相近的地方,而没有及时更新受力情况(随着原子靠近,排斥力应该暴增太对,但由于步长太长,因此还没有来得及更新排斥力,就已经运动到了跟前),从而导致atoms too close的情况。
还有一种情况,就是使用Molecule Gun入射原子、分子,入射速度或能量非常高,但是步长不够小,这种情况也和温度很高是一样的道理。
为了更清楚的知道出现atoms too close的原因,我们可以检查一下动画。在*.out尾部会有具体报错信息,展示是哪两个原子出现了这种情况,例如:
MolGun1: Added 1 atoms with CoM at -7.76141 0.80403 18.89726 a.u. Velocity -0.00013 -0.00007 -0.02285 a.u. atoms=119 441, cell shift= 0 0 0, distance= 0.25294957
表示此刻119号原子和441号原子靠得太近,距离只有0.25294957埃。
在AMSinput → Model → Coordinates中,我们找到这个原子 然后在Movie的第一帧中,找到对应的原子,并在View → Atom info → Name → Show勾选,显示该原子:
然后从Movie的最后一帧,一帧一帧倒着看,结合实验微观视角的常识,就可以发现原因了。
最愚蠢的办法,就是不检查任何原因,直接关闭检查。正常做分子动力学模拟,一般是不允许这种不严谨的做法的。