|||
众所周知,做振动分析之前必须先在相同级别下优化。总有Gaussian使用者问,优化收敛了,也显示四个YES了,怎么做freq之后四个收敛判断标准却有的出现NO,甚至还出现虚频了?这里简单说一下。
牛顿法,是高效、最常用的寻找多元函数驻点的方法,在量化研究中,这个方法被广泛用来搜索过渡态和优化几何结构。然而,牛顿法的每一步需要计算一次Hessian矩阵,也就是能量对几何坐标的二阶导数矩阵,如果进一步考虑质量权重后就是所谓的力常数矩阵。对于较高计算级别或大体系,计算一次Hessian矩阵是相当耗时的,另外很多方法在Gaussian里没有解析二阶导数(如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使用更高精度的积分格点,效果会明显更好(注:从G16开始int=ultrafine已成为默认)。这样来解决出现NO和虚频对计算耗时增加不太多(百分之几十),不过也有可能会由于震荡而很难达到这个很严的收敛限。如果不了解什么是DFT的积分格点,可参看《密度泛函计算中的格点积分方法》(http://sobereva.com/69)。
注:如果是用的明尼苏达系列泛函(比如M06-2X等),有时候在ultrafine下依然会因为积分格点精度问题导致很微小的虚频,此时应尝试更高档次的积分格点int=superfine。
注:如果写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比较远了。
注:从G16开始,opt里加入了一个很有用的选项recalc。比如opt=recalc=n,就代表第一步精确计算一次Hessian矩阵,之后每n步重新计算一次Hessian矩阵。这种做法的效果和耗时都介于calcfc和calcall之间。一般情况,n取3~5比较合适,能达到效果和耗时的权衡。
有时候虚频是由于优化所用的初始结构对称性太高导致的。比如联苯在基态下实际上两个苯环间是有一定二面角的,但优化联苯所用的初始结构如果是纯平面的,则优化过程就会一直保持平面状态,最终也得到平面构型,显然会发现有对应于两个平面彼此间扭转的虚频。碰到这种情况,最佳的解决方法是在gview观看振动模式的界面中选中虚频模式,选上Manual Displacement并拉动滑条来沿着虚频模式略微调整结构,然后点save structure得到新的结构,再拿这个新结构保存新的输入文件,重新优化和做振动分析后通常就已经没虚频了。有时候对于大体系,也可能因为某些局部区域的初始对称性太高,一直维持到最后而出现虚频,这时候也应按照虚频调节结构。对于其它情况,这么按照虚频调节结构的做法解决虚频的几率比较有限,虽然也可以尝试一下。而对于有多个虚频的情况,想通过这种做法一次性就把所有虚频都解决没太大可能。(我经常看到网上有很多人但凡只要看到虚频就总是妄图通过这种办法试图消掉,这是明显不对的)
另外再提一下,实际上,优化过程只要力收敛了,即便位移没收敛,但只要受力小于收敛限的100倍也自动被Gaussian算作收敛,这主要考虑势能面非常非常缓的大的柔性分子,相对于这样尺度的分子,收敛到那么精确意义也不大,这样可避免收敛太慢。这种情况下,连opt最后都有NO,显然freq最后也肯定有NO。解决方法同上面(1)、(2)。
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时基于牛顿法判断出的位移有所不同
转载于http://sobereva.com/278
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-24 14:19
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社