使用Multiwfn通过LOBA方法计算氧化态

使用Multiwfn通过LOBA方法计算氧化态

文/Sobereva  2017-Feb-22


1 原理


讨论化学体系中的原子,特别是配合物中的金属的时候经常用到氧化态(oxidation state)这个概念。这是完全人为的概念,不是可观测的。用氧化态这个概念时相当于假定所有键都是纯粹的离子键,电子在原子间转移量是精确的整数。显然,这个假定对绝大多数情况都是极为糟糕的。懂量子化学的人不爱用氧化态这个虚构的概念,因为原子电荷能明显能更真实客观地描述原子在化学体系中的实际带电状态。但氧化态这个概念不能说完全没用,它对于将物质进行分类、归属、类比还是比较有益的。

要注意原子电荷和氧化态根本没有对应关系。虽然原子电荷的计算方法多种多样,见《原子电荷计算方法的对比》(http://www.whxb.pku.edu.cn/CN/abstract/abstract27818.shtml)中的介绍,但没有任何一种原子电荷计算方法的结果能与氧化态直接联系起来,因为氧化态是把电荷转移显著人为夸大后的产物。比如OsO4大家都公认Os的氧化态是8(一般将O的氧化态当做-2然后根据体系净电荷来判断其余原子的氧化态),但是在B3LYP结合6-31G*和SDD计算的时候,几种方式算的Os的原子电荷值Mulliken=1.762、NPA=1.476、Hirshfeld=0.872、ADCH=0.939、AIM=2.540都远小于氧化态。实际中也往往会碰到这样的情形:两个配合物中,过渡金属的原子电荷只相差零点几,但按照经验判断的氧化态却相差个位数。所以不要妄图通过原子电荷判断氧化态。

有些人提出了一些通过波函数分析来计算氧化态的方式,使得氧化态不依赖于人为经验的判断,而是可以根据一定规则确切地算出来:
(1) Inorg. Chem., 50, 10259 (2011)、Polyhedron, 114, 128 (2016)
(2) Phys. Chem. Chem. Phys., 11, 11297 (2009)
(3) J. Chem. Theory Comput., 11, 1501 (2015)
其中(2)的方法称作localized orbital bonding analysis (LOBA),是所有三种方法里最简单、最容易实现的。Multiwfn从3.3.9版开始已经支持这种方法,在下面会结合实例介绍。Multiwfn程序可以在http://sobereva.com/multiwfn上免费下载,不熟悉Multiwfn的人建议看看《Multiwfn入门tips》(http://sobereva.com/167)。

LOBA方法原理很简单,思路很易懂:首先将MO转化为定域化轨道(LMO),然后依次计算各个LMO中的原子成份,若某原子对这个LMO的贡献值大于指定阈值(如50%),就认为这个LMO的电子完全归属于此原子。最后将原子的核电荷数减去归属到它上面的电子数即是其氧化态。

获得定域化轨道的方式很多,LOBA原文里表示结果对于所用的定域化方法并不敏感。对于Gaussian用户,一般就用pop=saveNLMO关键词把NLMO方法获得的定域化轨道写入chk文件中就行了。Gaussian虽然也支持Boys定域化,但用起来麻烦也不好用。

LOBA方法用的阈值有一定含糊性,多数情况用50%就行,但如果结果觉得诡异,可以适当调大再尝试,比如60%、70%。对于LOBA方法很适用的情形,感兴趣的原子的氧化态并不会随着阈值的这种程度的改变发生变化。如果结果对阈值特别敏感,则暗示LOBA方法并不适用于判断此原子的氧化态。

为了省事,Multiwfn的LOBA功能计算原子对LMO的贡献的时候用的是SCPA方法,因此绝对不能用弥散函数,否则算出来的轨道成份可能严重不合理造成LOBA的结果明显错误。详见《谈谈轨道成份的计算方法》(http://sobereva.com/131)中的讨论。


2 实例


下面的例子用到的fch文件和对应的.gjf文件都在这个文件包中:LOBA.rar

2.1 [Fe(CN)6]3-

这是很典型的氢氰酸根阴离子与铁阳离子形成的配合物。我们用B3LYP泛函,对Fe用SDD赝势基组,对配体用6-311G*基组对其优化,然后做频率分析验证无虚频,并且用pop=saveNLMO关键词使得最后产生的chk里面记录的是NBO模块做NLMO分析后产生的NLMO轨道,因此关键词为#p b3lyp/genecp opt freq pop=saveNLMO,然后坐标末尾空一行制定基组和赝势。虽然这是阴离子体系,但对于优化的目的,用3-zeta基组完全足够,并不需要加弥散,而且如前所述在Multiwfn中用LOBA时也应避免加弥散。

启动Multiwfn,输入
Fe(CN)6_3-.fch   //Gaussian输出的chk文件转化成的fch文件
8  //轨道成分分析
100   //LOBA方法计算氧化态
50   //判断轨道归属的阈值用50%
结果如下
Oxidation state of atom   1(Fe) :  3
Oxidation state of atom   2(C ) :  2
Oxidation state of atom   3(C ) :  2
Oxidation state of atom   4(C ) :  2
Oxidation state of atom   5(C ) :  2
Oxidation state of atom   6(C ) :  2
Oxidation state of atom   7(C ) :  2
Oxidation state of atom   8(N ) : -3
Oxidation state of atom   9(N ) : -3
Oxidation state of atom  10(N ) : -3
Oxidation state of atom  11(N ) : -3
Oxidation state of atom  12(N ) : -3
Oxidation state of atom  13(N ) : -3
The sum of oxidation states:  -3


可见,氧化态总和为-3,正好对应体系的净电荷。Fe的氧化态为3,十分合理。N的电负性比C大,所以氧化态是负值(-3),C是正值(+2),也很合理。



2.2 二茂铁

对于文件包里的二茂铁体系,发现写pop=saveNLMO用Gaussian自带的NBO3.1没法正常做NLMO分析,这是程序bug。虽然NBO不是严格意义的定域化轨道(因为占据数不是整数),但对于LOBA分析的目的倒也问题不大。所以我们此例暂时改用pop=saveNBO。

启动Multiwfn,载入Ferrocene_saveNBO.fch,同上进入LOBA分析界面,用50%判断阈值,结果如下:
Oxidation state of atom   1(C ) :  2
Oxidation state of atom   2(C ) :  2
Oxidation state of atom   3(C ) :  2
Oxidation state of atom   4(H ) :  1
Oxidation state of atom   5(H ) :  1
Oxidation state of atom   6(Fe) :  2
Oxidation state of atom   7(C ) :  2
Oxidation state of atom   8(C ) :  0
Oxidation state of atom   9(H ) :  1
Oxidation state of atom  10(H ) :  1
Oxidation state of atom  11(H ) :  1
Oxidation state of atom  12(C ) :  2
Oxidation state of atom  13(C ) :  2
Oxidation state of atom  14(C ) :  2
Oxidation state of atom  15(C ) :  0
Oxidation state of atom  16(C ) :  2
Oxidation state of atom  17(H ) :  1
Oxidation state of atom  18(H ) :  1
Oxidation state of atom  19(H ) :  1
Oxidation state of atom  20(H ) :  1
Oxidation state of atom  21(H ) :  1
The sum of oxidation states:  28

可见结论是Fe的氧化态为+2,这是很合理的。注意LOBA往往不能对体系中的每个原子都给出合理的氧化态,也因此虽然体系净电荷为0,但这里显示氧化态总和为28。即便把阈值设为其它值,氧化态总和照样不会成为应有的0。至于为什么会这样,思考LOBA的原理很容易理解,因为并非每个LMO都一定会归属到某个原子上,比如一个LMO当中A原子贡献了40%,B原子贡献了40%,C原子贡献了20%,那么当阈值设成50%的时候,LMO不会被归属到A、B、C中任意一个,因此这个LMO上的电子就废了。根据经验,LOBA给出的过渡金属的氧化态还是合理的。

做LOBA的时候可以定义片段,LOBA给出的片段的氧化态往往比单个原子的更合理。我们考察茂环的氧化态,在LOBA界面里输入-1,然后输入一个茂环对应的原子序号范围,即输入1-5,7-11。之后再输入阈值50看结果,此时输出信息末尾多了一行:
Oxidation state of the fragment:  -1
说明茂环的氧化态是-1,这很合理,两个茂环以及Fe的氧化态相加恰为整体的净电荷0。


2.3 顺铂

文件包里的cisplatin.fch对应的是b3lyp结合6-311G**以及Lanl2TZ(f)赝势基组计算的顺铂体系(顺式二氯二胺合铂),用了pop=saveNLMO关键词。用50%判断阈值时结果如下
Oxidation state of atom   1(Pt) :  2
Oxidation state of atom   2(Cl) :  1
Oxidation state of atom   3(Cl) :  1
Oxidation state of atom   4(N ) : -3
Oxidation state of atom   5(H ) :  1
Oxidation state of atom   6(H ) :  1
Oxidation state of atom   7(N ) : -3
Oxidation state of atom   8(H ) :  1
Oxidation state of atom   9(H ) :  1
Oxidation state of atom  10(H ) :  1
Oxidation state of atom  11(H ) :  1
The sum of oxidation states:   4

铂的氧化态判断得很合理,是+2,和一般观念一致,而且随意把阈值提高一些也不会使得这个结论有所变化。对于NH3,把其中各个原子的氧化态加和,或者作为一个片段来算氧化态,结果都是0,也能说得通。而Cl的氧化态被判断为1,这就不好说通了,毕竟电负性比Pt大不少。所以说,LOBA方法判断过渡金属的氧化态一般没问题,但是判断出的其它原子的结果就不要总是尝试去过度解释了。


2.4 LOBA失败的例子:OsO4

在B3LYP结合6-311G*和SDD下,用pop=saveNLMO产生NLMO轨道,用50%的阈值,LOBA结果如下:

Oxidation state of atom   1(O ) :  0
Oxidation state of atom   2(O ) : -2
Oxidation state of atom   3(O ) : -2
Oxidation state of atom   4(O ) :  0
Oxidation state of atom   5(Os) :  6
The sum of oxidation states:   2


这个结果就不理想了。按照化学观念,氧化态本应O是-2,Os是+8,结果四个氧的氧化态不对称,而且Os的氧化态也不合理(顺带一提,如果整个体系只分为两个部分,按照LOBA的判断方式可知这两个部分的氧化态加和一定等于体系净电荷,因此如果此体系把四个氧一起作为一个片段,会发现氧化态是-6)。


之所以LOBA用于当前体系结果不合理,一个可能性是当前用的轨道定域化方法对此体系不理想。如果观看fch里的占据轨道,会看到有的LMO已经离域到多个原子上了,没达到定域化的目的。而且如果用这个fch计算键级、原子电荷,会发现四个氧的结果是明显不同的,这也说明当前fch对应的电子结构就是有问题的。用其它的轨道定域化方法可能能令结果更合理,但也不好说。

总而言之,LOBA方法对于判断过渡金属配合物当中过渡金属的氧化态多数情况还是正确的,但不要作为严格的判断依据,而建议作为参考,结合化学直觉来做出判断。

评论已关闭