GROMACS
根据官方网站,GROMACS 是
- 一个用于执行分子动力学的通用软件包,即模拟具有从数百到数百万个粒子的系统的牛顿运动方程。
- 它主要设计用于具有大量复杂键相互作用的生化分子,如蛋白质、脂质和核酸,但由于 GROMACS 在计算通常占模拟主导地位的非键相互作用方面速度极快,许多研究小组也将其用于非生物系统(例如聚合物)的研究。
安装
安装 gromacsAUR 包。请务必编辑 PKGBUILD 以适应您的系统(例如,用于 MPI 或 GPU 支持)。您可能想在 PKGBUILD 中添加/修改的一些 CMake 选项包括(参见最新 GROMACS 安装指南)
-DGMX_DOUBLE=ON- 如果您需要双精度,请添加。根据 GROMACS 安装指南,双精度“速度较慢,通常无用”。如果设置此标志,所有 GROMACS 程序的默认后缀将设置为_d。-DGMX_GPU=value,其中value是CUDA, OpenCL, SYCL, HIP之一 - 添加以支持GPGPU构建。可能还需要其他一些标志;请参考最新的 GROMACS 安装指南。-DGMX_MPI=ON- 添加以创建能够跨多个计算节点运行的构建。您还需要一个MPI库,例如openmpi或mpichAUR。如果您不需要 MPI 支持(即,您只在单台计算机上运行),则不需要此标志。如果设置此标志,所有 GROMACS 程序的默认后缀将设置为_mpi。-DGMX_SIMD=xxx- GROMACS 应该会自动检测您处理器最佳的SIMD指令,因此通常不需要此标志。但如果您遇到某种编译错误,可以在此处指定 SIMD 级别。xxx的可用选项列表可以在最新的 GROMACS 安装指南中找到。
-march=native 以成功编译 AVX2_256 指令。-DGMX_X11=ON- 设置以使用内置的轨迹查看器gmx view。此标志需要 openmotif 和 libx11 包。-DREGRESSIONTEST_DOWNLOAD=ON- 设置以测试您的 GROMACS 构建。要运行测试,请设置您的构建以运行make check。需要 libxml2 包。-DGMX_DEFAULT_SUFFIX=OFF- 设置以关闭 MPI 或双精度构建的 GROMACS 程序的默认后缀。-DGMX_BINARY_SUFFIX=xxx和-DGMX_LIBS_SUFFIX=xxx- 分别将二进制文件和库的默认后缀设置为 xxx。
一些可能提高性能的其他包包括
- boost-libs - 外部 Boost 库 可用于为智能指针和异常处理提供更好的实现支持。
- hwloc - 通过链接 hwloc 可以改进硬件功能的运行时检测。
- lapack - 硬件优化的 BLAS 和 LAPACK 库对于少数专注于法向模式和矩阵操作的 GROMACS 工具很有用,但它们不会为常规模拟提供任何优势。
配置
默认情况下,顶层力场目录位于 /usr/share/gromacs/top。可以通过将不同的目录设置为 GMXLIB 环境变量来更改此设置。如果您修改了力场,或者您有另一套要使用的力场,这会很有用。
用法
以下是包含大多数主要命令的基本工作流程。每个命令都应以 gmx 开头。有关使用 GROMACS 的更多详细信息,请查找一个好的教程并阅读手册。一个有用的流程图在这里:here。
设置
模拟需要结构文件(.gro/.pdb)、拓扑文件(.top)和参数文件(.mdp)。以下步骤将说明如何获取这些文件。
获取结构文件
结构文件(包含所有粒子的坐标)可以从蛋白质数据库获取,或者由用户使用程序创建。
生成拓扑文件
拓扑文件指示原子粒子如何相互作用。生成拓扑文件的一种方法是使用 gmx pdb2gmx。如果您的溶质在名为 protein.pdb 的文件中,请执行以下操作
$ gmx pdb2gmx -f protein.pdb
然后,系统将提示您选择一个力场和一个水模型。系统将生成一个新的 gro 格式的结构文件(conf.gro)以及相应的拓扑文件(topol.top)。
如果您不是从蛋白质数据库获取结构文件,而是自己创建的,那么您很可能需要为您的分子创建一个残基模板文件(.rtp),并更新 .pdb 文件。OPLS 甲烷的 .rtp 文件示例可以在这里找到,其对应的 .pdb 文件可以在这里找到(两个文件均来自 James Barnett 的教程)。.rtp 文件必须放置在使用力场的力场目录中。
参见下方,了解生成或获取拓扑文件的替代方法。
创建盒子
在溶质周围创建一个充满水的模拟盒子的一种快捷方法是执行以下操作
$ gmx solvate -cp conf.gro -cs water -box X Y Z -o conf.gro -p topol.top
在上面的命令中,溶质/蛋白质的坐标最初存储在 conf.gro 中。使用 water.gro(在顶层力场目录或当前目录中找到)的水模型来填充盒子,盒子尺寸为 X、Y 和 Z。拓扑文件 topol.top 会被更新,新系统输出到 conf.gro。
如果省略 -cs,则使用三点水模型。其他可用的水模型是 tip4p 和 tip5p。
tip4p 仅仅是一组四点水模型的坐标,可以对应任何四点水模型,而不仅仅是TIP4P。添加离子
如果系统不是电中性的,通常应添加离子。例如,如果系统的净电荷为 -2,要添加两个正钠离子,请执行
$ gmx grompp -f grompp.mdp $ gmx genion -s topol.tpr -np 2 -pname Na -o conf.gro -p topol.top
然后选择对应于溶剂的索引组,该溶剂将被离子替换。-nname 参数应对应于您正在使用的力场中的一个离子。
.mdp 文件不需要与任何特定的模拟步骤对应。它仅用于为 gmx genion 生成 .tpr 文件。参数文件
应为一组模拟的每个不同步骤(例如,最小化、平衡、生产)创建一个参数文件。所有可能的选项列表在此处:here。
以下是一个标准条件下为期十秒生产运行的示例参数文件
dt = 0.002 nsteps = 5000000 nstxout-compressed = 2500 coulombtype = PME rcoulomb = 1.0 vdwtype = Cut-off rvdw = 1.0 DispCorr = EnerPres tcoupl = Nose-Hoover nh-chain-length = 1 tc-grps = System tau-t = 2.0 ref-t = 298.15 pcoupl = Parrinello-Rahman tau_p = 2.0 compressibility = 4.46e-5 ref_p = 1.0 constraints = h-bonds continuation = yes
gmx grompp 时,会输出一个带有所有选项(即使是未明确列在文件中的选项)的注释参数文件,并默认保存为 mdout.mdp。运行
基础知识
模拟通常由两部分组成,如下所述。
首先,有一个预处理步骤,读取结构文件、拓扑文件和参数文件,并将它们写入一个单独的 .tpr 文件,有时也称为拓扑文件。
$ gmx grompp -f grompp.mdp -c conf.gro -p topol.top -o topol.tpr
此处 grompp.mdp 是此模拟步骤的参数文件,conf.gro 是开始此模拟步骤的结构文件,topol.top 是拓扑文件。结构文件(.gro)在每次模拟结束时输出,因此应在继续的模拟(例如,初始平衡运行应使用前一次最小化步骤输出的结构文件)中使用 -c。
-t 标志从中读取(而不是仅使用 -c 处的结构文件),因为它包含额外信息。当同时使用 -c 和 -t 标志时,gmx grompp 会先检查检查点文件,如果找不到,则回退到指定的结构文件。在这种情况下,如果未指定结构文件,则使用默认文件名 conf.gro。接下来是实际的模拟。.tpr 文件通过主程序 gmx mdrun 读取以运行模拟。
$ gmx mdrun -s topol.tpr
gmx mdrun 会输出多个文件。要使它们具有相同的名称前缀,请使用 -deffnm 标志。通常,这两部分会为能量最小化步骤、平衡步骤和生产步骤重复进行。可能需要多个平衡步骤,特别是在启用压力耦合时。生产步骤和最后一个平衡步骤应使用完全相同的参数(.mdp),但模拟长度不同。
例如,一组由一次最小化步骤、一次平衡步骤和一次生产步骤组成的模拟可能如下所示
#!/bin/sh gmx grompp -f min.mdp -o min.tpr -c conf.gro -p topol.top gmx mdrun -deffnm min gmx grompp -f eql.mdp -o eql.tpr -c min.gro -p topol.top gmx mdrun -deffnm eql gmx grompp -f prd.mdp -o prd.tpr -t eql.cpt -p topol.top gmx mdrun -deffnm prd
此处 min.mdp、eql.mdp 和 prd.mdp 分别是最小化、平衡和生产步骤的参数文件。
加速与并行化
默认情况下,GROMACS 使用单个节点上所有可用的处理器。要跨多个节点运行,需要 MPI 库。使用 openmpi 运行 GROMACS 的形式如下
$ mpirun -np totalranks -npernode rankspernode --hostfile filename gmx mdrun -s topol.tpr
此处 totalranks 是要创建的总 MPI 进程数,rankspernode 是每个节点的 MPI 进程数,filename 是用于确定在哪些主机上运行进程的主机文件。
OpenMPI 可以与 OpenMP 一起使用,如下所示
$ mpirun -np totalranks -npernode rankspernode --hostfile filename gmx mdrun -ntomp openmpthreads -s topol.tpr
如果没有编译外部 MPI 库,可以使用 GROMAC 的线程-MPI 来控制 MPI 进程和 OMP 线程。这将无法跨多个计算节点运行。
$ gmx mdrun -ntmpi totalranks -ntomp openmpthreads -s topol.tpr
此处 openmpthreads 是要创建的 OpenMP 线程数。totalranks*openmpthreads 应等于总处理器数。
如果使用 GPU 支持编译,GROMACS 会自动检测任何可用的 GPU。MPI 进程数必须是要使用的 GPU 数量的倍数。使用 GPU 需要 Verlet 截断方案,该方案在 .mdp 文件中通过参数 cutoff-scheme 设置。命令的基本形式如下
$ mpirun -np totalranks -npernode rankspernode --hostfile filename gmx mdrun -ntomp openmpthreads -s topol.tpr -gpu_id gpuids
此处 gpuids 是列表中每个 GPU 的零基 ID。也就是说,只有一个 GPU(-np 1)时,您将使用 -gp_uid 0。如果有两个 GPU(-np 2),您将使用 -gpu_id 01。要在多个 MPI 进程上使用 GPU,只需列出其 ID 使用的次数。例如,要在两个 GPU 上使用四个 MPI 进程,将使用 -np 4 和 -gpu_id 0011,从而每个 GPU 使用两次。如果在两台二十核机器上运行,命令将如下所示
$ mpirun -np 8 -npernode 4 --hostfile filename gmx mdrun -ntomp 5 -s topol.tpr -gpu_id 0011
如果在一台二十核机器上使用 GROMACS 线程-MPI,则将是
$ gmx mdrun -ntmpi 4 -ntomp 5 -s topol.tpr -gpu_id 0011
-multi 或 -multidir 标志。另请参阅 mpirun(1) 以及 GROMACS 关于 MPI 加速和并行化的部分以了解更多选项。
重启模拟
要从检查点文件重启模拟,请执行
$ gmx mdrun -s topol.tpr -cpi state.cpt
此处 topol.tpr 是模拟中使用的原始 .tpr 文件,state.cpt 是该模拟的最后一个检查点文件。
延长模拟
要延长模拟,请创建一个修改后的 .tpr 文件并将其与 gmx mdrun 一起使用。
$ gmx convert-tpr -s topol.tpr -extend time -o tpxout.tpr $ gmx mdrun -s tpxout.tpr -cpi state.cpt
其中 time 是模拟要额外运行的时间(皮秒),topol.tpr 是与原始模拟关联的 .tpr 文件,state.cpt 是该模拟的最新检查点文件。与其使用 -extend,不如使用 -until 来指定绝对结束时间(皮秒)。
分析
工具
GROMACS 内置了许多分析工具。可以通过键入 gmx help commands 或打开 gromacs 的手册页来获取所有可能的命令列表。
一些更重要的分析命令是
gmx bar— 通过Bennett 的接受比计算自由能差估计。gmx energy— 将能量写入 xvg 文件并显示平均值。gmx rdf— 计算径向分布函数。gmx trjconv— 转换和操作轨迹文件。gmx wham— 在伞形采样后执行加权直方图分析。
参见下方,了解其他可用工具。
索引文件
索引文件在几乎所有 GROMACS 分析程序中都是可选使用的。gmx make_ndx 程序控制索引文件的创建和修改。索引文件由组名和整数索引组成,指示轨迹帧中原子位点的位置。只有当结构文件中可用的残基不能按所需方式将原子位点分组时,才需要它们。运行 gmx make_ndx 时,用户会看到一个提示,以便通过各种命令选择、合并和拆分原子组。键入 h 在 make_ndx 提示符下将获得可用命令的完整描述。
开发
GROMACS 使用 Git 进行版本控制,因此请熟悉其用法,尤其是关于协作的主题。要开始贡献,您需要拥有一个 GitLab 账户并配置好SSH 密钥。官方仓库位于 gromacs/gromacs,可以进行 fork。更改应作为合并请求提交。在进行更改时,请遵循代码和提交的风格指南。
当您准备好分享您的更改时,请确保您的 HEAD 与您想要贡献的分支同步。通常使用三个分支。
- main 分支用于需要大量代码更改的长期主要功能开发。
- release-x-y 分支用于不需要太多代码更改的功能,其中 x 和 y 分别是下一个版本的次要和次要版本号。
- release-x-y-patches 分支用于对先前版本的错误修复和小文档更改。
技巧与提示
创建非立方体盒子并填充溶剂
要创建一个填充溶剂的非立方体盒子,请先执行
$ gmx editconf -f protein.pdb -bt boxtype -d dist -o box.gro
上述命令将在 protein.pdb 文件中的分子周围创建 boxtype 类型的盒子,在每个方向上延伸 dist 纳米。盒子保存为 box.gro。boxtype 可以是 triclinic、cubic、dodecahedron 或 octahedron。
然后填充溶剂
$ gmx solvate -cs tip4p -cp box.gro -o conf.gro -p topol.top
使用多个溶质
如果您想随机插入多个溶质,请先执行
$ gmx insert-molecules -box X Y Z -ci solute.pdb -nmol N -o box.gro
其中 X、Y 和 Z 是盒子在纳米中的尺寸,N 是要插入的数量。您需要更新您的拓扑文件以包含插入的分子数量。
然后填充溶剂
$ gmx solvate -cs tip4p -cp box.gro -o conf.gro -p topol.top
使用非水溶剂
要使用非水溶剂与标准工具(如 gmx pdb2gmx 和 gmx solvate)一起使用,请执行以下操作
- 创建单个溶剂分子的结构文件和拓扑。
- 创建一个包含几百个溶剂分子(216 个似乎是标准值)的盒子,并在标准条件下对系统进行短期平衡运行。
- 将模拟输出的结构文件
.gro复制到solvent.gro,其中 solvent 是您希望用于该分子的名称。将此副本放置在顶层力场目录中(每个力场都有自己的目录)。 - 修改单个溶剂的拓扑文件,只保留
[moleculetype]部分,并将文件中的分子命名为SOL。 - 将拓扑文件重命名为
solvent.itp,并将其移动到适用的力场目录。 - 使用此溶剂更新您希望使用的力场的
watermodels.dat(位于该力场目录中),添加溶剂。您只需添加一行filename shortdescription longdescription,其中 filename 省略文件扩展名。
现在,当您运行 gmx pdb2gmx 时,该溶剂模型应该可用于适用的力场。此外,在运行 gmx solvate 时,您可以使用 -cs solvent。
参见
结构和拓扑数据库
- 自动化拓扑构建器和存储库 — 用于构建块和分子相互作用参数文件的存储库,以及一个自动化构建器,可帮助为新分子生成构建块。
- RCSB 蛋白质数据库 — 有关蛋白质、核酸和复杂组装的三维形状的信息,帮助学生和研究人员理解从蛋白质合成到健康和疾病的所有生物医学和农业方面。
- SwissParam — 为小有机分子提供与 CHARMM 全原子力场兼容的拓扑和参数,用于 CHARMM 和 GROMACS。
- TraPPE 参数数据库 — 按分子名称搜索,或自行构建,以获取 TraPPE 力场参数。请注意,有必要将参数转换为正确的单位。
- Virtual Chemistry — 比较数千种分子的实验和计算结果。包含 CGenFF、GAFF 和 OPLS/AA 的已验证拓扑输入文件。
外部库和程序
请参阅 List of applications/Science#Chemistry。
开发
- GROMACS GitLab 问题跟踪 — 项目管理页面,用于报告和跟踪 bug、问题和功能。
- GROMACS GitLab 合并请求 — 项目的代码审查系统。
文档
- GROMACS 论坛 — 非常活跃的用户求助论坛。发布前请务必阅读手册并搜索存档。
- GROMACS 手册 — 当前版本的官方 GROMACS 手册。
- GROMACS 在线参考
教程
- 官方 GROMACS 教程
- Justin Lemkul 的教程 — 包含各种不同的模拟方法(伞形采样、自由能计算等)。
- James Barnett 的教程 — 关于有机溶质模拟的几个基本教程。包括如何使用
gmx pdb2gmx处理用户创建的分子。