加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

opt收敛 freq不收敛

(2016-04-06 10:24:10)

Gaussian中几何优化收敛后Freq时出现NO或虚频的原因和解决方法

文/Sobereva(3)

First release: 2015-Jan-16   Last update: 2016-Jan-27


众所周知,做振动分析之前必须先在相同级别下优化。总有Gaussian使用者问,优化收敛了,也显示四个YES了,怎么做freq之后四个收敛判断标准却有的出现NO,甚至还出现虚频了?这里简单说一下。

牛顿法,是高效、最常用的寻找多元函数驻点的方法,在量化研究中,这个方法被广泛用来搜索过渡态和优化几何结构。然而,牛顿法的每一步需要计算一次Hessian矩阵,也就是能量对几何坐标的二阶导数矩阵,如果进一步考虑质量权重后就是所谓的力常数矩阵。对于较高计算级别或大体系,计算一次Hessian矩阵是相当耗时的,另外很多方法在Gaussian09里没有解析二阶导数(如TDDFT、CCSD、MP4等),对于这样的方法计算大体系的Hessian矩阵更是耗时甚巨甚至无法承受。因此,为了节省优化时间,一般量子化学程序默认用的都是赝牛顿法,也就是每一步不精确计算Hessian,而是只计算受力,通过受力和上一步的Hessian矩阵来近似得到这一步的Hessian矩阵。虽然赝牛顿法由于用的是近似的Hessian矩阵,比起基于精确Hessian的牛顿法需要更多步数才能找到过渡态/极小点,但由于每一步的耗时低得多(比如赝牛顿法的10步耗时可能只相当于牛顿法的1、2步),所以整体还是比牛顿法便宜得多得多,所以是大多数量化程序默认的优化方法。当Gaussian发现当前结构的受力以及位移(下一步结构相当于当前结构的变化)都收敛了,优化就停止。受力和位移都按照最大值和均方根来检测,因此共有四个判断标准,即四个都YES时就宣告收敛。

做频率计算,则必须先精确计算一次Hessian矩阵(或者读取精确的Hessian矩阵),才能经过一番处理得到频率。freq任务之后,Gaussian会自动根据当前结构的受力和现成的精确Hessian矩阵也用上述四个判断标准考察一下当前结构是否真的是极小点。

正因为几何优化默认用的是近似的Hessian矩阵,而频率计算用的是精确Hessian矩阵,因此判断收敛时,在后两项,即最大位移和均方根位移上的判断会存在差异(受力那两项是完全一致的)。常见的情况是优化的最后一步,四个标准都YES了,但是到了freq任务时,基于精确Hessian矩阵判断则发现后两个并非都YES,甚至出现了虚频,这说明优化的精度不是很高。

下面是个典型的例子,opt最后的输出为
 Maximum Force            0.000401     0.000450     YES
 RMS     Force            0.000197     0.000300     YES
 Maximum Displacement     0.001791     0.001800     YES
 RMS     Displacement     0.000951     0.001200     YES
Freq最后的输出为
 Maximum Force            0.000401     0.000450     YES
 RMS     Force            0.000197     0.000300     YES
 Maximum Displacement     0.002231     0.001800     NO 
 RMS     Displacement     0.001325     0.001200     NO

那么,opt最后都YES了但freq最后没有都YES,结果可靠么?笔者认为,如果数值比默认情况的收敛限高不太多,不超过一倍,还是可以接受的。比如上面的情况就基本可以接受。但是,如果你对频率/结构的准确度要求高,或者发现出现了虚频,则应当做更精确的优化。

避免freq最后出现NO乃至虚频,或者说让优化更精确的做法有二:
(1)几何优化时用更严的收敛限,即opt里面写上tight。对于DFT来讲,建议同时搭配int=ultrafine使用更高精度的积分格点,效果会明显更好。这样来解决出现NO和虚频对计算耗时增加不太多,不过也有可能会反复震荡很难达到这个收敛限。
注意:如果写opt=tight freq,则freq最后也会用tight标准来判断是否收敛。实际上只要能满足默认判断标准即可,不需要非得满足tight的判断标准。

(2)使用精确的Hessian矩阵。在opt里写上calcall,那么几何优化过程中每一步都会精确计算Hessian,此时几何优化和freq所用的Hessian都是一致的,因此对收敛的判断结果也是完全相同的。也就是说,只要opt最后是YES则freq最后也必然是YES,并且也可以确保无虚频。(很值得一提的是,用calcall的时候,优化任务最后会自动做振动分析,也就是说,此时实际上完全没有必要再单独用freq关键词做振动分析了。)
不过,每一步优化都精确计算Hessian太耗时。如果你之前可以已经在默认情况下优化过,可以取最后的结构重新优化,并在opt里写上calcfc,这样只在优化第一步的时候精确计算Hessian,而之后还是近似计算Hessian。这样收敛后也往往可以避免freq之后出现NO。但是如果初始结构离实际极小点太远则这么做无效,因为等到收敛时Hessian矩阵可能又偏离精确Hessian比较远了。

 

另外再提一下,实际上,优化过程只要力收敛了,即便位移没收敛,但只要受力小于收敛限的100倍也自动被Gaussian算作收敛,这主要考虑势能面非常非常缓的大的柔性分子,相对于这样尺度的分子,收敛到那么精确意义也不大,这样可避免收敛太慢。这种情况下,连opt最后都有NO,显然freq最后也肯定有NO。解决方法同上。

Gaussian中几何优化和搜索过渡态的算法很相似(除了QST2/3),上文的讨论因此对于过渡态研究也完全适用。

PS1:赝牛顿法、牛顿法在不同量子化学程序里具体实现不同,有很多数值方面的技巧和额外考虑,这里没有细谈。想了解更多的话可以看看《过渡态、反应路径的计算方法及相关问题》(http://sobereva.com/44)以及《几何优化、过渡态搜索、IRC综述与原文合集》(http://bbs.keinsci.com/forum.php?mod=viewthread&tid=105)当中的详细讨论。GDIIS法和牛顿法有一定差异,但它也同样依赖于Hessian矩阵,所以本文的讨论对GDIIS方法优化同样适用。

PS2:有人问,为什么有的时候优化时明明用了calcall,但是基于其结构再做freq任务的时候显示的判断标准却依然和优化最后一步不同,甚至又出现了NO。可能原因有三 (1)优化时用的级别、数值设定(如DFT积分格点)等因素和几何优化时不完全一致 (2)用gview读取优化的输出文件,然后又保存成freq任务的输入文件的时候,由于小数位数有限,因此造成了一点数值误差 (3)几何优化的时候用了GDIIS(默认的GEDIIS也有一定GDIIS的成份),由于这种方法预测下一步位移的时候还会参考之前步的信息,因此会和freq时基于牛顿法判断出的位移有所不同。

PS3:有时候虚频是由于优化所用的初始结构对称性太高导致的。比如联苯实际上两个苯环间是有一定二面角的,但优化联苯所用的初始结构如果是纯平面的,优化过程就会一直保持平面状态,最终也得到平面构型,显然会发现有对应于两个平面彼此间扭转的虚频。

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有