增强采样与MetaD的基本原理

Metadynamics用于增强分子动力学模拟中的采样,并将自由能表面重构为几个选定自由度的函数,通常称为集体变量(CVs,Collective Variables)。在Metadynamics中,在CV空间中自适应构造的与历史相关的偏置势可以加速采样,从而对对原始算法进行了显著的改进,高效、灵活和准确等优点使其在多个科学领域发现了许多成功的应用。

事实上,在使用原子经验力场的典型MD模拟中,需要使用飞秒级的时间步长来正确地积分运动方程。而感兴趣的过程往往发生在更长的时间尺度上。从这些考虑来看,MD明显受到时间尺度问题的困扰。人们提出了各种各样的方法来解决这个问题,这些通常被称为增强抽样技术。

Metadynamics属于这样一类方法,通过引入作用于选定自由度的附加偏置势(或力)来促进抽样,通常称为集合变量(CVs)。同时,能够增强采样并重构自由能面(FES)。许多方法也可以被认为属于这一类,最为熟知的是伞形采样。

对于Metadynamics,其偏置势形式为

VG(S,t)=0tdtωexp(i=1d(Si(R)Si(R(t)))22σi2)V_{\mathrm{G}}(S, t)=\int_0^t d t^{\prime} \omega \exp \left(-\sum_{i=1}^d \frac{\left(S_i(R)-S_i\left(R\left(t^{\prime}\right)\right)\right)^2}{2 \sigma_i^2}\right)

即高斯函数形式。
经过长时间后,自由能可由如下等式估计:

VG(S,t)=F(S)+CV_G(S, t \rightarrow \infty)=-F(S)+C

F(s1,s2)=1βlogP(s1,s2)F\left(s_1, s_2\right)=-\frac{1}{\beta} \log P\left(s_1, s_2\right)

我们就可以作出s1,s2s1,s2作为CVs的概率密度分布

通过LAMMPS+PLUMED插件实现增强采样

不会详细介绍LAMMPS安装,教程一抓一大把,请参见LAMMPS官方文档

1.我们获取最新版LAMMPS 和 增强采样软件PLUMED 2.4.0的压缩文件
PLUMED一直在更新,但不是每个版本都能顺利装的上,盲目选最新版可能会因为莫名其妙的报错浪费大量时间

2.解压LAMMPS的压缩文件,进入<解压出的文件>/lib/plumed 目录,把PLUMED压缩文件复制进去并解压, 并且创建个文件夹用来安装,命名为plumed2

3.安装

1
2
3
4
cd plumed-2.4.0
./configure --prefix=<前面创建的文件夹的绝对路径>
make -j 8
make install

如果能找到plumed 成功安装的提示就成功了

4.回到LAMMPS解压出的文件夹,进入src目录

1
2
make lib-plumed args="-p <PLUMED安装位置的绝对路径>"
make yes -plumed

再把要用的包 (molecule,rigid,kspace,manybody,extra-dump,extra-fix) 全 make yes一遍,就能编译 make mpi

5.使用时,在LAMMPS方面,只需要在.in文件中加上一行fix plumed command,详见LAMMPS官方文档

在PLUMED方面,需要创建plumed.dat脚本文件,以下是一个用局部熵与焓作为CVs,实现Metadynamics的示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
LOAD FILE=../../PairEntropy.cpp

PAIRENTROPY ...
LABEL=s2
ATOMS=1-256
MAXR=0.7
SIGMA=0.0125
... PAIRENTROPY

ENERGY LABEL=ene

VOLUME LABEL=vol

COMBINE ...
ARG=ene,vol
POWERS=1,1
COEFFICIENTS=1.,0.060221409
PERIODIC=NO
LABEL=enthalpy
... COMBINE

COMBINE ...
ARG=enthalpy
POWERS=1
COEFFICIENTS=0.004
PERIODIC=NO
LABEL=enthalpyPerAtom
... COMBINE

METAD ...
LABEL=metad
ARG=enthalpyPerAtom,s2
SIGMA=0.2,0.1
HEIGHT=2.5
BIASFACTOR=30
TEMP=325.0
PACE=500
GRID_MIN=-110,-8
GRID_MAX=-90,-1
GRID_BIN=500,500
CALC_RCT
... METAD

PRINT STRIDE=500 ARG=* FILE=COLVAR

其中PairEntropy.cpp为PLUMED官方没有放入官方库中的一个变量脚本,用于生成局部熵。
其余指令不再赘述,见 PLUMED2官方文档

万事俱备后,将你的lammps通过mpi run起来,就可以实现增强采样了。

通过plumed内置的sum_hills程序,就可以计算自由能了。

1
nohup plumed --no-mpi sum_hills --hills ../HILLS --stride 1000 --mintozero --bin 200,200 &