谈谈做分子动力学模拟什么时候适合用NPT和NVT系综

谈谈做分子动力学模拟什么时候适合用NPT和NVT系综

文/Sobereva@北京科音    2026-Jan-11


之前我天天在网上答疑时看过太多初学者做分子动力学模拟时本该用NPT系综的时候却误用或乱用NVT系综,导致自取其辱,或者白浪费很多时间。甚至今日在同一天内,还看到计算化学公社论坛里两个新帖http://bbs.keinsci.com/thread-57828-1-1.htmlhttp://bbs.keinsci.com/thread-57823-1-1.html都是乱用NVT而导致了迷惑的结果,我遂感到很有必要专门写个小文批判乱用NVT的行为、澄清什么时候才真正适合用NVT。实际上本文内容就是北京科音分子动力学与GROMACS培训班(http://www.keinsci.com/KGMX)里讲“分子动力学的基本原理与算法”中的一部分,并稍作扩展而已,但凡参加过此培训完整系统性学习过分子动力学的学员都不会在这种常识性问题上犯错误,压浴的算法在培训里也有非常全面细致的介绍。

首先明确一点:做常见体系的动力学模拟,应当默认用NPT系综,即压浴(barostat)和热浴(thermostat)同时使用,或者说同时考虑控压(压力耦合)和控温(温度耦合)。这显而易见,毕竟大多数情况模拟的体系在现实中都是在恒定温度和压力条件下的,比如烧杯中的溶液、细胞中的蛋白质。若关掉控压,即不设置压浴,就是NVT系综了。

先说几个常识。体系盒子尺寸的改变会令压力改变,盒子越大内压越小,盒子越小内压越大。控压有不同算法,共同原理都是在动力学过程中不断调节盒子尺寸并同时按比例缩放原子坐标,以使得当前体系压力的平均值与自设的参考压力相符,但允许在模拟过程中有一定程度的波动。每次控压时要求三个方向的盒子尺寸按相同比例变化称为各向同性控压,XY和Z方向独立控压称为半各向同性控压,三个方向都独立控压称为各向异性控压。压浴的效果严重依赖于人为指定的可压缩系数,它体现温度不变的情况下增加单位压力令体积的相对减小量。各向异性控压时可以在盒子不同方向上分别设这个参数,如果在某个方向上可压缩系数设为0,则这个方向上即便开启了控压盒子尺寸也不会改变。本文说的控压默认是指设的可压缩系数>0的情况。

