|
本帖最后由 zjxitcc 于 2025-6-19 23:34 编辑
我用TS结构做了freq计算和波函数稳定性检验,在M06-2X-D3/6-311++G(d,p)级别下过渡态结构确实是这样的。这个反应用UCCSD(T)算可能更为简单一些;相比之下,用CASSCF或更高的方法,则难度要大很多,以下是我个人建议的计算步骤
Step 1. 过渡态结构的中等基组单点计算
写一个输入文件,不妨称为ts.gjf,内容如下
- %nprocshared=32
- %mem=64GB
- #p CASSCF/cc-pVDZ
- mokit{}
- 0 2
- C 1.83488913 0.85386706 -0.35031703
- H 1.21731609 1.10500908 -1.20135909
- H 2.53582118 1.58876512 0.02058300
- C 1.73135512 -0.37062703 0.26502802
- H 2.37759917 -0.62272604 1.10537108
- O 0.86901006 -1.26803709 -0.08208801
- H -0.15084101 -0.80922006 -0.20823301
- N -1.22152609 0.00497100 -0.00701200
- O -2.35271917 -0.37631803 -0.14079301
- O -0.86962506 1.11984708 0.32843802
复制代码 提交任务
- automr ts.gjf >ts.out 2>&1
复制代码 算化学反应的话,我通常会先做一些测试,cc-pVDZ基组让计算10 min结束,这时候有UNO轨道(_uno.fch结尾),局域配对UNO轨道(_asrot.fch结尾),GVB轨道(_gvb17_.fch结尾),CASSCF轨道(_CASSCF_NO.fch结尾)。
Step 2. 反应物结构的中等基组单点计算
写一个输入文件,不妨称为r.gjf,内容如下
- %mem=64GB
- %nprocshared=32
- #p CASSCF/cc-pVDZ
- mokit{npair=17}
- 0 2
- C -1.18652274 -0.24849797 0.00000000
- H -1.11329937 -1.31598965 0.00000000
- H -2.14760933 0.22183459 0.00000000
- C -0.06200659 0.50782919 0.00000000
- H -0.13522995 1.57532087 0.00000000
- O 1.22243624 -0.12074610 0.00000000
- H 1.11201688 -1.07437480 0.00000000
- N 9.69454932 0.14839092 7.01076901
- O 10.69403640 -0.08698433 6.42683425
- O 9.07884138 -0.39318215 7.86103847
复制代码 没指定npair=17的话,在GVB轨道那一步默认只会算出15对轨道,这与过渡态结构的17对GVB轨道不符,不利于我们后面挑选轨道 统一R与TS的活性空间。因此这里手动指定npair=17,automr会增加2对比较合理的轨道。
Step 3. 观察两个结构的轨道,统一R与TS的活性空间
首先肯定是看_CASSCF_NO.fch文件中的自然轨道,发现自动计算出的结果无法实现统一活性空间的目的,接着就是看GVB轨道、局域配对UNO轨道,再结合反应机理(氢转移)来判断。我个人的建议是,对于反应物(以下用符号r或R简称),活性轨道可以取O-H sigma键,C-C pi键,O的孤对电子(平行于C=C-O平面的那个孤对,这个孤对电子轨道后续会与相邻的碳成C=O pi键)。每根键有其成键轨道和反键轨道,因此3根键对应CAS(6,6),还必须考虑二重态的那个单占据轨道,加起来就是CAS(7,7)。在实际计算中我发现C-O sigma键总是往活性空间里面挤,试图把其他1个轨道给交换出去。索性我们把C-O sigma键也囊括进活性空间,最终取CAS(9,9)。但是我描述的这些轨道的位置并不全在第20~28号位置,需要先调换一下轨道顺序,python脚本如下
from mokit.lib.gaussian import permute_orb
from mokit.lib.rwwfn import read_nif_from_fch, read_na_and_nb_from_fch, write_eigenvalues_to_fch
import numpy as np
fchname= 'r_uhf_uno_asrot.fch'
permute_orb(fchname,18,22)
permute_orb(fchname,30,26)
permute_orb(fchname, 9,21)
permute_orb(fchname,39,27)
permute_orb(fchname, 8,20)
permute_orb(fchname,40,28)
nif = read_nif_from_fch(fchname)
na, nb = read_na_and_nb_from_fch(fchname)
ev = np.zeros(nif)
ev[:nb] = 2.0
ev[nb:na] = 1.0
write_eigenvalues_to_fch(fchname, nif, 'a', ev, True)
(论坛代码框有时候有bug,加了代码框可能会吞掉代码)
这样就把目标轨道全放置在第20~28号位置了。这个过程不会产生新文件,只会更新r_uhf_uno_asrot.fch文件。上述脚本中涉及到的轨道序号是我自己看了r_uhf_uno_asrot.fch文件后得出的,你也需要看一下轨道,才能理解这个脚本的含义。接着我们用这套轨道做CASSCF(9,9)/cc-pVDZ计算,就是写一个r2.gjf文件,内容如下
- %mem=64GB
- %nprocshared=32
- #p CASSCF(9,9)/cc-pVDZ
- mokit{ist=5,readno='r_uhf_uno_asrot.fch'}
复制代码 在我电脑上计算发现CASSCF花了9圈就收敛了,并且能量下降平缓
- macro iter 1 ( 21 JK 4 micro), CASSCF E = -357.020313477913 dE = -2.55893026e-02 S^2 = 0.7500000
- macro iter 2 ( 21 JK 4 micro), CASSCF E = -357.028259735942 dE = -7.94625803e-03 S^2 = 0.7500000
- macro iter 3 ( 21 JK 4 micro), CASSCF E = -357.044733120973 dE = -1.64733850e-02 S^2 = 0.7500000
- macro iter 4 ( 21 JK 4 micro), CASSCF E = -357.059339396232 dE = -1.46062753e-02 S^2 = 0.7500000
- macro iter 5 ( 17 JK 4 micro), CASSCF E = -357.060509583794 dE = -1.17018756e-03 S^2 = 0.7500000
- macro iter 6 ( 16 JK 4 micro), CASSCF E = -357.060700579413 dE = -1.90995619e-04 S^2 = 0.7500000
- macro iter 7 ( 14 JK 4 micro), CASSCF E = -357.060735754023 dE = -3.51746101e-05 S^2 = 0.7500000
- macro iter 8 ( 7 JK 2 micro), CASSCF E = -357.060738239960 dE = -2.48593739e-06 S^2 = 0.7500000
- macro iter 9 ( 4 JK 1 micro), CASSCF E = -357.060738262315 dE = -2.23549819e-08 S^2 = 0.7500000
复制代码 说明上述9个活性轨道大概率都保留了下来,没有在轨道优化过程中被旋转出活性空间。对于过渡态(以下用符号ts或TS简称),按照上面说的9个轨道,我们也是要先调换一下轨道顺序,python脚本如下
- from mokit.lib.gaussian import permute_orb
- permute_orb('ts_uhf_uno_asrot.fch',11,23)
- permute_orb('ts_uhf_uno_asrot.fch',37,25)
- permute_orb('ts_uhf_uno_asrot.fch',16,22)
- permute_orb('ts_uhf_uno_asrot.fch',32,26)
复制代码 然后写ts2.gjf进行CASSCF(9,9)/cc-pVDZ计算
- %mem=64GB
- %nprocshared=32
- #p CASSCF(9,9)/cc-pVDZ
- mokit{ist=5,readno='ts_uhf_uno_asrot.fch'}
复制代码 也是很快收敛、能量平稳下降。这样我们就在DZ基组下 花费相对比较少的时间 统一了R与TS的活性空间。
Step 4. cc-pVQZ基组下的多参考计算
我们将上述CASSCF(9,9)/cc-pVDZ收敛的轨道投影至CASSCF(9,9)/cc-pVQZ,这一步也用python脚本完成,以R结构的轨道文件为例,脚本内容为
from mokit.lib.gaussian import proj2target_basis
proj2target_basis(fchname='r_uhf_uno_asrot_CASSCF_NO.fch',target_basis='cc-pVQZ',nmo=28)
(论坛代码框有时候有bug,加了代码框可能会吞掉代码)
前28个轨道是双占据+活性轨道,这个轨道数量不同于传统ROHF的占据轨道数量,因此需要专门指明。这个操作会得到r_uhf_uno_asrot_CASSCF_NO_proj.fch文件,内含cc-pVQZ基组下的CASSCF(9,9)初始轨道。接着我们可以做更高等级的计算,例如FIC-NEVPT2,输入文件r3.gjf内容如下
- %mem=170GB
- %nprocshared=64
- #p NEVPT2(9,9)/cc-pVQZ
- mokit{ist=5,readno='r_uhf_uno_asrot_CASSCF_NO_proj.fch',FIC,NEVPT2_prog=ORCA}
复制代码 这样automr会先调用PySCF做CASSCF(9,9)/cc-pVQZ做轨道优化,3圈左右收敛,然后传轨道给ORCA,进行FIC-NEVPT2计算。对于TS结构的操作是一样的,先用python脚本做轨道投影,然后写ts3.gjf文件读取轨道进行QZ基组下的CASSCF和FIC-NEVPT2计算。
|
评分 Rate
-
查看全部评分 View all ratings
|