还记得第一步的能量最小化嘛?在能量最小化之后,我们得到的体系处于能量最低的状态,能量最低的状态,也就是最稳定的状态。我们要在心里一定要知道,在模拟的过程中是不涉及到键的生成和断裂的,所以这要求我们对力场的选择需要十分谨慎,当然这是后话。既然不涉及到键的生成和断裂,那么我们如何去看待这里的能量最小化呢,这其实意味着整个系统的各个键角,键长,扭矩等能量都处于最低的状态,在生命中的大部分物质都处于这个状态,在这里你可以认为相当于搭建一个房子的框架。
在开始本节的学习之前,可以先翻阅一下关于系综与分子模拟之间的关系 ,真能让您有更好的理解。
我们第一部分先看NVT平衡,NVT系综就是我们常说的正则系综,指在温度,体积和粒子数不变的系综,在刚才我们在editconf box的时候,创造了一个固定体积的盒子,而剩下的问题就是盒子内的粒子数不变以及盒子的温度不变了。gromacs在解决分子数不变的问题中引入了周期性边界条件(periodic boundary condition),他是指,当小分子或离子从一侧射出后从另一侧重新回到盒子内,这就保证了盒子内粒子数不变。那么gromacs是如何解决温度不变的呢?
答案就是thermostat(恒温器),在热力学中,在一定温度下分子的速度满足波尔茨曼分布,那么也就是说如果我想满足温度不变,只需要让该系统的分子的速度持续满足该温度下波尔茨曼分布就可以了。常用的方法有V-rescale thermostt。
gmx grompp -f MDP/en.mdp -c 1gpe.gro -r 1gpe.gro -p topol.top -o en.tpr -maxwarn 2 -v
在开始正式模拟之前,我们要先进行预处理,他的参数文件是保存在MDP文件夹下的en.mdp,马上我们将与上一节没有讲的mdp文件中参数的设置及其含义一起进行讲解。
;used for input grompp to generate *.tpr
integrator =steep ;我们在进行能量最小化的过程中采用的积分方式是最速下降法,即沿梯度最大的方向进行积分
emtol = 100.0 ;这里是我们对过程中能量最大点的限制一般来讲,限制为1000
emstep = 0.01 ;这步我们指定在进行积分过程中的积分步长
nsteps =50000 ;而这一步指的便是积分的步数,这是由于数字在电脑中是离散的。你可以尝试自己编写一个积分算法,你一定会认识到他的作用。
;how to find the neighbors of each atom and how to calculate the interaction
nslist =1 ;这一步指的是紧邻列表的更新频率
cutoff-scheme =Verlet ;这里他的含义是使用蛙跳积分法(这里先记住,我们后面会将一些算法方面的问题)
ns-type =grid ;近邻列表搜索方式 网格法 记住即可 ,很通用
coulombtype =PME ;库仑力的截断方式,其中长程库仑力是需要用到fftw(快速傅里叶变换的)后面我们会看到
rcoulomb =1.0 ;库仑力的截断距离
rvdw =1.0 ;范德华力的截断距离
pbc =xyz ;周期性边界条件(periodic boundary condition )再x,y,z三个维度上都存在,很通用,记住就好
下面是就是NVT的参数设置了,建议你先把上面的熟悉一下,这样你就能发现其中的相同与不同之处。
title =nvt balance ;标题可以随便取
define =-DPOSRES ;这里的意思是对体系内部的构成大分子的原子进行限制
;control operation parament
integrator =md ;积分方法,用法和刚才的steep类似,但其算法意义不一样
dt =0.002 ;参考上面的哟。
nsteps =50000
;output control parament
nstxout =500 ;输出位置信息的频率 一共50000步,所以会输出100个数据点
nstvout =500 ;这个地方是速度信息
nstenergy =500 ;能量信息
energygrps =Protein Non-Protein ;确定你要输出的是哪个组的能量信息
nstlist =5 ;近邻搜索;看上面
;Neighbor list parameter
ns_type =grid ‘看上面哟
pbc =xyz
rlist =1.0
;coulomb and vdw parament;
cutoff-scheme =Verlet
coulombtype =PME
pme_order =4 ;这个就是库仑力的长程力傅里叶变换中的插值,这里是进行了3次插值
fourierspacing =0.16 ;这里是傅里叶变换的间隔
rvdw =1.0
rcoulomb =1.0
DispCorr =EnerPres ;这个设置的含义是色散矫正
;temp coupling
tcoupl =v-rescale ;温度耦合方式
tc-grps =Protein Non-Protein ;温度耦合的组
tau_t =0.1 0.1 ;记住即可,是\delta T的意思,意思是温度的跨越间隔
ref_t =300 300 ;你的目标温度,单位为K
;pressure coupling
pcoupl =no ;因为是NVT平衡,所以这里不进行压力耦合
;intial velocity
gen_vel =yes ;产生初始速度
gen_temp =300 ;产生温度 (就是你的目标温度)
gen_seed =-1 ;随机数种子,因为计算机中的随机不是真随机
;bond constraint
constraint =all-bonds ;键的限制,我们这里对每个键都进行限制
continuation =no ;是否继续,这用于由于各种原因中断
constraint_algorithm =lincs ;限制键所用到的算法。
lincs_iter =1 ;精度,记住即可
lincs_order =4 ;阶数 ;记住即可
在进行这些设置后,你就可以运行预处理和模拟了,我们要明白,模拟只认二进制文件。所以这里,你预处理完成以后,要生成tpr文件。还记得教程一里的语句嘛?
gmx grompp -f MDP/en.mdp -c 1gpe.gro -r 1gpe.gro -p topol.top -o en.tpr -maxwarn 2 -v
gmx mdrun -deffnm en -v
这里新出现一个-r 1gpe.gro 是指你要添加大分子的限制文件。在他结束以后,你可以使用xmgrace来查看温度随时间的变化,如果你没安装的话,直接
yum -y install grace
之后,你要把你产生的温度文件转化一下
gmx energy -f en.edr
xmgrace energy.xvg
看一下你的温度变化曲线吧。