分子模拟中的LINCS/SHAKE警告及应对

我们使用GROMACS进行分子动力学模拟时常常会遇到LINCS warning这样的警告,过多的警告会导致体系崩溃,程序运行异常。出现LINCS warning往往以为着初始体系构型不够合理,体系在模拟过程中出现了异常键。对于这种情况的应对方法,GROMACS官网上其实已有了详细的介绍,在这里翻译一下,供大家参考。

原文地址

"Blowing Up" 是一个用于表述模拟失败的相当专业的术语。简要的说,它描述了一个由于产生了极大的作用力并最终导致积分运算失败的典型错误。> 稍微展开一下背景,我们必须清楚分子动力学的基本原理是在非常短的时间间隔对牛顿运动方程进行积分,并借助这个时间间隔从粒子前一时间步的速度、位置、受力来确定下一时间步的速度和位置。如果在一个时间步中作用力变得很大,这将导致粒子在到达下一时间步时会在速度/位置上产生极大的变化。这将激发一连串致命的错误:一个原子在某一时间步中受到了很大的作用力,而在下一步中它可能失控并击穿整个体系,最终停在超出它应处于的范围或与其他原子重合的位置。这又使下一时间步中也产生了极大的作用力,失控的动量将延续下去。最终,这将导致模拟程序在某些方面崩溃,因为它没法处理这种情况。在进行了约束的模拟中,这个问题最初的征兆通常就是出现一些LINCS或者SHAKE警告或错误——这并不是因为这些约束导致了错误,而是因为它们最先受到影响而崩溃。类似的,在模拟中使用区域分解时,你可能会看到类似“粒子处于其电荷组区域分解区外超一个区长度”的信息,这也是你的体系潜在问题的征兆,而不是DD算法的问题。还有有关成平面化或1-4相互作用在列表支持的范围外的一些警告也是同样的。由于这些计算不同计算机系统间不具有数值再现性,一台计算机中出现的问题可能在另外的计算机中却会获得稳定的体系。

导致这种问题的可能性有:

  • 能量最小化不彻底;
  • 初始构型不合理,可能有空间冲突;
  • 采用了过大的时间不长(尤其是在使用约束的时候);
  • 在计算粒子插入自由能时没有使用软核;
  • 使用了不正确的压力耦合算法(例如:在还没有平衡的时候,Berendsen能够很好地松弛体积,但接下来就需要选择更高精度的压力耦合算法了);
  • 使用了不正确的温度耦合算法,或许用在了不正确的组上;
  • 对粒子坐标进行的位置限制与当下体系中的坐标差别太大;
  • 体系内某处有一水分子与其他水分子独立开来了;
  • 遇到了mdrun中的bug;

Blowing up是由于特定的时间步长下作用力过大导致的,最基本的解决方法有一下两种:

  1. 确保作用力不会过大;
  1. 使用更小的时间步长;

如果问题出现在模拟的开始阶段,更好的体系准备工作将有助于第一条。接下来我们谈谈有关体系准备工作的问题:

诊断一个不稳定的体系

对一个blowing up的体系进行错误排查是一项极具挑战性的工作,尤其是对那些分子模拟的萌新们来说。当遇到这种情况是,以下几点建议通常会有所帮助:

  1. 如果程序崩溃发生的相当早(几步之内),设置nstxout(或nstxtcout)为1,收集所有可能的帧。观察结果轨迹去排查是哪个原子/残基/分子首先变得不稳定;
  1. 将体系逐渐简化来寻找原因:
    • 如果你模拟的是一个溶剂构成的盒子,试着再加入前先将单个溶剂分子进行能量最小化以及模拟,去观察体系的不稳定性是否是由分子拓扑的内在问题引起的,或者在初始构型中分子位置是否有冲突;
    • 如果你模拟的是蛋白质-配体体系,试着将蛋白质单独放置在所需溶剂中进行模拟。如果蛋白质是稳定的,将配体分子放在真空中单独模拟,观察它的拓扑是否提供了稳定的构型,能量等;
    • 删除设定的算法(LINCS/SHAKE),尤其是没有达到彻底的平衡的时候;
  2. 使用g_energy(5.0版本后为gmx energy)来监测体系中各个成分的能量变化,如果出现分子内的能量变化出现尖峰,那可能意味着使用了不正确的键参数;
  3. 确保你没有忽略任何在运行mdrun之前步骤中的错误信息(运行pbs2gmx时遗失原子、运行grompp时原子名称不匹配,等等)或者使用了变通条件来保证你的拓扑文件被完整并正确的编译(如在grompp中使用了-maxwarn选项忽略警告);
  4. 确保你在.mdp文件中应对你的体系和所选力场设置了正确的选项,尤其是对截断距离cutoffs,近邻搜索间隔nstlist以及温度耦合。就算初始构型是合理的,不正确的设置也会导致物理模型的崩溃;

如果使用隐式溶剂,在平衡阶段使用比成品MD更小的时间步长能够帮助能量平衡的更稳定。
有一些常见的情形下这种不稳定现象出现的频率很高,通常是向一体系中引入新种类物质(配体或其他分子)的时候。想要找到问题的根源,就得将体系拆开来逐步分析(如蛋白质-配体体系):

  1. 蛋白质自身(在水中)是否能够充分能量最小化?这是对蛋白质分子坐标完整性和体系准备工作的一个测试。如果它失败了,说明可能在运行pdb2gmx中出错了,或者使用genion添加离子时,离子的位置离蛋白质太近了(毕竟它是随机加的);
  1. 配体分子在真空中是否能够能量最小化?如果不能,检查你对配体的分子的参数设置以及任何加入力场文件中的新参数;
  2. (如果第二步最小化成功)配体分子在水是否能够能量最小化或直接运行一段短时间的模拟?

还有一些问题可能来自于生物分子的拓扑:

  1. 在运行pdb2gmx时是否使用了-missing?如果是,请删除该选项。重新构建缺少的坐标而不是忽略它们;
  1. 是否试图改变键长并不顾长/短键的警告?如果是,请不要这么做。这将导致原子缺失或形成一些糟糕的几何结构;

总得来说,LINCS/SHAKE warning的出现还是因为体系没有平衡。往往我们在进行了能量最小化后还是偶尔会遇到这个问题,而且一般出现在NPT平衡阶段(NVT因为没有加压所以出现warning的概率较小),在确认拓扑没有问题的前提下,可以先进行一段时间步长较小的平衡,来松弛体系,往后再进行较大时间步长的平衡。当然,也可以使用不同的压力耦合算法来实现快速的松弛体系的效果。

在gmx邮件列表里面遇到这个LINCS warning的人非常多,同样列出些大家分别遇到的问题,以便参考:

  1. 在进行二面角约束时,不正确的约束很容易导致LINCS warning,具体可查看这里;
  2. 也有人建议将压力耦合的时间常数tau_p加以调整,最小为1,具体可查看这里;
  3. 没有使用周期化边界条件或者所建的盒子太小可能会导致分子位置重叠从而引发LINCS warning,具体可以查看这里;
  4. 过多的限制也会导致LINCS warning,像在EM过程中没有使用constraint而在后续步骤中直接使用constraint = all-bond,这时EM中产生的没有限制的构型很容易与后续的限制相冲突,具体可查看这里;

你可能感兴趣的:(分子模拟中的LINCS/SHAKE警告及应对)