• 分子間軌道重疊的圖形顯示和計算

    分子間軌道重疊的圖形顯示和計算

    文/Sobereva @北京科音  2012-Oct-1


    注:本文涉及到的非Multiwfn產生的文件都可以在這里下載:http://www.shanxitv.org/attach/163/intmolorbovlp.rar


    分子間軌道重疊,就是指離得比較近的兩個分子,其中一個分子的軌道會與另一個分子的軌道發生重疊。軌道既可以是分子軌道,也可以是定域化軌道等形式。本文討論的是分子軌道重疊,這有很多用處,比如前線軌道理論涉及到兩分子間HOMO-LUMO的重疊;在討論分子間電荷轉移問題時,涉及到兩分子間HOMO-HOMO以及LUMO-LUMO軌道的重疊。本文第一節介紹一種筆者提出的圖形化顯示軌道間重疊的新方法,第二節介紹怎么在Multiwfn程序(http://www.shanxitv.org/multiwfn)里精確計算軌道間重疊積分值。

    本文的例子是從CCDC數據庫里的二苯并-四硫富瓦烯(DB-TTF)的晶體結構中取出的一對兒(下文稱二聚體),如下所示

     

     計算都是在PW91PW91/6-31G*下由Gaussian09進行,結構直接利用晶體數據不做優化。


    1 分子間軌道重疊的圖形顯示

    DB-TTF的HOMO和LUMO軌道如下所示

    對照MO圖形和前面給出的二聚體圖形,會感覺分析軌道的重疊很不方便,因為這個體系相對較大,MO圖形復雜,而且二聚體中單體的相對位置是斜側著,很難想象哪些區域是軌道以相位相同方式重疊,哪些區域是相位相反重疊,以及重疊程度有多大,重疊積分應該是正還是負。盡管我們可以將這兩個LUMO都作出來,通過網格方式顯示以便于展現交疊,如下所示,但是圖像看起來很亂,難以直觀地考察重疊方式

     

    筆者提出一個十分簡單的辦法,可以讓重疊區域、程度、相位匹配方式直接顯示出來,也就是:令相應兩個軌道波函數值相乘,然后顯示等值面。

    之所以這么做,原理很簡單。兩個軌道重疊區域大的地方,乘積必然大,因此等值面能將重疊大的區域勾勒出來。而相同isovalue設定下,等值面越大,則必然重疊程度越高。如果兩個軌道在某處相位相同,那么乘積必然為正,相位不同則為負,所以根據等值面對應的符號值就知道兩個軌道在相應位置是以相位相同還是相反方式重疊了。下面就介紹下怎么利用Multiwfn通過這種方式顯示DB-TTF二聚體的LUMO軌道間的重疊。

    從CCDC數據庫里提取DB-TTF二聚體結構并經過適當處理后,得到了二聚體pdb文件DB-TTFdimer.pdb。首先,用Multiwfn對這個結構隨便計算一種函數的格點數據。這一步的目的只是讓Multiwfn自動給出能夠包含整個二聚體結構的格點設定。啟動Multiwfn,依次輸入
    c:\DB-TTFdimer.pdb       //DB-TTFdimer.pdb的路徑
    5   //計算格點數據
    100   //用戶自定義函數。如果用戶不改代碼,這個用戶自定義”函數值在各處為1,所以不耗任何計算量
    2   //中等質量格點設定
    2   //將格點數據輸出到當前目錄下的userfunc.cub

    將DB-TTFdimer.pdb當中第一個單體的坐標提取出來并保存為Gaussian輸入文件DB-TTF1.gjf。Route section寫上pw91pw91/6-31G* nosymm
    這里nosymm是為了確保Gaussian不會自動改變這個單體的坐標。用Gaussian計算DB-TTF1.gjf,并且將相應的chk文件轉換為DB-TTF1.fch。

    再將第DB-TTFdimer.pdb當中第二個單體的坐標提取出來并保存為Gaussian輸入文件DB-TTF2.gjf。Route section也寫上pw91pw91/6-31G* nosymm并通過Gaussian計算,轉換得到DB-TTF2.fch。
    Hint: 如果你想省時間,可以將上一步得到的DB-TTF1.chk復制為DB-TTF2.chk,并且在當前任務計算時寫上guess=read。這樣,在計算DB-TTF2時就會讀取DB-TTF1的收斂的波函數作為初猜(Gaussian自動會對波函數進行平移、旋轉以符合DB-TTF2的坐標),由于兩個單體的結構幾乎完全一致因此波函數基本一致,所以一次迭代就收斂了。

    啟動Multiwfn,依次輸入
    DB-TTF1.fch
    5   //計算格點數據
    0   //自定義運算
    1   //將對1個文件,也就是DB-TTF2.fch進行運算
    *,DB-TTF2.fch   //DB-TTF1的格點數據將對DB-TTF2相應的格點數據進行相乘
    4   //要計算的是軌道波函數
    79   //要算的是第79號軌道,也就是LUMO
    8   //使用某個cube文件中的格點設定。這里不能交由Multiwfn自動判斷,否則自動設的格點范圍只能容納得下DB-TTF1的結構
    userfunc.cub  //之前計算出的userfunc.cub的格點設定較好地涵蓋了二聚體所在空間范圍,所以用它的設定。

    現在Multiwfn開始計算DB-TTF1的LUMO格點數據。然后程序讓你輸入對于DB-TTF2來說計算哪個MO。因為對于它還是計算LUMO,所以還是輸入79。然后Multiwfn又開始了計算。算完之后選擇2將格點數據輸出到當前目錄下的MOvalue.cub。

    注意計算剛結束時屏幕上會看到
    Summing up all value and multiply differential element:
      9.069567746881309E-003 (即0.00907)
    這是格點數據每個格點位置的數值乘上空間微元的加和值。實際上,這正是兩個LUMO的重疊積分通過立方格點積分方式算出來的結果。由于重疊積分為正,這表明兩個LUMO間以相位相同方式疊加為主。從屏幕上還可以看到重疊積分中正值部分和負值部分各自是多少。

    目前MOvalue.cub中只含DB-TTF1的坐標信息,在可視化時將看不到DB-TTF2的結構而不便于分析。為了解決這個問題,用文本編輯器打開MOvalue.cub和userfunc.cub,將后者的原子坐標段落(第7行到科學計數法記錄的數據之間的部分)復制到前者的相應段落去。并且把前者的原子數信息,即第三行第一個數值從26改成52,之后保存。

    啟動Multiwfn,載入MOvalue.cub,選0,在圖形界面中調整角度,isovalue框里輸入0.00006并點回車,界面上方Isosurface style選Use solid face+mesh,就能看到如下的圖

     

    圖中綠色和藍色網格包圍的區域分別是兩個單體的LUMO以相位相同和相反方式重疊的區域,相當清晰直觀。也能看得出,相位相同疊加的程度大于相反方式的疊加,這從圖形上直接展現了這兩個LUMO的重疊積分何故為正。


    以上述方式顯示兩個HOMO之間的重疊,如下所示。isovalue取的是0.0001,如果也取0.00006的話等值面就非常大了。這也說明,HOMO-HOMO間的重疊要比LUMO-LUMO間的重疊程度大得多。這不難理解,因為DB-TTF的HOMO體現的是pi軌道,在垂直于分子平面上延展程度很大。

     

    從圖上看,相位相反比相位相同重疊的程度要大,所以重疊積分理應為負值。文本控制臺顯示的積分值-1.389076184499504E-002,即-0.0139也確實驗證了這一點。

     

    2 分子間軌道重疊積分的計算

    上一節在顯示軌道重疊時順便輸出了立方格點積分方式得到的兩分子的軌道間的重疊積分。這一節將通過更為準確的解析的方式得到重疊積分,由于不需要計算格點數據,計算也更為省事。

    首先,將DB-TTFdimer.pdb保存為Gaussian輸入文件DB-TTFdimer.gjf,然后將Route section寫為pw91pw91/6-31G* iop(3/33=1) nosymm guess(only)。其中iop(3/33=1)讓Gaussian在計算一開始輸出基函數間的重疊矩陣信息,這是將要被Multiwfn所利用的。由于并不需要用到二聚體整體的波函數信息,所以寫上了guess(only)避免迭代計算以節省時間。用Gaussian計算這個任務,得到DB-TTFdimer.out。

    然后,將前文已經生成的DB-TTF1.gjf和DB-TTF2.gjf的route section上都額外添上pop=full,然后分別用Gaussian運行它們,得到DB-TTF1.out和DB-TTF2.out。其中記錄的分子軌道系數將被Multiwfn讀入。

    啟動Multiwfn,依次輸入
    DB-TTFdimer.out
    100
    15  //計算分子間軌道重疊積分。Multiwfn將先從已載入的DB-TTFdimer.out中讀取基函數重疊矩陣
    DB-TTF1.out   //從中載入第一個單體的軌道系數。注意單體out文件的載入順序必須和單體在二聚體out文件當中出現的先后順序一致才行。而且必須二聚體和單體計算時都用的是相同的基組。
    DB-TTF2.out   //從中載入第二個單體的軌道系數

    此時,只需要輸入兩個軌道的編號就可以立刻輸出它們之間的重疊積分。例如輸入47,82就可以輸出第一個單體的47號軌道和第二個單體的82號軌道之間的重疊積分。這里我們分別輸入78,78和79,79就得到了兩個DB-TTF間的HOMO-HOMO及LUMO-LUMO重疊積分,其值為-0.01389242和0.00906935,這個結果和上一節以立方格點積分方式得到的結果完全一致!

    如果輸入字母o,就會將第一個單體的所有軌道(對應各個行)和第二個單體的所有軌道(對應各個列)的重疊積分矩陣在當前目錄下ovlpint.txt文件中輸出出來。

    Multiwfn也可以基于fch文件計算不同分子的軌道間的重疊積分,此時都用不著寫iop(3/33=1)和pop=full那些,更為省事,Multiwfn手冊4.100.15節有例子。

    久久精品国产99久久香蕉