仓库源文站点原文


layout: post title: GROMACS QM/MM教程1:QM/MM方法的实现 categories:


【李继存 注】此文档年代久远, 且与现行GROMACS版本有所脱节, 但其中所述原理仍有参考价值, 故在此整理, 以为备份.

在QM/MM方法中, 一部分体系使用量子力学(QM, quantum mechanical)方法进行处理(非常耗时), 另一部分体系使用基于力场的标准分子力学(MM, molecular mechanics)方法进行处理. GROMACS通过提供与外部QM程序的接口支持这种杂化的量子力学/分子力学方法.

GROMACS目前提供了与GAMESS-UK, Gaussian0X, mopac7以及ORCA四种量化计算软件的QM/MM接口. 这里我们将简单概述GROMACS的QM/MM功能, 几个示例以及相关源代码的修改及编译. GROMACS的QM/MM仍处于开发阶段, 这里的说明可能需要更新. 因此, 本文档只适用于那些愿意尝试和测试的用户.

GROMACS的QM/MM功能概述

QM方法

QM基组

优化类型(需要测试)

动力学类型

QM/MM边界类型

GROMACS的QM/MM示例

源代码修改及编译

自3.3版本起, GROMACS默认支持QM/MM功能, 可以访问我们的GROMACS网页下载. 下面给出的是非常古老的版本, 我们不再支持. 强烈推荐使用官方新发布的版本.

为激活GROMACS与量化程序的QM/MM接口, configure时需要使用--with-qmmm-<QM PROGRAM NAME>选项.

在编译GROMACS的时候你同样需要ORCA, mopac7, gaussian0X和/或GAMESS-UK的源代码. 由于这些源代码各自属于他们的版权持有人, 我们不能在这里发布它们, 因此你必须自己想办法得到它们. 下面是它们各自的网址

另外, 可以通过下面的这些方法将GROMACS的mdrun和量化程序连接起来.

ORCA

下载并按照官网说明安装好ORCA, 然后在安装GROMACS的时候加上--with-qmmm-orca选项.

当使用ORCA运行QM/MM工作时, 需要设置以下环境变量

此外, 你还需要创建一个这样的文件<BASENAME>.ORCAINFO. 比如, 你要计算的是test2.tpr, 那这个文件的名称为test2.ORCAINFO.

在ORCAINFO文件中必须给出计算方法, 基组以及其他所有适用于ORCA的关键词(这意味着mdp文件中的QMmethodQMbasis都会被忽略). 如果需要进行更加深入的了解, 请查询ORCA官网.

Mopac7

下载下面的文件

编译所有的mopac文件, 但mopac.f, moldat.f, deriv.f除外, 因为这些都被gmxmop.f代替了.

f77 -O2 -c *.f

然后将所有的目标文件(*.o)打包成库文件

ar rcv libmopac.a *.o
ranlib libmopac.a

如果你使用Linux系统, 也可以简单地下载上面的libmopac.a.

注意, 对于SGI内核, 你需要使用这个gmxmop.f文件并替换原先的文件. 我不知道具体原因, 在该构架下FORTRAN common公共块的处理方式似乎与通常方式不同.

然后编译GROMACS, 使用下面的选项

LIBS=-lmopac
LDFLAGS=-L<libmopac.a文件的位置>
./configure --with-qmmm-mopac

或者, 也可以修改Makefile里面的LIBS行(快但不优雅)

LIBS= ... -lmopac -lm ...

GAMESS-UK

下载需要的文件

将以上文件添加到GAMESS-UK/m4子目录, 更新Makefile使其与你的系统配置相匹配, 然后编译代码.

接着编译GROMACS, 使用下列选项

LDFLAGS=-L<libgamess.a文件的位置>
LIBS='-lgamess -lg2c -lm'
./configure --with-qmmm-gamess

或者, 也可以修改Makefile里面的LIBS行(快但不优雅)

LIBS= ... -lgamess -lg2c -lm ...

Gaussian03/09

使用GROMACS和高斯进行QM/MM计算有两种方法.

一种方法是使用我们提供的一个脚本gau(你可能要对脚本稍加修改). 这个脚本首先读取并修改GROMACS生成的输入文件, 然后调用高斯程序进行计算, 最后提取相应的能量和梯度信息, 并将其写入一个文件供GROMACS读取. 对那些无法获得高斯源代码, 且不熟悉编程的用户, 推荐使用这种方法. 尽管如此, 理解这个脚本的处理步骤和含义仍然很有必要. 因为根据操作系统的不同, 你可能需要对脚本进行少量调整才能顺利地使用它进行QM/MM计算.

<del>要使用这个脚本, 需要将环境变量`GAUSS_DIR`设置为这个脚本所在的目录, 还需要将环境变量`GAUSS_EXE`设置为这个脚本的名称. 另外, GROMACS还需要设置`DEVEL_DIR`环境变量, 但这个环境变量一般会被忽略.</del>【李继存 注】此段论述不适用于GROMACS的新版本, 具体设置参考后续博文GROMACS QM/MM教程2: 编译设置及简单运行.

另一种方法需要对高斯的301, 510, 701和9999链接进行修改. 由于不能在这里发布高斯的相应源代码, 我们在下面给出一些说明以便让那些拥有高斯源代码的用户可以自己进行修改和编译. 注意在包含所需的修改前, 二进制的高斯程序不能使用.

高斯提供了一种便捷的方法来构建和使用修改后的链接. 首先创建一个子目录, 例如命名为modlinks, 以便在里面建立所有需要修改链接的目录. 然后从高斯源代码树中提取出那些需要修改的函数, 并将其放入相应的目录, 最后将你的目标文件和高斯的原始目标文件进行连接, 建立一个新的可执行文件. 这样如果输入文件中有类似%subst lxxx /home/user/modlinks/lxxx的命令, 高斯就会忽略原本的lxxx.exe而使用你修改后的文件.

GROMACS需要使用点电荷上的梯度, 所以需要对1701.exe进行修改. 同时为了GROMACS能使用这些梯度, 控制高斯输出的l9999.exe也需要进行修改. 此外, 也需要对l301.exe稍加修改, 以便忽略点电荷之间的相互作用. 最后, 如果进行激发态动力学模拟, 还需要修改控制MCSCF的l510链接.

modlinks目录中为这些链接创建目录:

~/modlinks/l301
~/modlinks/l510
~/modlinks/l701
~/modlinks/l999

必须构建修改后的可执行程序, 所以, 每个lxxx子目录下都需要一个makefile文件. 这里有一个1301.make的例子.

使用高斯的gau-fsplit命令可以很方便地提取需要修改的子程序:

gau-fsplit -e dle $GAUSS_DIR/1701.F

可以使用grep命令找到含有需要修改函数的FORTRAN源文件.

grep –I dle $GAUSS_DIR/*.F

这里有一个关于哪些函数需要修改, 如何修改的介绍roadmap.pdf. 修改完链接后, 通过--with-qmmm-gaussian重新编译GROMACS, 并将DEVEL_DIR环境变量设置为modlinks子目录, GROMACS就可以和高斯联用进行QM/MM模拟了.