有的情况用压浴是绝对必须的,例如:
• 用packmol(用法介绍见http://sobereva.com/473)、GROMACS自带的insert-molecules等程序构建的体系初始模型对应的盒子往往明显偏大,因而对应的体系初始密度往往明显偏小。如果你在模拟时不考虑控压,显然在分子之间由于相互作用聚集到一起后盒子里就会出现真空区。只有用控压时才可能通过自发调节盒子尺寸令体系密度与实际一致而消掉真空区。前面提到的http://bbs.keinsci.com/thread-57828-1-1.htmlhttp://bbs.keinsci.com/thread-57823-1-1.html这两个帖子里的截图一看就知道都是该用NPT却误用了NVT导致盒子里出现了明显真空区。顺带一提,用VMD观看周期性体系的时候强烈建议用pbc box命令把盒子显示出来,免得被蒙在鼓里,而这俩帖子都没显示出盒子。
• 研究相变过程。相变会伴随着密度的变化,比如水变成冰体积会自发显著膨胀。显然如果你模拟水结冰,而让盒子尺寸始终不变的话,结冰过程都无法如实模拟。
• 研究变温过程。比如你对一个材料热膨胀系数为正的温度区间内研究升温过程,考虑控压的话能如实描述热膨胀效应,若不允许控压则相当于内压越来越大,跟高压锅似的。
• 有的研究专门模拟很高压力下的情况,显然也必须用控压了,除非你能根据已有的拟合关系事先知道这个压力下的盒子尺寸理应是多大,并将之作为初始盒子尺寸。

虽然用了压浴后会增加耗时,但比NVT耗时增加程度甚微,因此若没有什么不能用控压的明确理由时都应当开着压浴。不适合用控压的情况比较有限,应当用NVT的常见情况有以下这些:
• 需要维持特定真空区的体系,典型的是气液界面。在垂直于界面方向上若用控压会导致在此方向上盒子不断收缩、真空区逐渐消失,经过足够长时间的模拟后体系就变成了纯液体盒子了。气液界面体系在平行于界面的方向上也不应该用控压,否则由于表面张力原因界面会越来越小。显然模拟气液界面要用NVT。如果要模拟液液界面,虽然平行于界面方向上不应该控压(或者设可压缩系数为0也行),但垂直于界面方向上应该控压,从而令液体密度能自发调节到合理。
• 周期边界条件下算孤立体系。目前版本的GROMACS已经不支持非周期边界条件了,因此模拟单分子或者分子团簇时,只能用一个足够大的盒子当三维周期性做NVT模拟,并且为了避免体系与其相邻镜像存在相互作用而需要令盒子足够大。此情况若用控压显然也会令盒子逐渐缩小,导致体系与其镜像最后虚假地作用上了。
• 想精确维持特定的密度。例如使用已知的实验密度进行模拟、考察特定性质随密度的变化(跑很多次模拟,每次设置不同的盒子体积),显然需要NVT。
• 模拟一些特殊体系。比如超临界气体的可压缩系数很大,用控压时盒子尺寸往往会剧烈变化,甚至导致崩溃,因而通常基于其实验已知密度来定义特定尺寸的盒子进行NVT模拟。
• 计算某些性质的时候原理上用NVT比NPT更合适,对于这种情况可以先做NPT模拟使得盒子尺寸达到平衡,然后再切换到NVT续跑。例如计算MSD曲线并得到扩散系数,用控压的话由于在模拟过程中会不断对原子坐标进行缩放,多多少少会对结果带来不利影响(不过对于液体体系模拟来说,盒子尺寸通常波动很小,因此也不能说NPT下算的结果就不能用)。再比用周期扰动法计算粘度,原理上就应当在NVT下进行,此方法的原文里也是这么做。
• 用控压时发现模拟崩溃,并怀疑是控压所致,此时可以暂时尝试不用控压看看动力学情况。这点我之前在http://sobereva.com/soft/Sobtop#FAQ8里介绍怎么排查动力学崩溃原因的时候也说过。如果改用NVT跑了一阵子都没问题,可以尝试再把控压打开续跑,看看NPT能否顺利跑下去;如果能的话,说明之前做NVT的时候令体系得到了足够的弛豫、状态被稳定化了。如果一上来就用NPT模拟虽然没崩溃,但是盒子变化异常,比如尺寸波动剧烈,也可以先跑一段时间NVT试图稳定化一下。
• 在GROMACS里利用freeze冻结原子时,同时开启压浴容易造成崩溃,因此要用NVT,或者用NPT结合位置限制势实现类似目的。

还值得一提的是做盒子以特定方式变化的模拟的情况。GROMACS里可以在mdp里用deform设置要求盒子的特定分量按照特定速度发生变化,比如你设了Z方向尺寸的变化速度,那么Z方向就不能用控压来自发调节盒子。

网上有一些教程,以及有不少文章,做NPT之前都先做NVT,我强烈不建议盲目效仿!!!这事我在网上答疑时已经说过无数次。NPT之前做NVT有>99%的可能都是多此一举的,白浪费你的时间。虽然如前所述,NPT之前做NVT有可能能令体系先稳一稳避免直接NPT模拟时异常或崩溃,但实际中必须先做NVT的情况甚少。只要你的拓扑文件合理、体系初始结构别太恶心(比如存在严重不合理接触、初始压力特别离谱)、模拟设置没有什么硬伤、跑动力学之前已做了充分的能量极小化,并且你最终就是要在NPT下模拟,那么上来直接用NPT模拟就行了。倘若万一真的发现异常,可以到时候再考虑做NVT预平衡一下。即曰此时NVT是补救时才需要用的,而不要当做默认要做的过程!

之前在我的思想家公社QQ群里谈论以上问题时,有人提到Molecules, 25, 5120 (2020)一文以试图论证NPT之前做NVT的意义。这篇文章的意思是对此文研究的糖脂这类体系,当初始结构的压力明显不合理的时候,平衡相一开始先用NVT再NPT能避免直接用NPT时由于模拟初期盒子显著震荡、相应地缩放原子位置导致水被巧合地弄进疏水区。但实际上此发现明显不足以构成预平衡先要用NVT的“普遍的必要性”,这只是属于小众体系的罕见情况。只能说对于没有人工监控的靠脚本实现的批量模拟,并且你也不在乎NVT多跑几百ps花的计算量,倒是可以加入先做NVT的过程以求绝对保险。顺带一提,也有很多动力学研究的本身就是非平衡过程,比如两相间的互溶,这种情况就不可能先加入NVT预平衡过程了。

本文最后留下一句话进行强调:若无明确、说得通的理由,不要用NVT!!!