使用Multiwfn分析Gaussian的極化率、超極化率的輸出
使用Multiwfn分析Gaussian的極化率、超極化率的輸出
文/Sobereva @北京科音
First release: 2014-Apr-27 Last update: 2021-May-14
1 前言
Gaussian中polar關鍵詞是專門用來計算極化率α和第一超極化率β的,從Gaussian09 D.01開始也支持polar=gamma計算第二超極化率γ。Gaussian輸出的很多信息總是令初學者很難看懂,(超)極化率的輸出更是如此,內容雜亂,而且不同理論方法下輸出的信息格式還差異很大,分析起來很不方便。Multiwfn的主功能200里的子功能7就是專門用來解析Gaussian的(超)極化率的輸出的,使之簡潔易懂。與此同時,Multiwfn還會計算一些對于分析(超)極化率十分重要的量,比如<α>、α的各向異性值、β在分子偶極矩方向的分量等等,這使得通過Gaussian研究(超)極化率變得方便得多。此文的目的就是介紹如何使用Multiwfn分析Gaussian的(超)極化率的輸出。
本文內容對應的是Multiwfn官網上的最新版本,可以在其主頁http://www.shanxitv.org/multiwfn上免費下載,不要用老版本。Multiwfn是最為強大的波函數分析程序,此文介紹的只不過是它的一個附屬功能而已。如果對Multiwfn不熟悉,建議閱讀《Multiwfn波函數分析程序的意義、功能與用途》(http://www.shanxitv.org/184)和《Multiwfn入門tips》(http://www.shanxitv.org/167)。Multiwfn分析polar關鍵詞輸出的這個功能只支持Gaussian 09及之后版本,不支持更老版本。
Multiwfn的這個功能還支持計算與超瑞利散射(Hyper-Rayleigh Scattering, HRS)實驗相關的各種量,在另一篇文章《使用Multiwfn計算與超瑞利散射(HRS)實驗相關的量》(http://www.shanxitv.org/499)當中做了詳細介紹。
如果你使用了本文介紹的Multiwfn的功能,請在發表文章時提及研究中使用了Multiwfn提取Gaussian輸出文件中的相關數據并計算了相關的量,并應當根據Multiwfn程序啟動時提示的信息恰當引用Multiwfn程序。
2 Gaussian中(超)極化率的計算
這一節介紹在Gaussian中計算(超)極化率的基本原理和所需要的關鍵詞。
將能量E對均勻外電場F進行Taylor展開得到如下式子
μ0就是分子的永久偶極矩矢量(無外場下的偶極矩)。α是分子的極化率,也稱線性光學系數,是個3*3二階張量。β是第一超極化率,也稱分子的二階非線性光學(NLO)系數,是個3*3*3的三階張量。γ是第二超極化率,亦稱分子的三階NLO系數,研究得相對少一些。而更高的δ極少被討論。(超)極化率數值和電場頻率是相關的,外場頻率為0的情況被稱為靜態(超)極化率;如果外場頻率不是0,比如某一頻率的光,對應的就是動態(超)極化率,或者叫含頻(超)極化率。
Gaussian的polar關鍵詞求這些量是通過導數方法,其原理很明確。如上式可見,求極化率要令能量對外場做兩次導數,求第一超極化率要做三次導數。
求能量的導數分為三種情況:
(1)解析導數。這種方法求導數又快又精確,但是編程實現很困難,特別是對于高級的后HF而言。這種方式求能量導數時需要用到分子軌道系數對外場的導數,這通過求解CPHF方程來實現。并且利用含頻CPHF方程,可以得到動態(超)極化率。這種求(超)極化率的方式也被稱為CPHF方法。
(2)數值導數。這種方式通過有限差分方式得到能量的導數,也稱為有限場(FF)方法。有限差分在所有數值算法書里都會介紹,比如求一個函數f在0處的導數可表示為f(0)=[f(0.001)-f(-0.001)]/(2*0.001)。通過這種方法求(超)極化率非常費時間,需要在不同數值、不同方向的外場下計算很多很多次單點,而且求高階導數精度很差,因為每求一次數值導數都會由于數值噪音而累積誤差,隨著求導階數增加誤差迅速放大,做二階以上導數時精度就很爛了(除非通過額外修正、外推等特殊方式處理)。另外,通過數值導數也沒法求得動態(超)極化率。
(3) 解析+數值混合導數。這就是基于低階解析導數,再通過一次或多次有限差分求高階導數以獲得(超)極化率的方法。精度和速度介于全解析導數和全數值導數之間。
Gaussian在支持解析導數方面已經算是很好的,對于HF、DFT、半經驗方法都能支持到三階解析導數,因此可以全解析地得到靜態和含頻的α和β(而其它量化程序都很難對HF/DFT/半經驗支持到這么高階導數,通常也就能支持到二階)。對這類支持三階解析導數的方法,使用polar關鍵詞就會直接給出α和β的結果。如果同時寫上CPHF=RdFreq,并且在輸入文件末尾空一行寫上外場頻率w,比如0.05 0.12 0.3或532nm 670nm(靜態的情況總是會被計算,故不需要特意寫),就會計算含頻極化率α(-ω;ω)和含頻第一超極化率β(-ω;ω,0)。如果要算的含頻第一超極化率是SHG形式,即β(-2ω;ω,ω),就寫polar=DCSHG即可,此時CPHF=RdFreq可以忽略不寫,并且此時β(-ω;ω,0)也會照樣計算。
對于MP2等Gaussian只能支持到二階解析導數的方法,可以全解析地計算α,但是若想計算β,就得再做一次有限差分才行。Gaussian中,此時直接寫polar只會計算α,若還想得到β就得寫polar=Cubic,會自動基于解析二階導數做有限差分來得到三階導數。
對于CISD、QCISD、CCSD、MP3、MP4(SDQ)等Gaussian只支持一階解析導數的方法,直接寫polar關鍵詞會基于解析一階導數做一次有限差分得到二階導數,即α。若還想得到β就得寫polar=DoubleNumer(等價于polar=enonly),會基于解析一階導數做兩次有限差分得到三階導數。
對于CCSD(T)、QCISD(T)、MP4(SDTQ)、MP5等Gaussian只支持計算單點能的方法,寫polar關鍵詞會對能量做兩次有限差分并由此得到α。對于它們在Gaussian里沒有辦法直接給出β。
注意對于HF、DFT、半經驗以外的方法,Gaussian都沒法給出含頻(超)極化率。
若想得到更高階導數計算更高階超極化率,比如DFT下計算第二超極化率γ,需要基于其解析三階導數做一次有限差分。從G09 D.01開始,對于支持三階解析導數的方法可以用polar=gamma來算靜態γ和動態的γ(-2ω;ω,ω,0)、γ(-ω;ω,0,0),會基于解析三階導數自動做有限差分來得到所需的四階導數。末尾應空一行寫上外場頻率。
值得一提的是,利用Multiwfn,可以通過完全態求和方法基于Gaussian的CIS/TDHF/TDDFT計算的輸出得到靜態或動態的極化率和第一、二、三超極化率,見《使用Multiwfn基于完全態求和(SOS)方法計算極化率和超極化率》(http://www.shanxitv.org/232)。Multiwfn還能圖形化展現(超)極化率,見《使用Multiwfn通過單位球面表示法圖形化考察(超)極化率張量》(http://www.shanxitv.org/547)。
3 使用Multiwfn解析polar關鍵詞的輸出
對于上一節討論的各種情況,polar關鍵詞輸出的信息都能被Multiwfn所解析。注意route section一定要寫上#P,否則輸出文件將無法被正確解析。
啟動Multiwfn后,先輸入Gaussian的polar任務的輸出文件的路徑,比如C:\CH3NH2_polar.out,然后進入主功能200,選7,之后會看到下面的菜單:
-3 Set unit in the output, current: a.u.
-2 Set output destination, current: Output to screen
-1 Toggle loading frequency-dependent result for options 1 and 7, current: No
0 Return
1 "Polar" + analytic 3-order deriv. (HF,pure/hybrid DFT,semi-empirical)
2 "Polar" + analytic 2-order deriv. (MP2,double-hybrid DFT,TDDFT,CIS...)
3 "Polar=Cubic" + analytic 2-order deriv.
4 "Polar" + analytic 1-order deriv. (CISD,QCISD,CCSD,MP3,MP4(SDQ)...)
5 "Polar=DoubleNumer" or "Polar=EnOnly" + analytic 1-order deriv.
6 "Polar" + energy only (CCSD(T),QCISD(T),MP4(SDTQ),MP5...)
7 "Polar=gamma" + analytic 3-order deriv. (HF,DFT,semi-empirical)
選項1~7對應上一節提到的不同情況,當前你在什么情況下計算的就選哪種,然后Multiwfn就會輸出分析的結果。比如你用了CCSD結合polar=doublenumer就應當選5。之所以要對此進行選擇是因為不同情況下Gaussian的輸出格式相差極大,Multiwfn必須知道你在什么情況下計算的,才能相應地對輸出內容進行解析。選項1~7都可以給出α,只有1、3、5才會給出β,只有7才會給出γ。
如果在HF/DFT/半經驗計算時用了polar CPHF=rdfreq或polar=DCSHG做了含頻(超)極化率計算,或者用的是polar=gamma,默認情況下只會解析靜態的(超)極化率。如果想讓Multiwfn分析含頻的,應當先選-1將其狀態切換為Yes。當Gaussian輸入文件里定義了多個頻率時,如0.1,0.22,0.35,用戶可以選擇分析哪個頻率下的結果。對于β,用戶也可以選擇分析β(-ω;ω,0)還是β(-2ω;ω,ω),注意只有寫了DCSHG時選擇β(-2ω;ω,ω)才有意義。對于γ,可以選擇分析γ(-2ω;ω,ω,0)還是γ(-ω;ω,0,0)。
默認情況下輸出的單位是a.u.,如果選-3,也可以切換為SI或esu單位。默認情況下輸出信息會顯示到屏幕上,也可以選-2來更改為輸出到當前目錄下的polar.txt當中。
如果你使用的是DFT或MP2,且對當前體系又要做振動分析又要算極化率,那么沒必要分別做freq和polar任務,只要做一次freq即可。用Multiwfn載入freq任務的輸出文件,在Multiwfn此文介紹的界面里選擇2 "Polar" + analytic 2-order deriv.即可提取極化率。
3.1 解析靜態極化率和第一超極化率一例
下面就以分析甲胺在#P PBE1PBE/aug-cc-pVTZ polar關鍵詞下得到的輸出文件為例進行說明。
當前例子用的是PBE1PBE,是DFT中常用的一種泛函,故對應的是前述第一種情況,因此當我們看到上面的菜單時應選1,然后馬上會看到α和β的分析結果,下面將對各項的含義進行說明。我們先看α部分
Dipole moment:
X,Y,Z= -0.506266 0.150290 0.000000 Norm= 0.528103
Static polarizability:
XX= 25.04620
XY= -0.08830
YY= 28.89110
XZ= 0.00000
YZ= 0.00000
ZZ= 24.43580
Isotropic average polarizability: 26.12437
Isotropic average polarizability volume: 3.871231 Angstrom^3
Polarizability anisotropy (definition 1): 4.18643
Polarizability anisotropy (definition 2): 4.18363
Eigenvalues of polarizability tensor: 24.4358 25.0442 28.8931
Polarizability anisotropy (definition 3): 4.15314
如前所述,默認情況下所有輸出的量都是以a.u.為單位。
極化率張量是個對稱的3*3矩陣,故所以只有6個獨立的矩陣元列了出來。每個體系的極化率的大小一般只用一個數值<α>來表示,也就是上面給出各項同性平均極化率,它是對XX、YY、ZZ取平均得到的。極化率也經常通過極化率體積來表示,上面也給出了。極化率并不是各項同性的,體系對不同方向射來的電場的響應是不同的。如上可見,Multiwfn也輸出了極化率的各向異性值Δα,數值越大各向異性越強,球對稱體系顯然其值為0。各向異性可以以三種方式定義,分別如下所示,詳見Multiwfn手冊3.200.7節
ε代表極化率張量的本征值,它也被Multiwfn輸出了出來。最常見的衡量極化率的各向異性程度是定義2,而定義3的形式一般是在衡量磁屏蔽張量各向異性時用的。
下面是第一超極化率部分的解析結果
Static first hyperpolarizability:
XXX= 13.173100
XXY= 4.937890
XYY= 13.647700
YYY= -35.484000
XXZ= 0.000000
XYZ= 0.000000
YYZ= 0.000000
XZZ= -2.763570
YZZ= 1.342190
ZZZ= 0.000000
Beta_X= 24.05723 Beta_Y= -29.20392 Beta_Z= 0.00000
Magnitude of first hyperpolarizability: 37.836745
Projection of beta on dipole moment: -31.373491
Beta || : -18.824094
Beta ||(z) : 0.000000
Beta _|_(z) : 0.000000
Gaussian的β的輸出有個眾所周知的問題,也就是符號是反的,即每個β元素的數值都應該乘以-1,至少直到G09 D.01版依然存在這個問題。有文章專門指出了這點,見《Gaussian程序計算的一階超極化率的符號問題》(四川師范大學學報(自然科學版),33,228)。這個問題在Multiwfn中已經被考慮進去了,Multiwfn輸出的β的符號都是正確的。
β有3*3*3=27個元素。靜態β滿足Kleinman對稱性,三個標號可以隨意置換而完全不影響結果,比如xyy=yxy=yyx,只有10個元素是唯一的,所以Multiwfn也只輸出了10個元素。
Beta_X、Beta_Y、Beta_Z衡量的是β在X、Y、Z方向上的分量。Magnitude of first hyperpolarizability體現了β的整體的大小。其定義分別如下所示
只有β在偶極矩方向上的投影值才是可以通過電場誘導二次諧波產生實驗(EFISH)測量出來的,和實驗值對比通常比的都是這個值。Multiwfn給出了β在偶極矩方向上的投影值(β_prj,一些文中也寫為β_vec)。另一個文獻中常見的量是Beta ||,||代表平行于偶極矩,它正比于β_prj
文獻中常見的Beta ||(z)和Beta _|_(z)的定義如下所示,分別衡量的是平行和垂直于Z方向上的β的值
當偶極矩方向和Z方向一致時,Beta_Z=β_prj,Beta ||(z)=Beta ||。
值得一提的是,默認情況下,Gaussian會將輸入文件里體系的坐標調整到標準朝向下,這通常會令體系發生旋轉。Gaussian計算出的,也即Multiwfn所解析的,都是標準朝向下的結果,因此X、Y、Z可能和你的輸入文件里的笛卡爾軸方向不對應。如果想避免自動調整到標準朝向,用nosymm關鍵詞。
3.2 解析動態極化率和第一超極化率一例
此例使用Multiwfn解析polar關鍵詞產生的動態(超)極化率。輸入文件如下,分別計算外場為0.07和0.1 a.u.的情況。
#p PBE1PBE/aug-cc-pVTZ polar CPHF=RdFreq
test
0 1
C -0.55391731 0.43227932 0.14513431
H -1.29461381 -0.13844703 0.71478821
H -0.40071988 1.37810560 0.67504812
H -0.99858078 0.66864399 -0.83680924
N 0.70741247 -0.31205725 0.11165308
H 0.57479710 -1.18908235 -0.38659422
H 1.39864521 0.20863272 -0.42322026
0.07 0.1
令Multiwfn載入輸出文件,并進入主功能200里的子功能7后,先選-1切換成解析動態值,然后再選1。然后程序問載入哪個頻率下的結果,此例我們選2,即w=0.07的情況。然后我們得到了w=0.07下的極化率輸出。之后程序問分析β(-ω;ω,0)還是β(-2ω;ω,ω)的結果。由于沒寫DCSHG,我們只能選擇β(-ω;ω,0)。輸出如下
Frequency-dependent first hyperpolarizability Beta(-w;w,0)
XXX= 16.334900
XYX= YXX= 7.369050
YYX= 16.593300
XZX= ZXX= 0.000000
YZX= ZYX= 0.000000
ZZX= -2.918320
XXY= 8.947060
XYY= YXY= 15.473800
YYY= -40.341800
XZY= ZXY= 0.000000
YZY= ZYY= 0.000000
ZZY= 1.240500
XXZ= 0.000000
XYZ= YXZ= 0.000000
YYZ= 0.000000
XZZ= ZXZ= -2.796870
YZZ= ZYZ= 1.609830
ZZZ= 0.000000
Beta_X= 29.34451 Beta_Y= -30.96003 Beta_Z= 0.00000
Magnitude of first hyperpolarizability: 42.657048
Projection of beta on dipole moment: -36.941911
Beta || : -22.165146
Beta ||(z) : 0.000000
Beta _|_(z) : 0.000000
和上一例相比,可見在含頻外場下β值增大了。各項的含義和上例一致,不再累述。值得一提的是對于beta(-ω;ω,0)這種情況,只有i,j,k三個標號中的i,j可以互換,比如xyy=yxy≠yyx,張量的對稱性沒有靜態β的那么高,故有18個獨立的元素。不過,當外場頻率不是很大時,Kleinman對稱性是可以近似滿足的,從上面的結果可見,諸如xyx和xxy相差不算很大。
假設我們要看w=0.1時的β(-ω;ω,0),那么再次進入此功能,然后選1-3-1即可。
基于當前輸出文件沒法查看β(-2ω;ω,ω),因為當前例子沒寫DCSHG。要看它的話應把polar后面加上=DCSHG重算一次,然后再進入此功能,并選擇分析β(-2ω;ω,ω)情況的數據。
3.3 解析第二超極化率一例
這里我們對NH3計算第二超極化率γ。Gaussian輸入文件是Multiwfn程序包里的examples\polar\NH3_gamma.gjf,內容如下
#p PBE1PBE/daug-cc-pVTZ polar=gamma
[空行]
pbe1pbe/aug-cc-pVTZ opted
[空行]
0 1
N 0.00000000 0.00000000 0.11367600
H 0.00000000 0.93902800 -0.26524400
H -0.81322200 -0.46951400 -0.26524400
H 0.81322200 -0.46951400 -0.26524400
[空行]
532nm 680nm
想高精度計算小體系的γ,基組必須帶非常充足的彌散函數,因此此例用了每個角動量加兩層彌散的d-aug-cc-pVTZ,此基組非常昂貴。另外計算γ本身也很昂貴,所以哪怕是小體系,想高精度計算γ也需要給力的機子。polar=gamma關鍵詞要求既計算靜態的也計算動態的γ,如當前輸入文件所示,對于動態的γ我們要計算的是532 nm和680 nm外場下的情況。
此例我們要解析γ(-2w;w,w,0)在680 nm下的結果。啟動Multiwfn然后輸入
examples\polar\NH3_gamma.out
200
7 //解析Gaussian的(超)極化率的計算輸出
-1 //切換為載入動態(超)極化率(不選這個的話之后解析的將是靜態的γ)
7 //對應polar=gamma的情況
2 //對應680 nm的情況
2 //解析γ(-2w;w,w,0)形式的動態第二超極化率
輸出信息如下
XXXX= 3091.740000
YXXX= 0.000000
ZXXX= 0.000040
XYXX=XXYX= 0.000000
...略
YZYZ=YYZZ= 3677.510000
ZZYZ=ZYZZ= -0.446631
XZZZ= 0.000000
YZZZ= -0.400105
ZZZZ= 18072.400000
Magnitude of gamma: 5998.270291
X component of gamma: 1574.323333
Y component of gamma: 1574.284000
Z component of gamma: 5569.774000
Average of gamma (definition 1), gamma ||: 8718.3813
Average of gamma (definition 2): 8737.028000
gamma _|_: 2875.049333
上面每一項的定義筆者就不在這里介紹了,因為在Multiwfn手冊3.200.7節里已經寫得非常詳細了,這些量都是考察γ時經常要涉及的。
如屏幕上的提示所示,上面給出的gamma信息對應的是輸入朝向下的,而之前提到的Multiwfn給出的alpha和beta都是標準朝向下的,這個差異要注意。