科研笔记3:Gromacs对于MD的问题综述

分类: 学术男 |
问题1:在npt系综运算完后,一定要进行密度的rescaling。
在进行气体扩散的初始构型搭建过程中,最容易被人忽略的一点就是当npt系综将体系进行平衡之后,我们就容易拿出最后一帧的数据来进行运算,实际上这样并不合理。npt的最终目的就是让体系更接近于实验值,所以我们也要做准确的模型。参加科研笔记2,在进行完npt模拟后,需要按照如下步骤:
先利用指令:g_energy -f npt.edr -o density.xvg了解密度的波动,然后选择合适的计算范围。比如CO2在H2O的npt后得到密度波动见图1,我们发现40ps后密度相对比较稳定,于是从40ps到100ps做个平均值。
然后利用指令:g_energy -f npt.edr -b 40 -e 100 -o density2.xvg,屏幕中自动会帮你计算平均值,比如密度是986.168 g/L。
最后利用指令:editconf -f npt.gro -density 986.168 -o npt2.gro调整密度。npt2.gro就成了最终的构型。
问题2:遇到一个极其恼人的fatal error叫blowing up该怎么办?
如果你遇到一个极其郁闷的致命错误如下:
Fatal error:
1 particles communicated to PME node 2 are more than 2/3 times the cut-off out of the domain decomposition cell of their charge group in dimension x.
注:下划线部分,可能会被替换成同类数字或者字母。
那么恭喜你,这个问题和其他的fatal error不一样,这个问题非常难解决。论坛上有人建议换版本,显然这不是我们想要的。有人上报为一个bug,这也和我们暂且无关。我的经验如下:
首先,非常仔细检查自己的初始构型和itp文件看看有没有什么不妥的。笔者就曾经由于一个二面角的数字位置颠倒而导致浪费了一天时间找问题。千万仔细!
其次,问题可能就出在你的热浴选择上,nose hoover是个强coupling的热浴,很容易造成这种类型的blowing up,建议换成berendsen或者v-rescale这类弱coupling热浴。berendsen是不准确的方式,一般不推荐使用,笔者推荐使用v-rescale(比berendsen增加一个随机项)。
第三,和你体系未达到平衡有关,建议再次平衡体系,在尝试。笔者有这样的经历,明明两个体系都平衡了,但是换了一个构型就可能把程序跑通了。
第四,这个最有意思,只能呵呵。核用的越少,报错的可能性越小。笔者尝试过同样的输入文件,采用mdrun -nt 2 -v -deffnm nvt和mdrun -nt 12 -v -deffnm nvt得到了完全不同的结果,前者速度慢,但是程序容易跑通,后者速度快,但是经常报错。
总结起来讲,这个问题非常麻烦,建议大家按照我的方案,反复尝试,也许会有收获。
问题3:关于Nose-hoover的热浴中tau_t的选择问题。
Berendsen热浴和v-rescale热浴,time constant一般选择0.1 ps;Langevin热浴也有类似的参数,有个damping coefficient,我们经过尝试在扩散小体系中用1 ps-1,在蛋白质大体系中可以用5 ps-1。那么Nose-hoover热浴呢?以下是我的尝试。
我的体系很小1的CO2在500个水中,我选择了0.2 ps, 0.5ps和1ps做了三组平行实验。结果见图2。由于第二组0.5似乎是个相对较好的time constant。