本公众号前期发过两篇CASSCF方法计算的入门教程《用Gaussian做CASSCF计算》和《激发态计算之如何选取特定的分子轨道作为活性空间》。若有读者从未接触过CASSCF计算,建议先看上述两篇介绍。一个较为顺利的CASSCF计算强烈依赖于以下两个因素,缺一不可:
1. 做CASSCF的量化软件(良好的轨道优化算法)
2. CASSCF的初始轨道(良好的初猜)
先简要谈谈第一个因素。现今支持CASSCF方法的量化软件很多,但是收敛难易、快慢各不相同。总的来说,笔者推荐
- 第一梯队:PySCF、Molpro
- 第二梯队:OpenMolcas、ORCA、GAMESS
- 第三梯队:某最著名量化软件
其他小众的软件(如PSI4、BDF等)笔者虽然用过,但使用频率过低,因此无法对收敛性和速度给出大致判断。对于日常做多参考计算的小伙伴,建议学会使用上述软件中的至少2个,且能熟练使用至少1个。即使有良好的CASSCF初始轨道,却去搭配收敛性较差的软件,算起来仍十分痛苦。
接着谈谈第二个因素。两篇入门教程中均是基于RHF正则轨道挑选的活性轨道,来作为CASSCF的轨道初猜。这在实际应用中是比较受限的:一是因为正则轨道大多数时候是离域的,不方便看清轨道成份,对挑活性轨道造成困难。估计有不少读者曾经对文献中的轨道成份指认感到疑惑,或觉得有牵强之处。二是因为对于复杂体系(尤其是双自由基、过渡金属络合物等)RHF波函数基本都是不稳定的,描述体系电子结构定性错误,用来做初猜效果比较差。
本文介绍如何解决轨道离域的问题:使用局域轨道(也称定域轨道)。局域轨道的原理介绍请阅读《局域分子轨道简介》。关于如何在常见的量化软件中做轨道局域化,请阅读《利用常见的程序做轨道局域化》。局域轨道种类非常多,广义上讲,只要是局域在某个较小区域内的轨道均可称为局域轨道,最常见的有Boys 局域轨道、PM 局域轨道、Edmiston-Ruedenberg局域轨道等等。NBO分析中的NBO轨道和NLMO轨道通常也挺局域的。另外,GVB轨道也十分局域,可以看前期介绍《广义价键波函数(GVB)简介》。
那么在实际计算中该采用哪种局域轨道呢?答案是:没有最佳选项,哪一种局域轨道形状在当前体系下非常清晰,就采用哪种;如果都很清晰,那就都是很好的初猜,差别很小。当然,从实际操作上考虑,我们偏好选择计算量更小的、需要人工预少的、最好不用肉眼挑轨道、适合自动做多参考计算的。笔者见过有同学先做个不挑活性轨道的CASSCF计算,然后再从中挑选轨道,这样做效率极低,耗时较长。
我们仍以苯分子为例,假设我们感兴趣的是基态和最低的几个激发态,那么这就需要苯环上的6个pi电子作为活性电子,相应地有3个pi成键轨道和3个pi反键轨道,构成活性空间CAS(6e,6o),此时在没有歧义的情况下可简写为CAS(6,6)。我们先看从RHF正则轨道中挑选活性轨道的输入文件(以高斯为例),先做RHF计算:
代码语言:javascript复制%chk=benzene_cc-pVDZ.chk
%mem=8GB
%nprocshared=8
#p RHF/cc-pVDZ nosymm int=nobasistransform
title
0 1
C -0.71321321 0.04504504 0.000000
C 0.68194679 0.04504504 0.000000
C 1.37948479 1.25279604 0.000000
C 0.68183079 2.46130504 -0.001199
C -0.71299421 2.46122704 -0.001678
C -1.41059521 1.25302104 -0.000682
H -1.26297221 -0.90727196 0.000450
H 1.23145479 -0.90746796 0.001315
H 2.47916479 1.25287604 0.000634
H 1.23203079 3.41344804 -0.001258
H -1.26311621 3.41350804 -0.002631
H -2.51019921 1.25320404 -0.000862
为何加关键词nosymm int=nobasistransform留待后面再解释。算完后转化出fchk文件:
代码语言:javascript复制formchk benzene_cc-pVDZ.chk benzene_cc-pVDZ.fchk
用GaussView(其他可视化软件亦可)打开fchk文件观看轨道
可以找到上述6个轨道是以π轨道为主要成分的。此处(O)表示双占据轨道,每个双占据轨道有上2个电子,因此是6个活性电子;而(V)表示空轨道。绝大多数量化软件都是从HOMO、LUMO位置附近分别往上、往下数活性轨道,而20~23号轨道已经处于相应位置,我们还需将17号和30号轨道调换至HOMO、LUMO位置附近:
代码语言:javascript复制%oldchk=benzene_cc-pVDZ.chk
%chk=benzene_cc-pVDZ_cas1.chk
%mem=16GB
%nprocshared=8
#p CASSCF(6,6)/cc-pVDZ nosymm int=nobasistransform guess(read,alter) geom=allcheck
17 19
24 30
若读者用的是g09,可能不支持%oldchk写法,只能自己手动复制一份chk文件并重命名。这个体系相对简单,高斯可以在10圈内收敛,(在输出文件内搜索“ITN= 1”)初始能量为-230.775021 a.u.,收敛能量为-230.793004 a.u. 。这种做法有个明显的缺憾,即选出的活性轨道均离域在整个苯环上,不够直观,在复杂体系下指认经常会有歧义。接下来我们尝试用NLMO轨道,输入文件如下:
代码语言:javascript复制%oldchk=benzene_cc-pVDZ.chk
%chk=benzene_cc-pVDZ_NLMO.chk
%mem=8GB
%nprocshared=8
#p RHF/cc-pVDZ nosymm int=nobasistransform guess(read,only) geom=allcheck pop=SaveNLMOs
同样算完后观看轨道,可以发现19-24号这6个轨道恰巧就是所需的活性轨道,不用调换轨道了(其他体系未必如此正好,仍需肉眼检查),且可以对应到每一根C=C双键上。
用这6个轨道做为CASSCF初猜,输入文件如下:
代码语言:javascript复制%oldchk=benzene_cc-pVDZ_NLMO.chk
%chk=benzene_cc-pVDZ_cas2.chk
%mem=16GB
%nprocshared=8
#p CASSCF(6,6)/cc-pVDZ nosymm int=nobasistransform guess=read geom=allcheck
这次迭代了28圈才收敛。从输出文件中可以找到CASSCF计算初始能量为-230.789911 a.u.,明显比上述挑正则轨道的CASSCF初始能量-230.775021要低,更接近最终结果,说明NLMO是更好的初猜。最终收敛的能量与上述挑正则轨道的结果一样,仍为-230.793004 a.u. 当然读者也可以使用如PM局域轨道等,效果与NLMO差不多。但要注意此例不能用Boys局域轨道,因为它会混合σ-π轨道,导致找不到纯π成分的轨道,更详细请看《利用常见的程序做轨道局域化》。
这里还有个问题需要解释一下,既然笔者说NLMO轨道更好,CASSCF初始能量也较低,却为何花了28圈才收敛,而挑选的正则轨道才用了10圈?这就涉及到本文一开始提到的问题:我们正在用“第三梯队”的软件进行演示,一套好的初始轨道还要搭配好的轨道优化算法。我们可以换用OpenMolcas和Molpro再算一下,依次执行:
代码语言:javascript复制fch2inporb benzene_cc-pVDZ_NLMO.fchk
# 生成OpenMolcas的.input和.INPORB文件,相当于传轨道给OpenMolcas
fch2com benzene_cc-pVDZ_NLMO.fchk
# 生成Molpro的.inp和轨道文件,相当于传轨道给Molpro
这里用到了笔者开源的MOKIT里两个小程序fch2inporb和fch2com,这样我们就省去了在其他软件里做RHF和NLMO的重复步骤了,直接进入CASSCF计算。为了这里能成功传轨道,需要在一开始的gjf文件里加上nosymm int=nobasistransform关键词做计算。我们打开生成的两个输入文件,在末尾简单删改(即增加CAS(6,6)信息):
OpenMolcas是
代码语言:javascript复制&RASSCF
Charge = 0
Spin = 1
RAS2 = 6
nActEl= 6 0 0
FILEORB = benzene_cc-pVDZ_NLMO.INPORB
Molpro是
代码语言:javascript复制save,mo,2140.2,ORBITALS}
{CASSCF;closed,3;occ,7;NoExtra}
另外还有两个用挑选的RHF正则轨道做初猜的输入文件,就不一一展示了。算完之后汇总一下:使用NLMO做初猜,某著名量化软件/OpenMolcas/Molpro分别用了28/8/2圈;而使用经过挑选的、较为离域的RHF正则轨道作为初猜,三个软件分别用了10/10/3圈,且初始能量比前述偏高0.01489 a.u.。可以看到局域轨道作为CASSCF初始轨道还是不错的,物理图像清晰,初始能量低,搭配好的轨道优化算法可以发挥更佳的效果。
另一方面,笔者这里也展示几个CASSCF计算的错误示例,以此说明合理的初始轨道是多么重要:
反例1:像算DFT一样,上来二话不说就做CASSCF
代码语言:javascript复制#p CASSCF(6,6)/cc-pVDZ
反例2:先算个RHF,但不看轨道,直接读取RHF轨道就做CASSCF
代码语言:javascript复制#p RHF/cc-pVDZ
...
--Link1--
#p CASSCF(6,6)/cc-pVDZ guess=read geom=allcheck
还有用MP2自然轨道(但不看、不挑)直接读取就做CASSCF计算等等。感兴趣的读者可以尝试算一下,这两个文件都能正常算,也恰巧能收敛,但是收敛出的能量比正确答案-230.793004 a.u.高很多。
最后应该说明的是,虽然本文说了局域轨道这么多好处,但它不是万能的,至少有两个缺点:(1)轨道局域化会破坏原有轨道的对称性,但有些同学对对称性有严格要求,此时可以寻找软件中有没在指定的不可约表示下做局域化的功能;(2)基组变大(到TZ级别)后,局域占据轨道中仍然可以很容易辨认出成键轨道,但局域空轨道中却越来越难找出反键轨道了,因为离域程度较大。解决这个问题有两个办法:一是先在较小的基组下做计算、找活性轨道,算完小基组CASSCF然后读取波函数作为大基组的初猜;二是采用大基组空轨道投影到小基组的策略,该方法更为普适。这些以后有机会再做介绍。
注1:为了将挑选的RHF正则轨道保存到chk文件里,需要将前述的guess(read,alter)改为guess(read,alter,only,save),这样即可跳过CASSCF计算,直接保存初始轨道后结束计算。
注2:本文介绍的CASSCF计算技巧适合所有量化软件,但笔者不可能列出所有软件的输入文件,学习做CASSCF计算的读者需举一反三,自行翻阅程序手册,写出合适的关键词。必要时可以各个软件联用,即利用MOKIT提供的小程序传递轨道。