GROMACS

来自 ArchWiki

根据官方网站,GROMACS 是

一个通用的软件包,用于执行分子动力学模拟,即模拟具有数百到数百万个粒子的系统的牛顿运动方程。
它主要为生化分子(如蛋白质、脂类和核酸)而设计,这些分子具有许多复杂的键合相互作用,但由于 GROMACS 在计算非键合相互作用(通常主导模拟)方面非常快,因此许多研究组也将其用于非生物系统的研究,例如聚合物。
注意: 不应将 GROMACS 用作黑盒。强烈建议用户阅读和学习与 GROMACS 使用的方法和力场相关的科学论文

安装

安装 gromacsAUR 软件包。 请务必编辑 PKGBUILD 以适应您的系统(即,用于 MPI 或 GPU 支持)。 您可能需要在 PKGBUILD 中添加/修改的一些 CMake 选项是(参见最新的 GROMACS 安装指南

  • -DGMX_DOUBLE=ON - 如果您需要双精度,请添加此项。 根据 GROMACS 安装指南,双精度“速度较慢,通常没有用处”。 如果您设置此标志,则所有 GROMACS 程序的默认后缀都设置为 _d
  • -DGMX_GPU=value,其中 valueCUDA, OpenCL, SYCL, HIP 之一 - 为了构建 GPGPU 支持而添加。 可能需要其他几个标志; 请参阅最新的 GROMACS 安装指南。
  • -DGMX_MPI=ON - 添加此项以创建能够在多个计算节点上运行的构建。 您还需要一个 MPI 库,例如 openmpimpichAUR。 如果您不需要 MPI 支持(,您只在单台计算机上运行),则不需要此标志。 如果您设置此标志,则所有 GROMACS 程序的默认后缀都设置为 _mpi
  • -DGMX_SIMD=xxx - GROMACS 应该检测到您的处理器最佳的 SIMD 指令,因此不需要此标志。 但是,如果您遇到某种编译错误,可以在此处指定 SIMD 级别。 最新的 GROMACS 安装指南中列出了 xxx 的可用选项列表。
注意: 如果您在 Haswell 处理器上编译,您可能需要配置 makepkg 以使用 -march=native 才能成功使用 AVX2_256 指令进行编译。
  • -DGMX_X11=ON - 设置为使用 gmx view,内置轨迹查看器。 此标志需要 openmotiflibx11 软件包。
  • -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 实用程序很有用,但它们对正常模拟没有任何好处。

2019 版本以来,GROMACS 构建是可重现的

配置

默认情况下,顶层力场目录位于 /usr/share/gromacs/top。 可以通过将不同的目录设置为 GMXLIB 环境变量 来更改此设置。 如果您对力场进行修改,或者您有另一组想要使用的力场,这将非常有用。

用法

以下是基本工作流程,其中提到了大多数主要命令。 每个命令都应以 gmx 开头。 有关使用 GROMACS 的更多详细信息,请查找好的教程并阅读手册此处提供了一个有用的流程图。

提示: 每个命令都有自己的 man 页面,其中连字符代替了 gmx 和命令之间的空格。 例如,gmx pdb2gmx 的 man 页面位于 gmx-pdb2gmx

设置

模拟需要结构文件 (.gro/.pdb)、拓扑文件 (.top) 和参数文件 (.mdp)。 以下步骤说明了如何获取这些文件。

获取结构文件

可以从蛋白质数据库获取结构文件(其中包含所有粒子的坐标),或者由用户使用程序创建。

提示: 可以将任何结构文件格式(例如PDB 文件格式)与大多数 GROMACS 程序一起使用,而不仅仅是GROMACS 格式

生成拓扑

拓扑文件指示原子粒子如何相互作用。 生成拓扑文件的一种方法是使用 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(在顶层力场目录或当前目录中找到)的水模型用于用溶剂填充盒子,盒子尺寸为 XYZ。 拓扑文件 topol.top 已更新,新系统输出到 conf.gro

如果省略 -cs,则使用三点水模型。 其他可用的水结构为 tip4ptip5p

注意: 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 文件。

参数文件

应为一组模拟的每个不同步骤(例如,最小化、平衡、生产)创建参数文件。 此处提供了所有可能选项的列表。

这是一个在标准条件下运行十秒生产模拟的示例参数文件

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.mdpeql.mdpprd.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 的 thread-MPI 控制 MPI 进程和 OMP 线程。这将无法跨多个计算节点运行

$ gmx mdrun -ntmpi totalranks -ntomp openmpthreads -s topol.tpr

这里 openmpthreads 是要创建的 OpenMP 线程数。totalranks*openmpthreads 应等于处理器总数。

提示: 在 MPI 进程和 OMP 线程之间拆分模拟通常比仅使用其中一个要慢。

如果 GROMACS 在编译时启用了 GPU 支持,它会自动检测任何可用的 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,从而在两个 MPI 进程上使用每个 GPU。如果在两台 20 核机器上运行,命令将如下所示

$ mpirun -np 8 -npernode 4 --hostfile filename gmx mdrun -ntomp 5 -s topol.tpr -gpu_id 0011

如果在一台 20 核机器上使用 GROMACS thread-MPI,则如下所示

$ gmx mdrun -ntmpi 4 -ntomp 5 -s topol.tpr -gpu_id 0011
提示: 在 GPU 上运行多个模拟可能比单独运行它们更有效。为此,请使用 -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 时,会向用户显示提示,以便通过各种命令选择、组合和拆分原子组。在 make_ndx 提示符下键入 h 可获得可用命令的完整描述。

开发

GROMACS 使用 Git 进行版本控制,因此请熟悉其用法,尤其是关于 协作 的主题。要开始 贡献,您需要拥有一个带有 SSH 密钥GitLab 帐户。官方存储库位于 gromacs/gromacs,可以 fork 它。更改应作为 合并请求 提交。进行更改时,请遵循代码和提交的 样式指南

当您准备好分享您的更改时,请确保您的 HEAD 与您要贡献的分支保持最新。通常使用三个分支

  • main 用于需要代码进行较大更改的主要功能的长期开发。
  • release-x-y 用于不需要太多代码更改的功能,其中 xy 分别是下一个发布版本的主版本号和次版本号。
  • release-x-y-patches 用于对先前版本的错误修复和小文档更改。

技巧和窍门

创建非立方盒子并填充溶剂

要创建填充溶剂的非立方盒子,首先执行

$ gmx editconf -f protein.pdb -bt boxtype -d dist -o box.gro

上述命令在 protein.pdb 中的分子周围创建一个 boxtype 盒子,在每个方向上 dist 纳米处。盒子另存为 box.groboxtype 可以是 tricliniccubicdodecahedronoctahedron

然后填充溶剂

$ 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

其中 XYZ 是盒子的尺寸,单位为纳米,N 是要插入的数量。您需要使用插入的分子数量更新您的拓扑文件。

然后填充溶剂

$ gmx solvate -cs tip4p -cp box.gro -o conf.gro -p topol.top
注意: 当使用可视化程序时,您将看到一个三斜晶盒子,因为所有非立方盒子最终都在 GROMACS 中表示为三斜晶盒子。

使用非水溶剂

要将非水溶剂与标准工具(如 gmx pdb2gmxgmx solvate)一起使用,请执行以下操作

  1. 创建一个溶剂分子的结构文件和拓扑。
  2. 创建一个包含几百个溶剂分子的盒子(216 似乎是标准值),并在标准条件下对系统进行简短的平衡。
  3. 将模拟的输出结构文件 .gro 复制到 solvent.gro,其中 solvent 是您希望用于此分子的名称。将此副本放在顶级力场目录中(每个力场都有自己的目录)。
  4. 修改单个溶剂的拓扑文件,删除除 [moleculetype] 部分之外的所有内容,并将文件中的分子命名为 SOL
  5. 将拓扑文件重命名为 solvent.itp,并将其移动到它适用的力场目录。
  6. 使用此溶剂更新您希望使用的力场的 watermodels.dat(位于力场的目录中),添加溶剂。您只需添加一行,其中包含 filename shortdescription longdescription,其中 filename 省略了文件扩展名。

现在,当您运行 gmx pdb2gmx 时,此溶剂模型应该可用于适用的力场。此外,在运行 gmx solvate 时,您可以使用 -cs solvent

另请参阅

结构和拓扑数据库

  • Automated Topology Builder & Repository分子构建块和相互作用参数文件的存储库 以及 一个自动构建器,可帮助为新分子生成构建块。
  • RCSB Protein Data Bank有关蛋白质、核酸和复杂组装体的 3D 形状的信息,可帮助学生和研究人员理解生物医学和农业的各个方面,从蛋白质合成到健康和疾病。
  • SwissParam为与 CHARMM 全原子力场兼容的小有机分子提供拓扑和参数,用于 CHARMM 和 GROMACS。
  • TraPPE Parameter Database — 按分子名称搜索,或构建您自己的,以便获得 TraPPE 力场参数。请注意,有必要将参数转换为正确的单位。
  • Virtual Chemistry — 数千种分子的实验和计算结果的比较。包含 CGenFF、GAFF 和 OPLS/AA 的经过验证的拓扑输入文件。

外部库和程序

请参阅 List of applications/Science#Chemistry

开发

文档

教程