本手册已过时, 不再更新. 如果需要最新手册, 请加入下方QQ群.
A.1 混合精度或双精度
可以使用混合精度或双精度编译GROMACS. 老版本GROMACS的文档将混合精度称为“单精度”, 但选择性地使用双精度已实现很多年了. 对所有变量都使用单精度将导致精度显著降低. 尽管在“混合精度”中, 所有的状态向量, 即粒子坐标, 速度和力, 都是单精度的, 但关键变量仍是双精度的. 后者的一个典型例子是维里, 它是对体系中所有力的加和, 正负可变. 另外, 在代码的许多地方, 通过改变求和顺序或重新组合数学表达式, 我们设法避免对双精度进行算术运算. 默认配置使用混合精度, 但通过为cmake
添加选项-DGMX_DOUBLE=on
, 可以很容易地启用双精度. 双精度比混合精度慢20%到100%, 具体数字取决于运行机器的架构. 双精度会使用更多的内存和运行输入, 而且能量和全精度轨迹文件的大小几乎是混合模式的两倍.
混合精度的能量精确到最后一位小数, 力的最后一位或两位数字并不重要. 维里的精度比力的要差, 因为维里只比所有原子加和中的各个元素大一个数量级(参见B.1节). 对大多数情况, 这真的不是一个问题, 因为维里的涨落可以比其平均值大两个数量级. 对库仑相互作用使用截断会导致能量, 力和维里出现大的误差. 即便使用反应场或晶格加和方法, 误差也大于或近于因局部使用单精度导致的误差. 由于MD具有混沌性, 具有非常相似起始条件的轨迹也将迅速发散, 混合精度的发散速度高于双精度.
对大多数模拟, 混合精度足够精确. 在某些情况下, 需要使用双精度以获得合理的结果:
- 简正分析, 其中的共轭梯度或l-bfgs最小化, 计算和对角化力常数矩阵
- 长时间的能量守恒, 特别是对于大的体系
A.2 环境变量
可以使用环境变量影响GROMACS程序的运行. 首先, 在GMXRC
文件中设置的变量对运行和编译GROMACS至关重要. 以下各节列出了其他一些有用的环境变量. 通过在你的shell中设置非空值, 大多数环境变量可以起作用. 如果需要设置其他的值, 参考下面的具体要求. 你应该查看自己所用shell的文档以了解如何为当前shell设置环境变量, 或者如何为以后的shell设置配置文件. 注意, 将环境变量输出到批处理控制系统作业中的要求各不相同, 你应该查看本地文档的详情说明.
输出控制
GMX_CONSTRAINTVIR
: 打印能量项中的约束维里和力维里.GMX_MAXBACKUP
: 当尝试写到具有相同名称的新文件时, GROMACS自动备份以前文件的副本. 此变量控制备份的最大数量, 默认为99. 当设置为0时, 若输出文件已存在, 则无法运行. 当设置为–1时, 会覆盖所有输出文件, 不进行备份.GMX_NO_QUOTES
: 如果明确设置了此变量, 不会在程序结束后打印有趣的引用.GMX_SUPPRESS_DUMP
: 禁用每步的文件转储, 当(例如)约束算法失效引起体系崩溃时.GMX_TPI_DUMP
: 将相互作用能小于此环境变量设定值的全部构型转储到一个.pdb
文件.GMX_VIEW_XPM
:GMX_VIEW_XVG
,GMX_VIEW_EPS
和MX_VIEW_PDB
, 分别用于自动查看.xvg
,.xpm
,.eps
和.pdb
文件类型的命令, 默认为xv
,xmgrace
,ghostview
和rasmol
. 设置为空则禁用自动查看特定的文件类型. 命令将被分叉运行于后台, 运行时具有的优先级与GROMACS工具相同(这可能不是你想要的). 注意不要使用阻断终端的命令(例如vi
), 因为可能会运行多个实例.GMX_VIRIAL_TEMPERATURE
: 打印能量项中的维里温度GMX_LOG_BUFFER
: 用于文件I/O的缓冲区大小. 如果设置为0, 所有文件I/O都不使用缓冲, 因此非常慢. 此变量可以方便调试, 因为它能保证所有文件始终是最新的.GMX_LOGO_COLOR
: 设置ngmx
标志的显示颜色.GMX_PRINT_LONGFORMAT
: 当打印十进制数值时使用长浮点格式.GMX_COMPELDUMP
: 仅用于计算电生理学设置(参见6.6节). 初始结构转储到.pdb
文件, 这样可以检查多聚体通道的PBC表示是否正确.
调试
GMX_PRINT_DEBUG_LINES
: 设置后, 打印调试的行号信息.GMX_DD_NST_DUMP
: 转储当前DD到PDB文件的间隔步数(默认为0). 仅对区域分解有效, 因此典型的值为0(从不), 1(每DD相)或nstlist
的倍数.GMX_DD_NST_DUMP_GRID
: 转储当前DD格点到PDB文件的间隔步数(默认为0). 仅对区域分解有效, 因此典型的值为0(从不), 1(每DD相)或nstlist
的倍数.GMX_DD_DEBUG
: 每个区域分解的通用调试触发器(默认为0, 意味着禁用). 目前只检查全局-局部原子索引映射的一致性.GMX_DD_NPULSE
: 覆盖所用的DD脉冲数(默认0, 意味着不覆盖). 通常为1或2.
性能和运行控制
GMX_DO_GALACTIC_DYNAMICS
: 设置此环境变量可启用行星模拟(只是为了好玩), 允许在.mdp
文件中设置epsilon_r = -1
. 正常情况下,epsilon_r
必须大于零, 以防止出现致命错误. 参见www.gromacs.org上行星模拟的输入文件的例子.GMX_ALLOW_CPT_MISMATCH
: 设置后, 如果在.tpr
文件中的系综设置与.cpt
文件中的不匹配, 运行也不会退出.GMX_CUDA_NB_EWALD_TWINCUT
: 强制使用双程截断内核, 即使PP-PME负载均衡后rvdw=rcoulomb
. 会自动切换到双程截断内核, 所以此变量只能用于校准.GMX_CUDA_NB_ANA_EWALD
: 强制使用解析的Ewald内核. 只能用于校准.GMX_CUDA_NB_TAB_EWALD
: 强制使用表格的Ewald内核. 只能用于校准.GMX_CUDA_STREAMSYNC
: 在启用ECC功能的GPU上强制使用cudaStreamSynchronize, 由于在API v5.0 NVIDIA驱动程序(30x.xx以前版本)中存在一个已知的CUDA驱动程序缺陷, 会导致性能下降. 不能与GMX_NO_CUDA_STREAMSYNC
同时设置.GMX_CYCLE_ALL
: 运行时对所有的代码进行计时. 不兼容线程.GMX_CYCLE_BARRIER
: 在每个循环启动/停止调用前调用MPI_Barrier.GMX_DD_ORDER_ZYX
: 设置构造区域分解格胞的顺序为(z, y, x), 而不是默认的(x, y, z).GMX_DD_USE_SENDRECV2
: 在约束和vsite通信时, 使用一对MPI_SendRecv
调用代替两个同步的非阻塞调用(默认为0, 意味着不使用). 对一些MPI实现可能会更快.GMX_DLB_BASED_ON_FLOPS
: 基于flop计数进行区域域分解的动态负载均衡, 而不是基于测量到的流逝时间(默认为0, 意味着禁用). 这使得负载均衡可重复, 对调试很有帮助. 值为1时使用flop; 对>1的值将添加(值–1)*5%的噪声到flop, 以增加不均衡性和标度.GMX_DLB_MAX_BOX_SCALING
: 每区域分解负载平衡步中所允许的盒子缩放的最大百分比(默认为10)GMX_DD_RECORD_LOAD
: 运行结束时记录DD负载统计报告(默认为1, 意味着启用)GMX_DD_NST_SORT_CHARGE_GROUPS
: 重新排序电荷组的间隔步数(默认为1). 只在区域分解中起作用, 所以典型值应为0(从不), 1(每次区域分解), 或nstlist
的倍数.GMX_DETAILED_PERF_STATS
: 设置后, 会打印更详细的性能信息到.log
文件. 输出结果的方式类似于4.5.x版本的性能总结, 因而可能对那些使用脚本解析.log
文件或标准输出的人有用.GMX_DISABLE_SIMD_KERNELS
: 禁用特定架构SIMD优化(SSE2, SSE4.1, AVX等)的非键内核, 因而强制使用普通的C内核.GMX_DISABLE_CUDA_TIMING
: 当时间步长较短时, 对异步执行的GPU运算进行计时会有不可忽略的开销. 在这种情况下禁用计时能够提高性能.GMX_DISABLE_GPU_DETECTION
: 设置后, 禁用GPU检测, 即使mdrun
支持GPU.GMX_DISABLE_PINHT
: 当采用英特尔超线程时, 禁止将连续线程分配到物理内核. 由mdrun -nopinht
控制, 因而此环境变量可能会被移除.GMX_DISRE_ENSEMBLE_SIZE
: 距离约束系综平均的体系数目. 整数值.GMX_EMULATE_GPU
: 不使用GPU加速函数, 而是使用算法等价的CPU引用代码模拟GPU运行. 因为CPU代码较慢, 设置此变量仅用于调试. 如果使用GMX_NO_NONBONDED
关闭非键计算, 会自动触发, 将不会调用非键计算, 但也会跳过CPU-GPU转移.GMX_ENX_NO_FATAL
: 当在.edr
文件中遇到损坏的帧时禁止退出, 允许使用直到损坏的所有帧.GMX_FORCE_UPDATE
: 调用mdrun -rerun
时更新力.GMX_GPU_ID
: 与mdrun
选项-gpu_id
的设置方式相同,GMX_GPU_ID
环境变量允许用户指定不同GPU的ID, 用于选择集群中不同计算节点上不同的设备. 不能与-gpu_id
一起使用.GMX_IGNORE_FSYNC_FAILURE_ENV
: 允许mdrun
继续运行, 即使文件丢失.GMX_LJCOMB_TOL
: 当设置为浮点值时, 覆盖力场浮点参数的默认容差1e–5.GMX_MAX_MPI_THREADS
: 设置mdrun
可以使用的最大MPI线程数.GMX_MAXCONSTRWARN
: 当设置为–1时, 即便产生了很多LINCS警告,mdrun
也不会退出.GMX_NB_GENERIC
: 使用通用的C内核. 如果使用基于组的截断并将GMX_NO_SOLV_OPT
设为true, 就应该设置此变量, 从而禁用溶剂优化.GMX_NB_MIN_CI
: 在GPU上运行时使用的邻居列表平衡参数. 对小的模拟体系, 为了改进多处理器的负载平衡从而提高性能, 设置目标配对列表的最小数目. 必须设置为正整数. 默认值是针对NVIDIA的Fermi和Kepler类型GPU进行优化的, 所以正常使用时无须改变, 但对于未来的架构可能有用.GMX_NBLISTCG
: 使用基于电荷组的邻居列表和内核.GMX_NBNXN_CYCLE
: 设置后, 打印详细的邻居搜索循环计数.GMX_NBNXN_EWALD_ANALYTICAL
: 强制使用解析Ewald的非键内核, 与GMX_NBNXN_EWALD_TABLE
互斥.GMX_NBNXN_EWALD_TABLE
: 强制使用表格Ewald的非键内核, 与GMX_NBNXN_EWALD_ANALYTICAL
互斥.GMX_NBNXN_SIMD_2XNN
: 强制使用 2x(N+N) SIMD CPU非键内核, 与GMX_NBNXN_SIMD_4XN
互斥.GMX_NBNXN_SIMD_4XN
: 强制使用 4xN SIMD CPU非键内核, 与GMX_NBNXN_SIMD_2XNN
互斥.GMX_NO_ALLVSALL
: 禁用优化的 all-vs-all 内核.GMX_NO_CART_REORDER
: 用于初始化区域分解通信器. 默认等级重排序, 但可利用此环境变量关闭.GMX_NO_CUDA_STREAMSYNC
: 与GMX_CUDA_STREAMSYNC
相反. 当开启ECC功能的GPU使用V5.0以前版本的CUDA驱动程序API时, 禁用基于标准cudaStreamSynchronize的GPU等待以提高性能.GMX_NO_INT
,GMX_NO_TERM
,GMX_NO_USR1
: 分布禁用对SIGINT, SIGTERM, SIGUSR1信号进行处理.GMX_NO_NODECOMM
: 不使用独立的节点间和节点内的通讯器.GMX_NO_NONBONDED
: 跳过非键计算; 可用于估计增加GPU加速器到当前硬件设置带来的可能的性能增益-假定完成非键计算的速度足够快, 同时CPU进行键合力和PME计算.GMX_NO_PULLVIR
: 设置后, 不将维里的贡献添加到COM牵引力.GMX_NOCHARGEGROUPS
: 禁用多原子电荷组, 即, 分配所有非溶剂分子中的每个原子到其自己的电荷组.GMX_NOPREDICT
: 不预测壳层位置.-
GMX_NO_SOLV_OPT
: 关闭溶剂优化; 如果启用了GMX_NB_GENERIC
会自动进行. GMX_NSCELL_NCG
: 每个邻区搜索格胞的理想电荷组数被硬编码为10. 将此环境变量的值设置为任何其它的整数会覆盖硬编码的值.GMX_PME_NTHREADS
: 设置OpenMP或PME的线程数(覆盖mdrun
的猜测值).GMX_PME_P3M
: 使用P3M优化的影响函数, 而不是平滑的PME B样条内插.GMX_PME_THREAD_DIVISION
: 在三个维度上以“X Y Z”格式对PME线程进行划分. 每一维度上线程的总和必须等于PME线程的总数(在GMX_PME_NTHREADS
之间设置).GMX_PMEONEDD
: 如果x和y方向上区域分解格胞的数目都为1, 对PME进行一维分解.GMX_REQUIRE_SHELL_INIT
: 需要初始化壳层位置.GMX_REQUIRE_TABLES
: 需要使用表格库仑和van der Waals相互作用.GMX_SCSIGMA_MIN
: 用于软核 \(\s\) 的最小值. 注意, 此值在.mdp
文件中使用sc-sigma
关键词进行设置, 而此环境变量可用于重现4.5前的版本对此参数的行为.GMX_TPIC_MASSES
: 应包含用于测试粒子插入空腔时的多个质量. 最后一个原子的质量中心用于插入空腔.GMX_USE_GRAPH
: 对键相互作用使用图形.GMX_VERLET_BUFFER_RES
: Verlet截断方案中缓冲区大小的分辨率. 默认值为0.001, 但可以被此环境变量覆盖.GMX_VERLET_SCHEME
: 从基于组的方案转换为Verlet截断方案, 即使.mdp
文件中并没有将cutoff_scheme
设置为Verlet. 此变量没有必要存在, 因为mdrun
的-testverlet
选项具有同样的功能, 保留它只是为了向后兼容.MPIRUN
:g_tune_pme
使用的mpirun
命令.MDRUN
:g_tune_pme
使用的mdrun
命令.GMX_NSTLIST
: 设置nstlist
的默认值, 防止在使用Verlet截断方案启动mdrun
时改变.GMX_USE_TREEREDUCE
: 对nbnxn力约化使用树约化. 在OpenMP线程数很多时可能更快(如果内存位置很重要).
分析和核心函数
GMX_QM_ACCURACY
: Gaussian程序L510(MC-SCF)模块的精度.GMX_QM_ORCA_BASENAME
:.tpr
文件的前缀, 用于Orca计算的输入和输出文件名.GMX_QM_CPMCSCF
: 当设置为非零值时, Gaussian时QM计算将迭代求解CP-MCSCF方程.GMX_QM_MODIFIED_LINKS_DIR
: 修改的Gaussian链接的位置.DSSP
: 为do_dssp
所用, 指向dssp
可执行程序(不只是其路径).GMX_QM_GAUSS_DIR
: Gaussian的安装路径.GMX_QM_GAUSS_EXE
: Gaussian可执行程序的名称.GMX_DIPOLE_SPACING
:g_dipoles
所用的间距.GMX_MAXRESRENUM
: 设置grompp
重新编号的残基的最大数目. –1表示重新编号所有残基.GMX_FFRTP_TER_RENAME
: 有些力场(例如AMBER), 对N端和C端残基使用特定的名称(NXXX和CXXX), 像那些正常重命名的.rtp
项一样. 设置此环境变量禁用此类重命名.GMX_PATH_GZIP
:gunzip
可执行程序的路径, 为g_wham
所用.GMX_FONT
:ngmx
使用的X11字体的名称.GMXTIMEUNIT
: 输出文件中使用的时间单位, 可以为fs, ps, ns, us, ms, s, m或h.GMX_QM_GAUSSIAN_MEMORY
: Gaussian QM计算使用的内存.MULTIPROT
:multiprot
可执行程序的名称, 为程序do_multiprot
所用.NCPUS
: Gaussian QM计算使用的CPU数GMX_ORCA_PATH
: Orca的安装目录.GMX_QM_SA_STEP
: Gaussian QM计算的模拟退火步长.GMX_QM_GROUND_STATE
: 定义Gaussian表面跳跃计算的态.GMX_TOTAL
:total
可执行程序的名称, 为do_shift
程序所用.GMX_ENER_VERBOSE
: 让g_energy
和eneconv
输出更多信息.VMD_PLUGIN_PATH
: VMD插件的安装路径. 需要能够读取VMD插件认可的文件格式.VMDDIR
: 安装VMD的基准路径.GMX_USE_XMGR
: 将查看器设置为xmgr
(不推荐)以代替xmgrace
.
A.3 并行运行GROMACS
默认情况下, 将使用内置的线程MPI库编译GROMACS. 在处理单节点上线程之间的通信时, 使用此函数库比使用外部MPI库更高效. 要在多个节点, 例如一个集群上并行运行GROMACS, 你需要使用外部MPI库配置编译GROMACS. 所有的超级计算机都带有为其特定平台优化的MPI库, 也有几个好的免费MPI实现; OpenMPI通常是一个不错的选择. 注意, MPI和线程MPI支持彼此不兼容.
除MPI并行外, GROMACS还支持通过OpenMP的线程并行. MPI和OpenMP并行可以结合起来使用, 也就是所谓的杂合并行化. 在某些情况下, 杂合并行可提供更好的性能和标度.
请参看www.gromacs.org上关于不同并行方案使用和性能的详细信息.
A.4 使用GPU运行GROMACS
自4.6版本开始, GROMACS原生支持基于CUDA的GPU. 注意, GROMACS只将计算最密集的部分, 目前也就是非键相互作用, 分配到GPU上运行, MD计算的所有其他部分都是在CPU上进行的. 对CUDA代码的要求是, Nvidia计算能力≥2.0的GPU, 即至少为Fermi类. 在许多情况下, cmake
可自动检测GPU并自动配置GPU支持. 请传递-DGMX_GPU=on
选项给cmake
, 并确认已配置GPU支持, . GPU的实际使用与否在mdrun
运行时决定, 取决于是否有(合适的)GPU可用和运行输入设置. 支持GPU的可执行程序也可以只使用CPU进行模拟, 通过使用mdrun -nb cpu
强制仅使用CPU来运行模拟. 只有使用Verlet截断方案的模拟才能在GPU上运行. 为测试以前的tpr文件在GPU上运行的性能, 可以使用mdrun
的-testverlet
选项, 但因为没有进行grommp
的完整参数一致性检查, 你不应该使用此选项进行最终模拟. 在GPU上获得GROMACS的良好性能很容易, 但得到最佳性能很困难. 请查看www.gromacs.org上关于GPU使用的最新信息.