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

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

文/Sobereva

First release: 2017-Feb-22   Last update: 2017-Jun-1




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原文里表示结果对于所用的定域化方法并不敏感。一般就用Multiwfn直接支持的Pipek-Mezey方法做定域化就行了,而且只需要将占据轨道部分做定域化就够了。详细信息可以看《Multiwfn的轨道定域化功能的使用以及与NBO、AdNDP分析的对比》(http://sobereva.com/380)。你也可以让量化程序用自带的定域化方法,产生包含定域化轨道的记录基函数信息的文件(如.fch、.molden),比如Gaussian的用户可以用pop=saveNLMO把NLMO方式做的定域化轨道保存到.fch里。

为了省事,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*基组对其优化。虽然这是阴离子体系,但对于优化的目的,用3-zeta基组完全足够,并不需要加弥散,而且如前所述在Multiwfn中用LOBA时也应避免加弥散,另外用Pipek-Mezey定域化时有弥散函数的话结果也会很不好。

启动Multiwfn,输入
Fe(CN)6_3-.fch   //Gaussian输出的chk文件转化成的fch文件
200
13   //Pipke-Mezey轨道定域化
8   //轨道成分分析
1   //只对占据轨道做定域化,这对LOBA分析够了
此时Multiwfn把定域化后的轨道导出到了当前目录下的new.fch,然后自动载入之,此时内存里的轨道已经是定域化轨道了,可以开始做LOBA分析了。
0   //回到主界面
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 二茂铁

启动Multiwfn,载入Ferrocene.fch,一切操作同上一节,也用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 ) :  2
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 ) :  2
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:  32

可见结论是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)赝势基组计算的顺铂体系(顺式二氯二胺合铂),做LOBA分析操作同前,结果如下
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:   0

铂的氧化态判断得很合理,是+2,和一般观念一致,而且随意把阈值提高一些也不会使得这个结论有所变化。对于NH3,把其中各个原子的氧化态加和,或者作为一个片段来算氧化态,结果都是0,也能说得通。而Cl的氧化态被判断为-1,也是合理的。


2.4 LOBA失败的例子:OsO4

此体系用B3LYP结合6-311G*和SDD计算,LOBA分析操作同前,还是用50%阈值,结果如下
Oxidation state of atom   1(O ) :  0
Oxidation state of atom   2(O ) :  0
Oxidation state of atom   3(O ) :  0
Oxidation state of atom   4(O ) :  0
Oxidation state of atom   5(Os) :  0
The sum of oxidation states:   0

这个结果就不理想了。按照化学观念,氧化态本应O是-2,Os是+8,结果这里却都是0。于是我们尝试调整下阈值,把阈值增加到60%,结果变成这样:
Oxidation state of atom   1(O ) :  0
Oxidation state of atom   2(O ) :  0
Oxidation state of atom   3(O ) :  0
Oxidation state of atom   4(O ) :  0
Oxidation state of atom   5(Os) :  8
The sum of oxidation states:   8
这回还可以,Os的氧化态预测对了,不过O的氧化态-2还是没预测对,不过姑且忍了,毕竟不是我们关注的。如果你进一步调大阈值,会发现O的氧化态会变,但是Os一直是8,说明Os氧化态是8这个结论比较“稳定”。

从本文的例子可见,基于Pipek-Mezey轨道做LOBA分析,用50%阈值,对于判断过渡金属配合物当中过渡金属的氧化态一般还是正确的,但少数时候需要尝试增加阈值。LOBA的分析结果建议不要作为严格的判断依据,而建议作为参考,结合化学直觉来做出最终判断。

评论已关闭