正常量化计算中,我们关心的无非就是体系的能量和结构,因此了解这两者计算的精度对把握计算可能存在的误差十分重要。在G09时代,高斯部分默认的参数不够精确,而G16把默认精度提高了一部分,这导致大家容易认为G16的默认精度参数足够了。
然而这是一个非常常见的误区,下面我们就来仔细分析一下高斯的帮助文件,看看G16到底在哪些方面精度高于G09,而在哪些方面依然需要我们手动的提高计算精度。
太长不看版:
- G09和G16有同样的几何结构优化收敛限,根据任务类型、机时资源可酌情添加opt=tight;
- G09和G16有同样的SCF收敛限,绝大多数情况下无需修改;
- G16的默认积分精度比G09高一级,但只对能量计算使用ultrafine格点,对频率计算使用的是较粗糙的格点,手动添加int=ultrafine关键词可以提高频率计算的精度,对G16来说并非冗余关键词,加之几乎不增加任何机时消耗,不加在一般情况下应当不影响能量。但想拟合实验测得的振动频率时G09必须添加、G16建议添加int=ultrafine关键词提高频率计算的精度。
在能量的计算、几何结构优化和频率分析中涉及许多影响计算精度的参数,包括:
- 积分精度:int=ultrafine等
- SCF收敛限:scf=tight或scf=conver=8
- 几何结构优化收敛限:opt=tight等
我们来对比一下G09和G16的默认设置:
G09 | G16 | |
---|---|---|
opt=tightness | normal1 | normal1 |
scf=tightness | tight2 | tight2 |
Int=griddensity | fine/coarse3 | ultrafine/sg13 |
1normal不是opt的一个关键词,这里指的是不指定收敛限时的默认收敛限(即只写opt时的收敛限)
2scf=tight等价于scf=conver=8
3斜杠前后分别表示用于算能量的积分精度和算频率的精度
可以看到G09和G16在这几个参数上唯一的区别就是积分格点不一样,G16采用了更精细的ultrafine格点而G09用的是fine格点。这里有一个比较冷门的知识点,就是freq跟能量采用的积分格点是不一样的。格点按精细程度排序是:coarse < SG1 < fine < ultrafine < superfine,G16默认能量积分精度是ultrafine,freq用的是比fine还低的SG1格点,而G09各自还要再低一级。如果在关键词中写明int=XXX,那该格点将同时用于能量和freq的计算,因此int=ultrafine这一关键词并不像有些自以为了解高斯参数设定的人认为的那样对于G16是完全冗余的关键词。
自然而然的,了解这一设定对频率和自由能的计算会产生多大影响就是十分重要的。对于简单分子而言,使用高斯默认的参数通常都不会太差,不过考虑到freq是一个“单点计算”(除非你很有钱用得起opt=calcall),积分只用算一次且在freq的计算过程中并不是主要的计算量消耗。因此我不能理解高斯究竟是出于什么考量对freq默认用了明显降低的积分精度(降低了两个层次,Fine格点对于能量计算在部分情况下已经开始不准了,SG1是更粗糙的积分格点)。
考虑到对势能面平缓的分子而言,力常数很小,算起来是容易有误差的,而且注意到较小的频率对自由能的校正更大,因此需要积分格点对freq计算的影响究竟有多大还需要测试。
为此,我分别用G09和G16对环戊烷构象异构化的过渡态进行了测试,计算的水平是opt=verytight M062X/def2TZVP,这里对几何结构优化用了极高的收敛限用来排除干扰,较大的基组则为了对积分精度提出一定的要求,测试结果如下:
C5H10 (TS) | 电子能/a.u. | Gibbs自由能/a.u. | 最小频率/cm-1 |
---|---|---|---|
G09 | -196.520814 | -196.406642 | -56.52 |
G09 ultrafine | -196.520850 | -196.406366 | -15.81 |
G16 | -196.520850 | -196.406366 | -16.46 |
G16 ultrafine | -196.520850 | -196.406366 | -15.81 |
从测试结果中可以看出,G09默认的Fine格点计算能量是可以接受的,误差在4e-5 a.u.左右,而自由能计算的误差达到了3e-4 a.u.,提高了一个数量级,而频率的误差更是达到了40 cm-1,如果要实验得到的振动光谱进行拟合,G09对freq默认的coarse格点显然是不够的。而G16对freq默认的SG1算出来的频率只有0.6 cm-1的误差,算自由能的误差在1e-6 a.u.以下,显示出SG1格点对于频率分析已大致足够。这里需要注意一下,虽然G09的coarse格点算自由能看起来误差并不大,在3e-4 a.u.也就是0.2 kcal/mol左右,但要注意到这个体系只有15个原子,单个振动对能量的贡献是很小的,但体系原子数多了以后,误差可以很快的积累起来。
因此G09算频率的格点是远远不够的,反而是算能量的格点看起来还可以接受。虽然G09的默认格点对M06这样的泛函不够用的事实广为流传,但究竟是能量计算的fine格点不够还是频率计算的coarse格点不够笔者还真不了解。如果读者遇到了明确对于电子能来说fine格点明显不够的体系,欢迎告知笔者,笔者很想测试一下同一体系中coarse格点对频率计算的误差。
G16无论是能量还是频率计算,格点都提高了一个数量级,对于大部分计算来说的确是足够了,不过默认格点对于频率本身的数值还是能够引起比较明显的差别的。如果不只关心振动对自由能的校正,而是想对实验测得的振动频率进行拟合,那么手动添加int=ultrafine关键词是可以提高频率计算的精度的。考虑到积分在freq任务的耗时占比很低,计算中一律加入int=ultrafine关键词也并不会有什么危害。
G16比G09算得更准这一传言流传过于广泛,导致除了int=ultrafine以外,有些人还会误以为G16的其它默认参数也比G09更准,从而盲目地相信默认参数的结果。但以上三大参数中只有积分格点G16是真的比G09高,其它参数是一样的。
高斯的SCF收敛限在常见量化软件中几乎是最高的,因此很少会有使用SCF关键词调节收敛限的需求。而高斯的几何结构优化收敛限只能说一般够用,但对于过渡态、激发态等能量对结构比较敏感的任务的时候,抑或分子柔性很大优化过程很慢只是堪堪达到收敛限的时候,此时加上opt=tight还是必要的。
笔者最近有遇到了一个有对称性的柔性分子,但是初始坐标没有进行对称化,在默认的收敛标准下分子因为过于柔性导致肉眼可见的偏离对称结构,分子轨道系数中原本对称的部分的贡献有明显的不同,进而导致激发态的计算出现问题。后来将初始结构做了对称化后就没问题了。
当然,opt=tight确实会显著增加计算的时间,因此需要对成本和收益之间进行一定的平衡,大部分情况下,默认收敛限对应的精度确实是可以接受的,笔者在这里想提醒的是,在计算遇到问题的时候切勿盲目自信G16默认算的足够准了。
总结一下:笔者的建议是无论是G09还是G16的用户,计算时都加上opt=tight以及int=ultrafine这两个关键词,这两个关键词的存在对计算而言并非必要,而是为了减少可能出现的问题。
对于不了解计算过程的细节、不会根据报错进行debug的大部分用户而言,它们可以在一定程度上减少意料之外的问题出现的可能性。这两个关键词中,前者对于计算量是有一定增加,而后者几乎不增加任何计算量,在算力爆炸性增长的现在,前者带来的计算量的增长也并不是消耗不起的,但想节省机时的小伙伴可以酌情添加。