• 使用Multiwfn結合CP2K計算晶體中原子的氧化態

    使用Multiwfn結合CP2K計算晶體中原子的氧化態
    Using Multiwfn in combination with CP2K to calculate oxidation state for atoms in crystals

    文/Sobereva@北京科音  2024-May-23


    1 前言

    波函數分析程序Multiwfn可以基于電子波函數計算原子和片段的氧化態,這在筆者之前寫的《使用Multiwfn通過LOBA方法計算氧化態》(http://www.shanxitv.org/362)一文中已做了詳細介紹,沒讀過者一定要先閱讀此文,否則無法理解下文的內容。此文介紹的做法已經被廣泛用來準確地考察分子中的氧化態。如今Multiwfn已經支持將這種方法用于CP2K計算的周期性體系的波函數,從而考察晶體中原子的氧化態,這非常有實際價值,具體做法將在本文介紹。注意氧化態和原子電荷完全是兩碼事,周期性體系的原子電荷的計算看《使用Multiwfn對周期性體系計算Hirshfeld(-I)、CM5和MBIS原子電荷》(http://www.shanxitv.org/712)。

    Multiwfn可以在官網http://www.shanxitv.org/multiwfn免費下載,本文的讀者必須使用2024年5月23日及以后更新的版本,否則沒有本文介紹的特性。對Multiwfn不了解者看《Multiwfn FAQ》(http://www.shanxitv.org/452)和《Multiwfn入門tips》(http://www.shanxitv.org/167)。


    2 用法

    在Multiwfn中對周期性體系做LOBA或mLOBA分析氧化態的具體操作流程和對孤立體系做別無二致,都是先用主功能19產生定域化軌道(介紹見《Multiwfn的軌道定域化功能的使用以及與NBO、AdNDP分析的對比》http://www.shanxitv.org/380),然后進入主功能8(軌道成分分析),選擇LOBA/mLOBA分析,之后輸入一個LOBA方法判斷定域化軌道電子歸屬的閾值,或者輸入m讓Multiwfn按照mLOBA的方式判斷歸屬即可。定域化軌道的電子歸屬是什么意思,在前述的《使用Multiwfn通過LOBA方法計算氧化態》里已經專門說過了,這里不再累述。之后各個原子的氧化態就會立馬輸出出來。用戶也可以自定義片段來得到片段的氧化態。

    對周期性體系做LOBA/mLOBA分析的輸入文件必須是CP2K產生的molden文件,并且需要自己在里面加入盒子信息。具體方法在《詳談使用CP2K產生給Multiwfn用的molden格式的波函數文件》(http://www.shanxitv.org/651)里有詳細介紹。由于考慮k點時不能產生molden文件,因此原本晶胞較小的話需要擴胞成足夠大的超胞,從而對其計算時只需要考慮gamma點。Multiwfn不支持Quantum ESPRESSO、VASP等其它第一性原理程序產生的波函數,也沒有任何支持的必要,因為對于絕大多數情況,用Multiwfn創建CP2K單點輸入文件并用CP2K計算是非常簡單且快速的事,可參考《使用Multiwfn非常便利地創建CP2K程序的輸入文件》(http://www.shanxitv.org/587)。

    對于當前目的,CP2K計算時用贗勢基組也行,用全電子基組也行,沒有什么特別的講究。CP2K計算的時候不要開smearing,否則軌道占據數不再精確為整數、不再是標準的單行列式波函數,此時也就沒法做軌道定域化。如果有特殊原因非開smearing不可,可以在Multiwfn載入molden文件后進入主功能6,選擇選項38,此時Multiwfn會按照軌道能量由低到高重排電子確定占據數,軌道占據數就都為整數了,之后退回到主菜單,再照常按前述步驟做LOBA/mLOBA分析即可。


    3 例子

    下面給出一系列通過Multiwfn使用LOBA/mLOBA計算固體的氧化態的例子。CP2K的輸入輸出文件在http://www.shanxitv.org/attach/711/file.zip里都給了。只有3.1節例子對應的molden文件我在里面直接給了,如果所有例子的molden文件都給的話壓縮包就太大了。CP2K輸入文件里的各種設置我這里就不細說了,在北京科音CP2K第一性原理計算培訓班(http://www.keinsci.com/workshop/KFP_content.html)里有非常全面系統的講解。


    3.1 單層氮化硼

    氮化硼(BN)是知名的二維材料,這里完整介紹單層BN的氧化態計算的流程。本文文件包里的BN_bulk.cif是氮化硼晶體的結構文件,用GaussView打開它,可看到晶胞里有兩層BN。刪除其中的一層,然后保存為BN_ml.gjf。之后啟動Multiwfn,載入BN_ml.gjf,輸入
    cp2k   //創建CP2K輸入文件
    [回車]  //產生的輸入文件用默認的名字BN_ml.inp
    -2  //要求導出molden文件
    -11  //進入幾何操作界面
    19  //構造超胞
    6  //第1個平行于層的方向擴胞成原先的6倍
    6  //第2個平行于層的方向擴胞成原先的6倍
    1   //垂直于層的方向不擴胞
    -10  //返回
    -7  //設置周期性
    XY
    0  //產生輸入文件(計算級別為默認的PBE/DZVP-MOLOPT-SR-GTH)

    用CP2K運行Multiwfn產生的BN_ml.inp,我這里用雙路7R32 96核機子4秒鐘就算完了。現在當前目錄下有了BN_ml-MOS-1_0.molden,按照《詳談使用CP2K產生給Multiwfn用的molden格式的波函數文件》(http://www.shanxitv.org/651)所述,把以下信息插入進去,以定義晶胞信息和原子價電子數信息。改好的文件已經在本文的文件包里提供了,是BN_ml-MOS-1_0.molden。

     [Cell]
    14.98944000     0.00000000     0.00000000
    -7.49472000    12.98123580     0.00000000
     0.00000000     0.00000000     8.00000000
     [Nval]
    B 3
    N 5

    啟動Multiwfn,載入BN_ml-MOS-1_0.molden,然后輸入
    19  //軌道定域化
    1  //只定域化占據軌道,用默認的Pipek-Mezey方法
    8  //軌道成分分析
    100  //LOBA/mLOBA分析

    輸入一個閾值,比如50,馬上看到各個原子的以LOBA方法計算的氧化態,如下所示。可見B的氧化態為3、N為-3,整個體系所有原子氧化態加和為0,非常符合常識。這里用的閾值50%對于成鍵方式比較典型的情況是適合的,它的意思是如果有某原子對某個定域化軌道貢獻超過50%(Multiwfn以Hirshfeld方法計算貢獻值),則這個軌道的電子就完全歸屬于這個原子。

     Oxidation state of atom   1(B ) :  3
     Oxidation state of atom   2(N ) : -3
     Oxidation state of atom   3(B ) :  3
     Oxidation state of atom   4(N ) : -3
     Oxidation state of atom   5(B ) :  3
     Oxidation state of atom   6(N ) : -3
    ...略
     The sum of oxidation states:     0

    我提出的modified LOBA (mLOBA)方法是對LOBA的重要改進,它將每個定域化軌道的電子完全歸屬到對它貢獻最大的那個原子上,可以確保所有原子的氧化態加和總為0,而且也沒有閾值選擇的任意性(有的時候LOBA的結果對閾值敏感),比mLOBA在原理上明顯更好。在當前界面里輸入m即得到mLOBA方法算的氧化態的結果,也是B和N的氧化態分別為3和-3。


    3.2 BaTiO3

    BaTiO3晶體的cif文件是本文文件包里的BaTiO3.cif。用Multiwfn創建其4*4*4超胞在PBE/DZVP-MOLOPT-SR-GTH下做單點的CP2K計算的輸入文件。當前的超胞在每個方向有16埃,足夠大了。CP2K計算后得到molden文件,在里面加入恰當的[Cell]和[Nval]字段后,啟動Multiwfn并將之載入,然后輸入
    19  //軌道定域化
    -9  //設置產生定域化軌道后自動計算軌道成份的方法
    0  //不輸出軌道成份。這些信息不是當前感興趣的,當前體系又大,不輸出可以節約不少時間
    1  //只定域化占據軌道,用默認的Pipek-Mezey方法
    由于當前體系大、軌道數很多,因此軌道定域化過程耗時較高。在EPYC 7R32機子上花了約8分鐘。之后輸入
    8  //軌道成分分析
    100  //LOBA/mLOBA分析
    m  //顯示mLOBA方法計算的原子氧化態

    馬上看到以下結果。可見Ba、Ti、O的氧化態都和常識完全一致

     Oxidation state of atom   1(Ba) :  2
     Oxidation state of atom   2(Ti) :  4
     Oxidation state of atom   3(O ) : -2
     Oxidation state of atom   4(O ) : -2
     Oxidation state of atom   5(O ) : -2
    ...略


    3.3 MOF-5

    MOF-5是知名的金屬有機框架化合物,介紹見https://en.wikipedia.org/wiki/MOF-5。其中含有Zn,這里算算Zn的氧化態是多少。MOF-5晶體的cif文件在本文的文件包里提供了,是立方晶胞,邊長25.86埃。由于邊長已經大到可以只考慮gamma點做計算,因此CP2K計算時不需要擴胞,直接對原胞算單點得到molden文件即可。相應的CP2K輸入文件已提供在了本文的文件包里。氧化態計算過程同前,7R32機子上幾分鐘可以算完整個過程。氧化態結果為Zn=2、O=-2、H=1、C=2/0/2。可見Zn、O、H的氧化態都完全符合預期。當前體系中C的氧化態有三種,和所處的化學環境差異有關。


    3.4 單層MoS2

    MoS2是知名的二維材料體系,它的體相結構文件是本文文件包里的MoS2_bulk.cif。完全效仿3.1節氮化硼的例子,取單層并基于5*5*1的超胞模型做它的氧化態的計算。如果以LOBA方法計算氧化態并輸入50作為閾值,結果為

     Oxidation state of atom   1(Mo) :  6
     Oxidation state of atom   2(S ) : -2
     Oxidation state of atom   3(Mo) :  6
     Oxidation state of atom   4(S ) : -2
     Oxidation state of atom   5(S ) : -2
     Oxidation state of atom   6(S ) : -2
     Oxidation state of atom   7(Mo) :  6
    ...略
     The sum of oxidation states:   50

    雖然Mo的價電子有6個,看似Mo的氧化態為6也不是不可能,但實際上明顯是錯的,因為當前所有原子的氧化態加和為100。考慮到S的氧化態不可能比-2更負,明顯當前的結果高估了Mo的氧化態。即便嘗試各種閾值,也始終得不到能令LOBA方法算的氧化態加和為0的情況。因此LOBA對此體系完全失敗。

    輸入m使用mLOBA計算氧化態,結果為

     Oxidation state of atom   1(Mo) :  4
     Oxidation state of atom   2(S ) : -2
     Oxidation state of atom   3(S ) : -2
     Oxidation state of atom   4(Mo) :  4
     Oxidation state of atom   5(S ) : -2
     Oxidation state of atom   6(S ) : -2
     Oxidation state of atom   7(Mo) :  2
     Oxidation state of atom   8(S ) : -2
     Oxidation state of atom   9(S ) : -2
    ...略
     The sum of oxidation states:     0

    可見mLOBA方法算的所有原子氧化態加和為期望的0,但是Mo有的氧化態是2有的是4,和當前體系中所有Mo等價的事實不符,原因后面會說。解決方法是輸入-1定義片段,然后輸入所有Mo對應的序號。序號的快速查詢方法是在Multiwfn主功能0的菜單里選擇Tools - Get atom indices of a given element,然后輸入Mo,點OK,就會返回下面的內容,將之粘貼到Multiwfn定義片段的窗口里即可。
    1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,73
    片段定義好后,再次輸入m,可以看到Oxidation state of the fragment: 100,即這個片段總的氧化態為100。由于當前體系里有25個完全等價的Mo,因此Mo的氧化態為100/25=4,是完全正確的值。

    為什么mLOBA算出來的明明等價的Mo會有不同的氧化態?這可以通過考察定域化軌道的特征結合mLOBA的原理予以了解。默認情況下,Multiwfn的主功能19做完軌道定域化后會自動輸出各個定域化軌道的成份,可以看到除了單中心、雙中心的定域化軌道外,還有大量三中心的:

     More delocalized LMOs: (Three largest contributions are printed)
      301:   64(Mo) 24.8%   46(Mo) 24.8%   61(Mo) 24.8%
      302:   46(Mo) 24.8%   49(Mo) 24.8%   31(Mo) 24.8%
      303:   16(Mo) 24.8%   34(Mo) 24.8%   31(Mo) 24.8%
    ...略

    從軌道成份上明顯可知這些三中心軌道都是等價的。軌道定域化做完后按照《使用Multiwfn觀看分子軌道》(http://www.shanxitv.org/269)說的,在Multiwfn的主功能0里隨便看一個三中心軌道,如下所示

    可見這個軌道體現的是三個Mo之間的三中心作用。按照mLOBA的思想,這個軌道上的兩個電子會完全歸屬到對它貢獻最大的原子上,但由于三個Mo的貢獻本質上相同,實際的貢獻量由于數值計算誤差會有極其輕微的差異,所以這個軌道上的電子歸屬到哪個Mo是有隨機性的,這是為什么Mo的氧化態有的為2有的為4。可見,只要把軌道定域化和mLOBA的思想都理解了,遇到可疑的結果自然就能通過具體分析搞明白是怎么回事、知道怎么恰當解決。


    4 總結

    本文詳細介紹了怎么用Multiwfn基于CP2K對固體做DFT計算得到的波函數通過LOBA和mLOBA方法得到原子的氧化態,給了很多例子。可見本文的方法操作簡單,結果非常合理,這對于討論原子在固體中的狀態、對體系進行分類很有價值。作為練習,讀者可以對NaCl、MgO、AlN、SiO2晶體也都算算氧化態。值得一提的,如本文的例子所體現的,如有了我后來提出的mLOBA方法,原本的LOBA就沒什么使用價值了,我建議總是默認用mLOBA。

    使用本文的方法計算在發表結果時務必記得按照Multiwfn程序啟動時的提示對Multiwfn進行正確的引用。

    久久精品国产99久久香蕉