一、软件简介:
Gaussian是做半经验计算和从头计算使用最广泛的量子化学软件,可以研究分子能量和结构、过渡态的能量和结构、化学键以及反应能量、分子轨道、偶极矩和多极矩、原子电荷和电势、振动频率、红外和拉曼光谱、NMR、极化率和超极化率、热力学性质、反应路径等。Gaussian软件可以计算气相和溶液中的体系,模拟基态和激发态,还可以对周期边界体系进行计算,是研究诸如取代效应、反应机理、势能面和激发态能量的有力工具,在化学、物理、生物和材料科学领域有非常广泛的应用。
二、软件版本说明
目前最新版本为Gaussian 16 Rev. C.01/C.02
上一版本相比:
- 修订版 C.02 是支持 NVIDIA A100 (Ampere) GPU 和 NVIDIA SDK 编译器版本 21.3 的更新。对于所有使用新编译器x86_64平台,源代码的生成过程都已更改。除了 A100 GPU 支持外,生成的二进制文件还提供与修订版 C.01 相同的功能。
- Gaussian 16 可以在 Linux 下使用 NVIDIA K40、K80、P100 (Rev. B.01)、V100 (Rev. C.01) 和 A100 (Rev. C.02) GPU。早期的 GPU 不具备运行高斯 16 算法的计算能力或内存大小。
- 支持为作业分配内存
- 支持为GPU分配或绑定对应的cpu
- Gaussian 16 Rev. C.01修复了以下错误或bug
- 修复了使用多个入射光频率进行拉曼或 ROA 时 Freq=Anharmonic 的问题。
- 修复了与高角动量和纯 DFT 函数并行运行的内存分配,以及集群并行性的一些异常情况。
- DFTB 参数文件中的文档被正确跳过。
- 修复了在过早死亡的作业的检查点文件上运行 chkchk 的问题。
- 修复了PM7R6中大分子杂交项的性能问题。
- GVB代码中占用轨道数的限制已增加到1000个,并且修复了FMM和GVB对大分子的一些问题。
- 修复了 Grimme(D2 或 D3)色散和幽灵原子的问题。
- 修复了 Punch=MO 和 chkchk -p 打印的轨道能量问题。
- 修复了 -fck=(在 Windows 系统上为 /fck=)命令行参数的默认文件扩展名的处理,因此默认值为 .fck,但指定其他扩展名(如 .fchk)也可以。
- 在一般基数输入中指定命名基时的一些错误现在被识别出来,这些错误以前没有被发现。
- 修复了在 Windows 上使用 / 而不是 – 指定选择 ONIOM 子计算到 chkchk、copychk 和 formchk 的选项的问题。
- 修复了在 ONIOM 模型系统计算期间对文件运行 formchk 的问题,或在模型系统计算期间停止的 ONIOM 作业中的检查点文件上运行 formchk 的问题。
- 修复了格式化检查点文件中 MM 参数值不完整或错误的问题。
- 当密度拟合也在使用时,Field=Read 不再尝试读取字段值两次。
- 修复了在路由上解析裸 CBSB7 时的错误,将其视为暗示 CBS 外推而不是命名基集。
- 更正了为 SCF=Conventional 的 CIS 生成的路由中的各种错误默认值。
- 修复了存在幽灵原子时 Guess=Read 的问题。
- Punch=GAMESS 现在适用于 H 和更高级别的函数。
- -2 代替 Tv 用于原子规范输入部分的转换向量再次起作用。
- 修复了为具有长线性原子链的分子生成内部坐标的一些问题。
- 当指定了两个电子积分的非常小的阈值时,在进行单电子导数时存在一个问题。
- 修复了导致指定非默认 SCF 后窗口(例如 MP2=FreezeG2)的 Opt+Freq 作业在频率步长中失败的问题。
- 修复了对 incore 内存需求的低估,这可能导致作业默认为 incore,然后内存不足的问题已得到修复。
三、安装方法
Gaussian是商业软件,对中国用户不提供源码,只能购买到已经编译好的二进制可执行文件。对于x86_64平台,Gaussian公司通常提供两种编译好的版本,一个是用PGI编译的,另一个是用Ifort编译的。实际测试表明,无论是采用AMD CPU还是Intel CPU,Ifort编译的版本都比PGI编译的性能好一些。
四、上传文件
上传压缩包G16-C01-AVX2.tbz到/public/software目录下。
五、解压缩
由于Gaussian软件仅提供已编译好的可执行文件,因此安装过程比较简单,基本上解压缩就可以。不过需要注意的是,Gaussian程序运行的时候会检查自身文件属性,需保证最终用户和Gaussian程序的群组一致,否则无法运行。通常我们会先创建一个群组属性为users的新用户(例如名为gauss),在/public/software目录下创建好安装目录(默认目录名为g16),并将此目录赋予gauss用户所有,然后切换到gauss用户进行软件的安装和维护。
[root@node1]# cd /public/software
[root@node1]# mkdir g16
[root@node1]# chown gauss:users g16
[root@node1]# su gauss
[gauss@node1]$ tar zxf G16-C01-AVX2.tbz #切换目录
[gauss@node1]$ cd G16-C01-AVX2
[gauss@node1]$./bsd/install
安装成功后会有提示
#创建安装目录
#将此目录赋予gauss用户所有
#切换到gauss用户
#解压缩g10安装包
接下来创建环境变量文件(/public/software/g16/g16-env.sh),内容如下:
export g16root=/public/software
export GAUSS_SCRDIR=/tmp
source $g16root/g16/bsd/g16.profile #注意指向的是g16上一级目录
#指定缓存文件目录
#读取相应的环境变量
环境变量配置文件g16.profile内容如下:
cat g16.profile
export g16root=/home/user/
export PATH=$PATH:$g16root/g16/bsd
export GAUSS_EXEDIR=$g16root/g16
export GAUSS_SCRDIR=$g16root/g16/scratch
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$g16root/g16/bsd
source $g16root/g16/bsd/g16.profile
六、运行软件并测试
Gaussian软件的并行计算采用OpenMP方式实现,使用方法简单,在共享内存的机器上能获得很好的性能。尽管Gaussian可以借助TCP Linda软件实现多机并行,但目前这种计算模式无法支持IB网络,并行效率较低,因此我们通常不推荐用户做跨节点运算。
正常情况Gaussian软件包解压后,会有一个tests子目录,里面有大量的标准算例文件和计算结果(Linux下Gaussian程序输入文件的后缀名通常为.com,输出文件的后缀名通常为.log)。不过tests目录比较占空间,有些版本的压缩包为了网络传输方便,也可能删除了此目录。
由于Gaussian软件的计算参数均在输入文件中设置,在此简单介绍一下输入格式。在终端下直接运行Gaussian程序,可以从tests目录下复制标准算例,也可以按照以下内容新建一个文件作为输入,注意其中空行都不可省略:
%nproc=2 #并行的线程数
%mem=128MB #允许使用的最大内存数量
# hf/6-31g #指定计算方法
#空行,不可省略
water test #注释行,任务说明
0 1 #空行,不可省略
O #以下为体系的三维结构描述
H 1 B1
H 1 B2 2 A1
B1 0.96
B2 0.96
A1 109.50
#空行,表示输入结束
接下来切换到test用户,进行试算:
[root@node1]# su - test
[test@node1]# mkdir -p gaussian_test #创建测试目录
[test@node1]# cd gaussian_test #切换目录
[test@node1]# vi h2o.com #创建输入文件,内容见上文
[test@node1]# cp /public/software/g16/tests/com/test000.com ./ #或者复制输入文件
[test@node1]# source /public/software/g16/g16-env.sh #载入g09环境变量
[test@node1]# /public/software/g16/g16 < h2o.com > h2o.log #切换用户 #开始计算
七、使用pbs或slurm脚本提交作业测试
Gaussian软件的PBS脚本模板如下,由于该软件计算完成之后仅输出总的时间(所有CPU时间之和),不够直观,因此我们在脚本中分别读取作业开始和结束时间,用于统计Gaussian计算的持续时间:
#PBS -N gaussian
#PBS -l nodes=1:ppn=8
#PBS -j oe
#PBS -l walltime=1000:00:00
cd $PBS_O_WORKDIR
JOB=h2o.com #指定输入文件名
JOBNAME=`basename "$JOB" .com`
STARTTIME=`date` #获取作业开始时间
STIME=`date +%s`
source /public/software/g16/g16-env.sh #读取环境变量
/public/software/g16/g16 < $JOB > "$JOBNAME.log" #开始计算
echo >>"$JOBNAME.log"
echo g16 job started: $STARTTIME >>"$JOBNAME.log" #输出作业的时间信息
echo g16 job finished: `date` >>"$JOBNAME.log"
let ETIME=`date +%s`-$STIME
echo Elapsed time: $ETIME >>"$JOBNAME.log"