[转载]gromacs中restraint, constraint and freeze 在固定原子方面的差别

2010-05-27 17:01 · linxubo

From 大牛sobereva: http://hi.baidu.com/sobereva/blog/item/27ecdb6e603323dd80cb4a5c.html gromacs里面人为固定坐标有三大类方式:restraint、constraint和freeze,有

From 大牛sobereva: https://hi.baidu.com/sobereva/blog/item/27ecdb6e603323dd80cb4a5c.html

gromacs里面人为固定坐标有三大类方式:restraint、constraint和freeze,有各自的特点。

**限制(restraint)包括位置限制(也就是常说的正式MD前首先要进行的限制性动力学),角度限制,二面角限制,方向限制,距离限制。
限制的特点是可以让被限制的东西在一定范围内运动,而非彻底固定住,实际上就是施加一个谐振势来限制其移动。
位置限制就不必说了,posre.itp里面[ position_restraints ]定义的就是,默认相对于最初位置进行限制。
角度限制和二面角限制和方向限制用得少,实际上improper项就是用二面角限制方式限制的。
距离限制在[ distance_restraints ]里面定义,比如
[ distance_restraints ]
; ai aj type index type low up1 up2 fac
10 16 1 0 1 0.0 0.3 0.4 1.0
10 28 1 1 1 0.0 0.3 0.4 1.0
10 46 1 1 1 0.0 0.3 0.4 1.0
16 22 1 2 1 0.0 0.3 0.4 2.5
type总是1,index是计算的顺序,如果几个项index都一样,比如10-28和10-46,就同时计算。势能图见gmx3.3.3 p60,原子间距离在一定区间内是不受限制的。这种方式可以达成NMR限制。
也可以定义两个原子在[ bonds ]里用bond type 6,就是个和普通键一样的谐振子势,但是这两个原子间被认为没有键连。

**约束(constraint)用shake或lincs方法固定住原子之间的相对位置,固定的几何关系是绝对不变的。分为两种类型,type 1和type 2的效果其实一样,但是type 1被认为将这两个原子键连了,而type 2没有键连。一般被键连的原子间都不计算相互作用(在[ moleculetype ]里定义nrexcl来控制相隔几个键内的原子间不计算相互作用,也就是相当于被列进[ exclusions ]),比如type 1时一般就不计算这两个原子间的非键作用了,而type 2时仍然计算。
用哪种约束算法用.mdp里的 constraint_algorithm设定,默认lincs。.mdp里的比如constraints = all-bonds也是应用这种约束方法,也就是约束住所有[ bonds ]项,原本[ bonds ]的设定就被覆盖了,即不体现成键效果(来回振动),只体现约束效果(距离固定不变)。

自定义约束项可以在拓扑文件中这么写:
[ constraints ]
1 8 2 0.153    //原子1 原子2 type 约束的距离(0.153nm)。
之后1 2原子距离会固定保持在0.153nm,即便1 2原子在[ bonds ]中定义是成键的也是如此。
注意,.mdp里如果写constraint=none,只是说批量约束hbonds、all-bonds等没有了,在拓扑文件中自定义的constraint约束项仍然生效。

顺便一提,在默认情况下,gromacs的水的结构是被settle算法约束住的,也就是所说的rigid水,settle就是专用于水的约束算 法,在spce.itp里面[settles]即是定义,不计算分子内氢、氧彼此之间的相互作用。而如果.mdp里面设 define=-DFLEXIBLE,也就是激活了#ifdef FLEXIBLE后面那段,则不用settle算法约束结构,而是照常按照谐振势的键长键角项控制水的结构。-DFLEXIBLE开不开对溶质没什么影 响,对计算速度也没什么影响(有一丁点减慢可忽略)。除了能量最小化外,都不要用-DFLEXIBLE,因为拟和水、力场参数的时候都一般是认为水是刚性 (rigid water)情况下进行的(比如SPC水和使用SPC水的GROMOS力场),即约束住键长键角,开了FLEXIBLE实际上参数还得再作调整。而在 gmx4中,在能量最小化时自动是限制方法(restraint),就没必要设-DFLEXIBLE了,从此可忘掉它。.mdp中constraints 以及constraint_algorithm设定皆与水的约束无关,除非define=-DFLEXIBLE,否则水都是用settle算法约束住。

**冻住(freeze)彻底冻在最初坐标,一点也不动。但仍然计算于其它原子间的相互作用,所以并不会省时间,除非是写进[ exclusions ]。
使用时在.mdp里面定义比如:
freezegrps = protein   设蛋白冻住
freezedim = Y Y Y    设冻住的方向,分别对应X Y Z轴。

 

同时使用freezegrps, constraints, pressure coupling可能会有问题,不要组合使用。

注意绝对坐标与相对坐标的限制方式的不同,比如想保持一个结构的刚性,用位置限制或freeze是原地不动,而通过位置限制和约束方法对分子内的结构进行约束,结构仍然可以有整体平动和转动。应根据实际情况选择。

 

关键词: