詳談Multiwfn支持的輸入文件類型、產生方法以及相互轉換
詳談Multiwfn支持的輸入文件類型、產生方法以及相互轉換
文/Sobereva @北京科音
First release: 2017-May-31 Last update: 2023-Apr-24
0 前言
雖然在Multiwfn入門貼《Multiwfn入門tips》(http://www.shanxitv.org/167)、Multiwfn手冊2.5節中已經講過應該怎么選擇合適的Multiwfn輸入文件,但還是有一些初級量子化學研究者搞不明白,由于使用錯誤的輸入文件導致Multiwfn自動退出或得不到想要的結果。另外經常有人問如何產生Multiwfn要用的wfn文件之類問題,雖然在Multiwfn手冊第四章開頭已經明確說明了,但肯定也被他們無視了。此文就把怎么選擇合適的輸入文件,以及怎么產生它們完整詳細地講一遍。雖然此文主要是給初級用戶看的,但有一定經驗的用戶也建議閱讀一下,有些細節可能之前自己疏漏了。另外,本文也順帶把Multiwfn的轉換文件格式功能介紹一下,這非常有用。
本文內容對應Multiwfn最新版本,有些內容不適合之前的版本。Multiwfn最新版本可在其官網http://www.shanxitv.org/multiwfn免費下載。不了解此程序者建議閱讀《Multiwfn FAQ》(http://www.shanxitv.org/452)。
1 Multiwfn的各種功能所需要的信息
Multiwfn的不同功能需要的信息不同,而不同類型的輸入文件能提供的信息也不同,因此不同功能需要不同的輸入文件,沒法一概而論。由于Multiwfn的功能極多,靈活度極高,所以這里沒法把每個功能可以用的輸入文件類型一一直接列出,而只能告訴讀者選用規則。
Multiwfn的絕大多數功能所需要的信息可以歸為四大類:
(1)原子坐標:雖然Multiwfn是波函數分析程序,主要對象是波函數,但也有很多分析只需要有原子坐標就夠了,比如做基于promolecular的RDG分析考察弱相互作用(http://www.shanxitv.org/68)、aRDG分析(http://www.shanxitv.org/186)、計算原子配位數(手冊3.100.9節)、計算HOMA/Bird芳香性指標(http://www.shanxitv.org/176)等等。
(2)GTF信息:這里說的GTF具體是指primitive Gaussian type function。“GTF信息”具體是指各個軌道的占據數與能量、各軌道向各個GTF的展開系數,以及各個GTF的具體定義(指數、所屬中心、類型等),這需要有一定量化理論基礎知識才能徹底弄明白。Multiwfn中直接基于實空間函數(即電子密度、靜電勢、ELF、RDG、自旋密度等各種三維函數,以及相關穴、源函數等六維函數)的分析都是基于GTF信息做的。因此,比如繪制各種實空間函數的曲線圖、平面圖、等值面圖及差值圖,做拓撲分析,做盆分析,計算拉普拉斯鍵級與模糊鍵級,計算ADCH/CHELPG/Hirshfeld等電荷,做定量分子表面分析,進行模糊原子空間分析等,都需要提供GTF信息。
(3)基函數信息:具體是指各個軌道的占據數與能量,各個軌道向各個基函數的展開系數,以及基函數的具體定義(所屬中心、收縮度、收縮系數、指數等)。Multiwfn中大量分析都是基于基函數信息做的,這些分析基本都與實空間函數無關,比如計算Mayer/Lowdin/Mulliken/多中心鍵級,繪制PDOS/OPDOS,計算軌道成份,做CDA分析,做Pipek-Mezey軌道定域化等。
(4)格點數據:格點數據就是指某個實空間函數在某個三維空間區域中均勻分布的各個格點上的值。一些Multiwfn的功能需要這些數據,最典型的就是主功能13,是格點數據處理功能,可以對格點數據進行運算、統計、提取、按照特定規則屏蔽掉某些區域等操作。格點數據可以從外部文件中讀入,也可以通過Multiwfn的主功能5等功能計算得到。
Multiwfn還有大量功能,所需要的信息不屬于上述情況,情況比較雜。比如繪制光譜圖時,需要各個躍遷的能量、強度等信息,可以從Gaussian輸出文件等來源中讀取。做AdNDP分析或者NAO方式做軌道成份分析時,需要讀取Gaussian內嵌的NBO模塊或獨立的NBO程序的輸出信息。做ICSS計算時需要從Gaussian的NMR任務的輸出文件中讀取各個位置磁屏蔽張量。
有些功能輸入文件有多種選擇。比如做CDA分析時,軌道系數可以從Gaussian輸出文件中讀,也可以從提供了基函數信息輸入文件中讀。有的分析需要提供多種輸入文件,從中讀取所需的不同信息,比如做NTO或空穴-電子等分析時,需要從Gaussian輸出文件等來源中讀取激發態的組態系數,且需要從另外的文件中讀取基函數信息。
2 輸入文件的選擇
不同功能需要不同信息,怎么選擇合適的輸入文件使得Multiwfn能正常分析?在Multiwfn手冊2.5節有個表,這里摘錄過來:
(這一段特別重要,一個字一個字認真看!)表中可看到各種Multiwfn支持的輸入文件包含的信息,對勾代表包含,叉代表不包含。比如,我們看到,wfn和fch文件都包含GTF信息,但只有后者包含基函數信息,因此,對于那些只需要GTF信息的功能,用wfn和fch文件都行(顯然mwfn、molden等也都可以),結果是一樣的;而對于需要基函數信息才能做的分析,則不能用wfn文件。要明白,基函數信息屬于比GTF信息更高一級別的信息,含有基函數信息的文件在Multiwfn載入時會自動轉化出GTF信息,因此表中凡是能提供基函數信息的文件也都能提供GTF信息。所以,但凡Multiwfn博文、手冊里用wfn文件的地方,顯然都可以用fch、mwfn、molden等文件代替(當然,前提是你用的其它格式的波函數文件里存的軌道和例子里用的wfn文件里存的軌道是相同的)。再順帶強調一下:倘若你會,甚至已經得到了fch文件,自然就沒必要非得刻意效仿博文/手冊中的一些例子用out=wfn關鍵詞產生wfn文件(更何況就算你確實出于特殊目的想得到wfn文件,用Multiwfn載入fch文件后也可以用主功能100的子功能2導出成wfn文件)。
Multiwfn的手冊十分詳細、貼心,在手冊第三章介紹每個功能的相應小節的末尾,一般都注明了此功能需要的信息。手冊3.x節標題末尾的括號里的數字對應于主功能編號,如果有三級標題,那么標題末尾的數字對應于相應主功能中的子功能編號。比如拉普拉斯鍵級是Multiwfn當中主功能9的子功能8,因此介紹此功能的小節是3.11 Bond order analysis (9)中的3.11.7 Laplacian bond order (8)。在這一節末尾我們可以看到Information needed: GTFs, atom coordinates,因此,計算拉普拉斯鍵級用上面圖中GTFs那一列下面打著對勾的文件類型都可以,即fch、molden、wfn等。
還有些功能介紹的小節的末尾沒有明確注明Information needed,這是因為在這一段落的文字中,已經十分明確寫明了應該提供什么文件作為輸入。通常這種情況所需要的信息沒法簡單歸結為本文第1節列的那四種。比如通過完全態求和(SOS)方法計算(超)極化率的那一節(3.200.8)中,已經明確有"Input file"這么一段,說明了必須用Gaussian的激發態計算的輸出文件,或者記錄了躍遷偶極矩和激發能信息的文本文件作為輸入。
如果你超懶,或者對英語有心理恐懼,因而死活不愿意/沒有能力哪怕稍微看一下手冊第三章,那最最起碼也得看一下相關博文(在前述的《Multiwfn入門tips》里有匯總)或者手冊第四章對應的例子,看看例子里用了什么輸入文件,用相同的肯定不會有問題。當然,例子里顯然不可能把所有可以用的輸入文件全都列舉一遍,要不得啰嗦死。經常看到有人比如試圖用fch文件繪制光譜圖,然后說什么程序閃退,著實匪夷所思!手冊、博文里從來沒提過可以這樣做!
上面圖中還有個plain text file,這是指文本文件,即可以用文本編輯器打開能被人來閱讀的文件。這沒有具體指代,像量化程序輸出文件就屬于此類,能提供的信息視具體文件而定,反正肯定沒法提供基函數/GTF/原子坐標/格點數據。雖說Gaussian輸出文件中也有原子坐標,用gfinput關鍵詞還能輸出基函數定義等等,但是Multiwfn根本不會去讀它。因此,拿Gaussian輸出文件作為輸入文件,想繪制電子密度圖、計算鍵級什么的,完全是不可能的。
注:如果將settings.ini里的iloadGaugeom設為1,則Multiwfn會從中讀取最后一次輸出的幾何結構(有輸入朝向的優先讀輸入朝向的,沒有的話就讀標準朝向的),因此之后可以做只依賴于原子坐標的任務。
3 Multiwfn支持的輸入文件類型及產生的方法
本節把Multiwfn支持的能提供原子坐標/GTF信息/基函數信息/格點數據的輸入文件的基本特征介紹一下,并介紹對于常見情況怎么產生相應的輸出文件。
Multiwfn是按照文件后綴名來判斷按照什么格式來載入的。對于記錄含有GTF信息/基函數信息的文件(統稱為波函數文件),Multiwfn目前最高支持到h角動量(說淺顯一些,對于比如碳原子,能支持到高至cc-pV5Z基組下產生的波函數),并且只支持Gaussian函數(不支持ADF等程序用的STO函數)。
3.0 mwfn文件
這是筆者提出的目前最理想的記錄電子波函數的文件格式,包含了幾乎所有波函數分析所需要的信息,并且具有簡約、緊湊、可擴展的優點,后文提到的其它格式存在的各種問題在mwfn格式中都沒有。mwfn文件從Multiwfn 3.7版開始支持載入和導出。此格式定義的思想、格式的詳細說明以及與其它同類文件的對比見筆者發表的此文https://doi.org/10.26434/chemrxiv.11872524。由于mwfn格式相對于其它同類格式具有的顯著優點,在未來必會得到越來越多的量子化學程序的支持。
3.1 wfn文件
wfn文件格式最早源于AIM分析程序AIMPAC,現在已經是被支持最廣泛的記錄GTF信息的波函數文件格式,Gaussian、ORCA、GAMESS-US、Q-Chem、NWChem等諸多程序都可以直接產生它。此格式的詳細介紹看此文《高斯fch文件與wfn波函數文件的介紹及轉換方法》(http://www.shanxitv.org/55)。注意此文件不包含空軌道,所以沒法基于wfn文件考察空軌道,也沒法基于wfn文件算一些涉及到空軌道的量,比如計算局部電子親和能。下面介紹幾種常用的量化程序產生wfn文件的方法。
(1)用Gaussian產生wfn文件
在Gaussian中產生wfn文件很簡單,寫上out=wfn,然后末尾空一行寫上輸出路徑就完了,比如下面是Linux下輸入文件一例,在各種計算都完成后,wfn文件就會導出到/sob/poi.wfn。注意對于Linux下的輸入文件,末尾應當空兩行
# B3LYP/6-31g(d) out=wfn
[空行]
Title Card Required
[空行]
0 1
O 0.00000000 0.00000000 0.11472000
H 0.00000000 0.75403100 -0.45888100
H 0.00000000 -0.75403100 -0.45888100
[空行]
/sob/poi.wfn
對于幾何優化任務,最后產生的wfn文件里的信息對應的是最終結構的情況(fch文件也是如此)。對于scan、IRC任務,如果你想把每個點的wfn文件都產生出來,可以看此文《產生Gaussian的IRC和SCAN任務每個點的波函數文件的工具》(http://www.shanxitv.org/199),由此可以做一些很有意義的分析,比如《通過鍵級曲線和ELF/LOL/RDG等值面動畫研究化學反應過程》(http://www.shanxitv.org/200)、《制作動畫分析電子結構特征》(http://www.shanxitv.org/86)。
對于目前的Gaussian版本,后HF或CIS/TDDFT電子激發計算時默認是產生自然軌道并把它們輸出到wfn文件里的。如果你用的是MCSCF方法,還必須同時寫pop=no,此時得到的wfn文件里記錄的才是相應的自然軌道,否則記錄的是贗正則軌道。
如果你用的是G09 C.01以前的版本,注意閱讀以下文字:
對于后HF計算,如果你想讓wfn文件里存的是后HF級別的自然軌道,而不是HF軌道;或者對于CIS/TDDFT計算,想讓wfn文件里存的是激發態的自然軌道,而不是基態軌道,那么必須額外寫上density關鍵詞(等價于density=current),代表產生當前計算級別的波函數(以自然軌道方式描述),例如# CCSD/cc-pVTZ out=wfn density會在wfn文件里寫入CCSD的自然軌道。對于G09 C.01及以后版本,就不再需要寫density關鍵詞了,因為程序只要看到out=wfn,就默認用了density關鍵詞。
如果是基于非限制性HF波函數做的后HF計算,你想輸出到wfn中的是自然自旋軌道(占據數在0~1之間,區分自旋),而不是空間自然軌道(占據數在0~2之間,不區分自旋),那么除了density關鍵詞以外還得寫上pop=NOAB才行。對于G09 C.01及之后的版本就沒這個問題了。
(2)用GAMESS-US產生wfn文件
在$CONTRL段落中加上AIMPAC=.TRUE.關鍵詞,然后當任務正常運行完之后,在$SCR環境變量(由rungms腳本所定義)對應的路徑下的dat文件中,把----- TOP OF INPUT FILE FOR BADER'S AIMPAC PROGRAM -----"到"----- END OF INPUT FILE FOR BADER'S AIMPAC PROGRAM -----"之間的內容拷到一個文本文件里,后綴改名為wfn即可。
(3)用ORCA產生wfn文件
ORCA的輸入文件里加上aim關鍵詞,計算完成后就會在當前目錄下產生與輸入文件同名的wfn文件。或者在普通計算完成后,通過orca_2aim FFFFF命令把FFFFF.gbw轉化為FFFFF.wfn。注意,ORCA產生wfn文件的功能可能有一定問題,文件格式不規矩,Windows版產生的和Linux版有一定差異,不同版本產生的還可能有差異。撰文時Multiwfn最新的版本可以支持ORCA 4.0的Windows和Linux版產生的wfn文件,但對于老版本產生的則可能不能正常載入,也不保證能支持未來ORCA版本產生的wfn文件。
并不是所有程序產生的wfn文件都能被Multiwfn正常載入和分析。比如有的程序產生的wfn文件格式不規矩,載入時必定導致程序崩潰。還有的程序,比如ADF,產生的wfn文件用的是Slater型函數,但Multiwfn只支持Gauss型函數,因此也沒法正常分析。
3.2 wfx文件
wfx文件是對wfn文件的改進,從G09 B.01版開始引入,其介紹以及與wfn的差異在《在贗勢下做波函數分析的一些說明》(http://www.shanxitv.org/156)中有充分說明,這里不再累述。對于Multiwfn來說,用wfx文件不會比wfn文件帶來什么益處。wfx比wfn最關鍵的改進是帶有EDF字段描述被贗勢代替的內核電子密度,從而對于純粹基于電子密度的分析,贗勢下的結果能和全電子基組很接近。但由于Multiwfn從3.4版開始已經自帶了一套更好的EDF數據庫,用其它格式波函數文件也能同樣享受到EDF信息帶來的好處,所以wfx文件的這個優點就不算優點了。
目前能產生wfx文件的程序還較少。在Gaussian里產生wfx文件就是把out=wfn改為out=wfx,其它完全一致。wfn和wfx文件能提供的信息對于Multiwfn來說是完全一樣的。
3.3 fch文件
chk文件(checkpoint文件)是Gaussian私有的記錄計算中產生的較重要信息的格式。產生chk文件很簡單,Gaussian計算時在輸入文件開頭寫上比如%chk=C:\nico\nozomi.chk,算完了之后就會產生相應的chk文件。幾乎任何計算任務都會在chk里寫入可以用于Multiwfn做分析的波函數信息;當然,最簡單的就是單點任務了。
由于chk是二進制文件,只有Gaussian自己才能利用它,因此如果想讓其它程序能夠利用其中的信息,必須將它轉化為文本形式的fch文件(formatted checkpoint文件)。此文件的詳細介紹見前述的《高斯fch文件與wfn波函數文件的介紹及轉換方法》。
fch文件、前文提到的mwfn文件和后文提到的molden、gms文件,相對于常用的wfn和wfx文件主要優勢就是記錄了基函數信息,從而能夠利用Multiwfn的更多功能。而且它們還記錄了空軌道信息,這對于涉及空軌道的分析是必須的。
對于Windows版Gaussian,把chk轉化成fch文件的常規做法是啟動Gaussian的圖形界面,點擊Utilities - FormChk,然后選擇chk文件,則同名的fch文件就會產生在與chk相同的目錄下。有些人心急,formchk還沒轉換完就把窗口關了,則得到的fch顯然是不完整的,Multiwfn載入時肯定會崩潰。
對于Linux版Gaussian,應使用Gaussian目錄下的formchk工具來把chk轉換為fchk(fchk和fch是一碼事,不同平臺下默認的后綴名不同而已,Multiwfn都能識別)。比如用formchk MADLAX.chk就把此文件轉化為了當前目錄下的MADLAX.fchk。如果運行formchk時系統提示找不到此可執行文件,9成可能是機子里的Gaussian是菜鳥裝的,步驟不合理。如果你不知道怎么搞,索性直接用絕對路徑指明formchk的路徑,比如/sob/g09/formchk mizuki.chk。當轉換過大的chk文件的時候,可能會因為默認允許調用的內存太小導致chk轉換失敗,此時需要在環境變量中設置比如export GAUSS_MEMDEF=4000000000,代表允許formchk調用4GB內存。
轉換時應注意屏幕上的提示,如果顯示了出錯,則產生的fch文件載入Multiwfn時肯定會導致Multiwfn自動退出。轉換時提示出錯一般有三種可能
(1)chk文件莫名其妙地損壞了。把之前的chk刪了,重算一遍單點再試
(2)產生chk文件的任務本身就沒正常結束。應恰當修改關鍵詞。
(3)產生chk文件用的Gaussian版本、平臺和你當前用的formchk對應的Gaussian不一致。比如服務器上用Linux版Gaussian產生的chk卻用Windows版Gaussian自帶的formchk轉換肯定會失敗。最好哪里產生的chk就用哪個Gaussian自帶的formchk來轉換。
如果你懶得每次手動用formchk轉換,那么強烈建議你把settings.ini里的formchkpath參數設為實際的Gaussian文件包中的formchk可執行文件的路徑,這樣使用chk作為輸入文件時,Multiwfn就會自動調用formchk將之轉化為fch/fchk并載入,載入成功后會自動將fch/fchk之刪掉。
注意,對于后HF計算,哪怕用了density關鍵詞,默認情況下fch文件里記錄的也只是HF軌道。雖然此時也記錄了后HF密度矩陣,但是Multiwfn并不會讀取密度矩陣,所以此時分析的結果和HF的結果是完全一樣的。類似地,做TDDFT計算時,由于默認情況fch里記錄的軌道是基態DFT軌道,所以分析結果和分析基態DFT波函數也是一樣的。如果想基于后HF或TDDFT自然軌道進行分析,從而得到對應后HF波函數或TDDFT激發態波函數的結果,有兩種做法:
方法1:參見《在Multiwfn中基于fch產生自然軌道的方法與激發態波函數、自旋自然軌道分析實例》(http://www.shanxitv.org/403)。此方法最推薦,很省事,而且可以生成不同類型的自然軌道。
方法2:此方法不推薦,步驟繁瑣。
(1)帶著density關鍵詞做一次計算,如# MP2/cc-pVDZ density
(2)使用此關鍵詞做一次計算# guess(save,only,naturalorbitals) chkbasis,此時%chk設的chk文件應和上一步是一致的。這一步的用處是利用chk里的密度矩陣產生自然軌道,然后轉存到chk的軌道信息段落里
(3)用文本編輯器打開fch文件,把第一行里插入saveNO這個詞。這樣做是因為fch文件里的能量段落記錄的不再是能量,而是自然軌道的占據數。當Multiwfn發現第一行有saveNO這個詞,才知道要把軌道能量作為占據數來讀入,否則實空間函數計算結果會錯亂
然后此fch文件就可以載入Multiwfn了,如果想確認一下是否自然軌道被正確載入了,就在主功能0里把軌道信息顯示出來,看到占據數確實是小數就對了。
ONIOM任務產生的fch文件給Multiwfn用于波函數分析的時候有特別需要注意的問題,見http://bbs.keinsci.com/thread-27408-1-1.html。
Q-Chem和Gaussian有一定淵源,Q-Chem也能產生fch文件,如果是>=5.0版本肯定能直接順利載入,但如果是較老版本,需要先將settings.ini里的ifchprog設為2,否則載入的信息可能是錯的。量化程序PSI4也可以產生.fchk文件,與Multiwfn完全兼容,但fchk里最高只能記錄到g角動量函數(至少對于PSI4 1.2.1是如此)。
3.4 molden文件
這里說的molden文件指的是歷史悠久,已經比較過時的可視化程序Molden的輸入文件。雖然這個程序不好用,但molden文件倒是被很多程序所支持,成了比較通用的記錄基函數信息的格式。molden能給Multiwfn提供的信息和fch一樣。molden比fch有個額外好處是允許記錄每個軌道的不可約表示,凡是記錄了的情況,Multiwfn會讀取之,在主功能0看軌道等場合會輸出不可約表示。另外molden文件里明確注明了每個軌道的占據數和自旋類型,因此載入它時不需要像載入其它一些波函數文件那樣需要靠程序去猜(不過Multiwfn考慮得比較周全,猜的時候也不會猜錯)。
molden格式的定義也有個明顯缺點,就是沒有記錄核電荷數的段落,而只記錄了原子序數。對于全電子基組下的計算,原子序數和核電荷數是相同的,但是對于贗勢下的計算,核電荷數與原子序數的差值正是被贗勢代替的內核電子數。因此,如果molden文件是在贗勢下計算產生的,那么Multiwfn載入后核電荷數會當成等同于原子序數,做一些涉及到核電荷的計算,比如計算分子靜電勢,那么結果就完全錯了。為了解決這個矛盾,Multiwfn在讀取Molden文件的時候,把[atoms]字段的第三列,也即原子序數那一類,當做核電荷數來讀取。因此,在贗勢下計算時,只要手動把原子序數那一列改成實際核電荷數,那么Multiwfn讀取后就可以正常做涉及核電荷數的分析了(Multiwfn判斷原子的元素是根據molden里的原子名判斷的,因此原子序數改成核電荷數后,Multiwfn并不會判斷錯元素)。molden格式還一個缺點就是支持的基函數最高角動量只到g(不過Multiwfn可以載入ORCA、Dalton產生的帶h角動量的molden文件,Multiwfn也可以導出帶h函數的molden文件)。
molden文件雖然有標準的格式定義,但有些地方沒定義嚴格,再加上五花八門的量化程序往往肆意發揮,導致大多數能產生molden文件的程序產生的molden文件都是不標準的。Multiwfn雖然可以支持molden文件,但是目前版本能完美支持的只有Molpro、ORCA、MRCC、NWChem、deMon2k、Dalton、xtb、BDF產生的molden文件。對于其它情況下的molden文件,比如MOLCAS、CFOUR、PSI等程序產生的,Multiwfn載入時要么崩潰,要么載入的波函數信息有問題,通不過手冊附錄5說的方法的檢驗。對于這些Multiwfn不支持的情況,應當使用Molden2AIM(https://github.com/zorkzou/Molden2AIM)程序按照其說明設置好參數文件后,載入不規矩的molden文件,然后產生標準化后的molden文件,這樣的文件就可以正常被Multiwfn所利用了。幾種量化程序產生molden文件的方法如下,其它程序的產生方法見相應程序手冊。
對于ORCA,任何計算都會產生gbw文件,其意義和Gaussian的chk十分類似。產生molden文件的方法是用orca_2mkl MIO -molden,就會把當前目錄下的MIO.gbw轉化為MIO.molden.input(是否把后綴中的多余的.input去掉無所謂),然后就可以載入Multiwfn了。orca_2mkl是ORCA程序自帶的工具。如果你不想每次都手動做轉換而希望Multiwfn能直接載入gbw文件,可以將settings.ini里的orca_2mklpath設為實際的orca_2mkl可執行文件路徑,這樣Multiwfn打開gbw文件時會自動調用orca_2mkl轉換成molden文件并載入,載入完畢后會自動刪除掉轉換出的molden文件。
對于Molpro,把put,molden,ltwd.molden寫到輸入文件末尾,算完了就可以產生ltwd.molden。
對于MRCC,默認情況下任務算完了直接就會產生MOLDEN文件,將之改名,使之后綴為.molden即可被Multiwfn讀取。
對于xtb,運行時加上--molden選項,任務算完了就會產生molden.input文件,可以直接被Multiwfn讀取。
對于Dalton,默認情況下任務算完了之后在自動產生的.tar.gz包里有molden.inp,這就是.molden輸入文件。后綴名不改也可以直接載入Multiwfn,Multiwfn發現文件名里有"molden.inp"字樣就自動當作Molden輸入文件讀取了。
對于NWChem,在輸入文件末尾加入以下內容,算完后當前目錄下就會出現.molden文件
property
moldenfile
molden_norm none
end
task scf property
對于有對稱性的體系,必須用"GEOMETRY noautosym"來關閉對稱性。使用的基函數必須是球諧型,即使用"BASIS spherical"關鍵詞。不滿足這兩點則.molden文件不能被Multiwfn兼容。
CP2K也可以產生.molden文件,如果再將晶胞平移矢量手動寫入此文件,就可以通過Multiwfn做周期性體系的波函數分析,詳見《詳談使用CP2K產生給Multiwfn用的molden格式的波函數文件》(http://www.shanxitv.org/651)。
注:有些程序輸出的文件格式不規矩,或者信息有誤,可能在載入Multiwfn時沒有崩潰、報錯,但是之后分析結果錯誤。當你不確定輸入文件里的波函數是否被正確載入了,那么建議按照手冊附錄5的方法來檢驗一下,即檢查是否電子密度全空間積分值為實際電子數,以及是否每個軌道都很好滿足歸一化條件。如果兩個測試度沒問題,那么分析結果也應該沒問題。
注:最常用的Gaussian程序能產生的最高級別的波函數是CCSD,如果想在更高級別波函數下分析,需要利用到PSI4和MRCC程序,詳見此文《在Multiwfn中分析比CCSD更高級別波函數的方法》(http://www.shanxitv.org/395)。
3.5 gms文件
gms文件是指的GAMESS-US或Firefly程序(原名PC-GAMESS)的輸出文件,但必須手動把文件后綴名改為gms,否則Multiwfn載入時認不出這是什么文件。目前筆者只能保證Multiwfn能正確載入GAMESS-US和Firefly的HF/DFT任務在默認的NPRINT參數下的輸出文件,其它亂七八糟的情況難以保證。對于幾何優化,載入的是初始結構的波函數信息。gms文件能給Multiwfn提供的信息和fch、molden完全一樣。
3.6 cub、grd、vti、dx文件
cub文件也叫cube文件,是Gaussian定義的一種記錄格點數據的格式,非常流行,Multiwfn、VMD、ChemCraft、gview、Chem3D等諸多知名程序都支持它。Multiwfn自身也可以用主功能5計算格點數據導出成cub文件。cub文件的詳細介紹見《Gaussian型cube文件簡介及讀、寫方法和簡單應用》(http://www.shanxitv.org/125)。Multiwfn只支持三個平移矢量分別對應于X,Y,Z軸的情況,有些第一性原理程序可能會產生比如對應三斜格子的cub文件,Multiwfn雖然載入時可能不報錯,但用主功能0觀看等值面會亂七八糟,進行統計、處理時結果也會有問題。還有的程序產生的cub文件本來就不規矩,Multiwfn載入時會崩潰。
grd文件是DMol3程序定義的,和cub文件一樣用來記錄格點數據,但是grd文件一大缺點是沒有記錄原子坐標。所以用Multiwfn主功能0觀看grd文件的等值面時會看不到實際體系的結構。產生grd文件的方法是:Material Studio里用Dmol3計算時候選上涉及格點數據的屬性,比如properties里選Electron density。算完之后,在任務的目錄下就有grd文件了,但在MS界面的文件列表里不顯示,因為它是作為隱藏文件出現的。
vti和dx也是格點數據格式,并且不能記錄原子坐標信息。vti可以由GIMIC 2.0和ParaView產生,見《考察分子磁感生電流的程序GIMIC 2.0的使用》(http://www.shanxitv.org/491)。dx可以由比如VMD的Volmap插件(主要用于產生空間分布函數)產生。
3.7 NBO plot文件
NBO plot文件是指后綴為31~40的一系列文件,31文件記錄基函數定義,32~40分別記錄NBO框架中定義的各種軌道PNAO/NAO/PNHO/NHO/PNBO/NBO/PNLMO/NLMO/MO向基函數的展開系數。Multiwfn載入31后再載入32~40中的一種,就可以觀看或考察相應的軌道。NBO plot文件可以用Gaussian或獨立的NBO程序輸出,見《使用Multiwfn繪制NBO及相關軌道》(http://www.shanxitv.org/134)。雖然這些文件都可以提供GTF信息,但如果要考察實空間函數的話,只能用NBO(對應37)或NLMO(對應39),否則結果沒意義。
3.8 pdb、xyz、mol、mol2、chg、gro、cif文件
pdb原本主要是用來記錄生物大分子結構及相關信息用的格式,但目前已經成了用的最為通用的記錄分子結構的格式,幾乎所有分子可視化程序都支持pdb格式。pdb文件最后一列是元素名,Multiwfn載入時會優先根據元素名對原子指認元素,但有的pdb文件不規矩,沒有元素名這一列,Multiwfn就只能根據pdb里的原子名來嘗試判斷原子的元素,但由于原子名五花八門,所以Multiwfn很容易判斷錯元素。所以對于沒有元素名一列的pdb文件,讓Multiwfn載入后一定要看一下Multiwfn在屏幕上輸出的化學組成,看是否和實際一致,不一致時分析結果肯定錯誤。此時應自行增加元素名一列,或者把判斷錯元素的那些原子的原子名改為元素名,以便于Multiwfn正確判斷。
xyz文件是最為簡單的記錄分子結構的格式,被支持得也很廣泛。優點是內容非常簡明,而且是自由格式,小數位數多少都隨意,因此記錄精度可以高于pdb。標準的xyz文件里的原子名就是元素名,但有的程序產生的xyz文件里的原子名可能并非是元素名,此時也可能造成Multiwfn讀取時判斷錯元素。此時應該自行改成實際的元素名。
.mol和.mol2文件都是很流行的記錄小分子結構的格式。此格式還明確記錄了原子間鏈接關系(原子間形式鍵級)。此文件對于Multiwfn的某些依賴于原子間連接關系的計算,比如EEM電荷計算,是必須的。筆者建議用GaussView、OpenBabel等程序產生這些文件文件。
chg文件是Multiwfn自己定義的格式,用來記錄原子坐標和原子電荷,每一行內容都是:[元素名] [X坐標] [Y坐標] [Z坐標] [原子電荷],比如
O 0.000000 0.000000 0.119308 -0.301956
H 0.000000 0.758953 -0.477232 0.150977
H 0.000000 -0.758953 -0.477232 0.150977
這個文件格式有特殊用處。Multiwfn的8號實空間函數是原子核電荷或原子電荷產生的靜電勢。因此如果載入chg文件,然后對8號實空間函數繪圖,就可以考察基于原子電荷計算的靜電勢分布。chg文件可以自己很容易地根據已有的原子電荷手寫,也可以由Multiwfn的計算原子電荷的功能(主功能7)產生。
gro文件是GROMOS格式文件,主要用于GROMACS分子動力學程序記錄體系結構信息。此文件可以給Multiwfn提供坐標信息。由于此格式不記錄元素名,所以元素名是靠里面的原子名去猜的,有猜錯的可能。因此建議留意一下載入文件后顯示的化學組成,看看有沒有元素判斷錯的情況。
cif文件是最常用的記錄晶體結構的格式。Multiwfn會恰當根據其中對稱唯一原子和對稱操作信息產生完整的晶胞結構,但是不支持有原子占據數不為1的情況。
Multiwfn還可以從許多文件中讀取晶胞信息,從而做周期性體系的波函數分析、產生含有實際晶胞的第一性原理程序的輸入文件,詳見《使用Multiwfn非常便利地創建CP2K程序的輸入文件》(http://www.shanxitv.org/587)的第2節。
3.9 Gaussian和ORCA的輸入、輸出文件
Gaussian和ORCA的輸入、輸出文件都可以給Multiwfn提供坐標信息,除ORCA輸出文件外還提供alpha和beta電子數信息。
Gaussian和ORCA的輸入文件里的原子必須以笛卡爾坐標方式記錄而不能用內坐標。
如果當前任務包含很多結構,比如是opt freq任務,則Multiwfn讀取輸出文件里的結構時讀取的是最后一次的。對于Gaussian輸出文件,可以通過settings.ini里的iloadGaugeom選擇讀取輸入朝向的還是標準朝向下的結構。
3.10 CP2K和Quantum ESPRESSO的輸入文件
Multiwfn可以直接從CP2K和Quantum ESPRESSO的輸入文件里載入原子坐標信息和晶胞信息。CP2K計算產生的restart文件本身就是輸入文件,因此也可以直接載入Multiwfn。
3.11 VASP的相關文件
Multiwfn支持載入VASP的POSCAR、CHGCAR/CHG、ELFCAR、LOCPOT文件。POSCAR可以給Multiwfn提供坐標、晶胞信息,CHGCAR/CHG、ELFCAR、LOCPOT還可以額外分別提供VASP計算產生的電子密度、ELF、單電子感受到的外勢信息。文件名必須包含格式名,例如如果以CHGCAR格式載入,那么輸入文件可以以諸如nozomi.CHGCAR、CHGCAR-maki為名。對于自旋極化計算,CHGCAR/CHG同時包含總密度和自旋密度、ELFCAR會記錄對alpha和beta電子分別計算的ELF、LOCPOT會記錄alpha和beta電子分別感受到的外勢,Multiwfn在載入時會問你載入哪個。值得一提的是,在產生LOCPOT時,若LVHAR=.TRUE,則LOCPOT里記錄的相當于靜電勢的負值,Multiwfn在載入時會問你是否反轉符號,如果選y的話則載入的就相當于靜電勢;如果LVHAR=.FALSE.,則LOCPOT里記錄的相當于靜電勢的負值+交換相關勢。
4 Multiwfn的文件格式轉換功能
Multiwfn的主功能100里的子功能2可以把載入的文件轉化成各種格式,目前能輸出的格式包括mwfn、pdb、xyz、chg、wfn、wfx、molden、fch、wfn。還能輸出47文件,這是獨立的NBO程序(即GENNBO)的輸入文件。還能輸出帶有當前原子坐標的各種主流量子化學程序(如Gaussian、GAMESS-US、Molpro、Molcas、ORCA、Dalton等等)和第一性原理程序(CP2K、Quantum ESPRESSO、VASP)的輸入文件。如果Multiwfn載入的文件包含基函數信息,那么生成的GAMESS-US和Gaussian輸入文件里還可以帶著初猜波函數信息。Multiwfn的產生ORCA、CP2K、PSI4輸入文件的功能尤為強大和重要,見下面三篇文章的專門介紹:
《詳談Multiwfn產生ORCA量子化學程序的輸入文件的功能》(http://www.shanxitv.org/490)
《使用Multiwfn非常便利地創建CP2K程序的輸入文件》(http://www.shanxitv.org/587)
《使用PSI4做對稱匹配微擾理論(SAPT)能量分解計算》(http://www.shanxitv.org/526)
Multiwfn的這個導出文件功能使得Multiwfn可以作為格式轉換器,有很多重要用處,這里舉例一下,有些可能是不容易想到的:
·把molden、gms轉換成fch:這使得Gaussian以外的用戶也可以使用GaussView看結構和軌道(雖然遠不如用Multiwfn看軌道好)、用Gaussian自帶的cubegen產生格點數據(雖然cubegen的功能只是Multiwfn很小一部分子集,而且速度、易用性遠不及Multiwfn,因而幾乎已沒有使用價值,但cubegen唯獨算均勻分布的靜電勢格點數據還是快于Multiwfn的)。另外,還有些程序,比如Stone的做分布多極分析的GDMA程序也必須依靠fch文件,利用Multiwfn的格式轉換功能使得Molpro、ORCA、GAMESS-US等其它程序用戶也能用這些程序做分析。
還值得一提的是,轉化出fch后,可以用Gaussian自帶的unfchk工具將之轉成chk格式,這樣Gaussian計算時就可以用guess=read從中讀取初猜了(但對于非限制性波函數目前有些特殊情況,見http://bbs.keinsci.com/forum.php?mod=redirect&goto=findpost&ptid=16256&pid=110846&fromuid=1)。
·將Gaussian輸入文件轉化為其它量子化學程序的輸入文件:這樣Gaussian用戶也可以比較容易地使用其它量子化學程序了,當然產生出的文件里的關鍵詞都是默認的(ORCA除外),需要根據實際情況來修改,但起碼比起完全從頭寫輸入文件方便多了。對于Dalton程序,輸入文件直接手寫是極其困難,而借助Multiwfn就省事多了,詳見《量子化學程序Dalton的編譯方法和運行方式簡介》(http://www.shanxitv.org/463)。
·把gms、fch轉換成molden:這使得GAMESS-US、Gaussian用戶也可以享用依賴于molden文件作為輸入的程序,典型的就是那個陳舊丑陋的Molden可視化程序。
·轉化出47文件:Gaussian、ORCA等少數程序自己就可以產生NBO的輸入文件47。然而很多其它程序都沒這個功能,就難以做NBO分析了。然而依靠Multiwfn產生47文件的功能,GAMESS-US、MOLPRO、MOLCAS、CFOUR等其它程序的用戶也能方便地做NBO分析。不過,要注意Multiwfn產生的47文件里并不包含Fock矩陣信息,而NBO做E2分析是需要這個的,因此基于Multiwfn產生的47文件計算時NBO不會輸出E2信息。
·轉化成wfn/wfx文件:使得只支持wfn/wfx文件的波函數分析程序明顯能支持更多的程序,畢竟很多量化程序都產生不了wfn/wfx文件。另外,對相同體系相同基組,Multiwfn載入含有基函數信息的文件格式所花的時間明顯高于載入只含有GTF信息的文件,而且更占內存;對于很大體系,載入比如molden可能要花不少時間,消耗很多內存,而如果你對此體系只需要研究與實空間函數相關的問題,那么你可以把molden轉化為wfx,以后再次分析這個體系時載入wfx就行了,載入耗時和消耗的內存量少得多。
·轉化成Gaussian輸入文件:當手頭有wfn、molden、pdb、mol等文件,你想基于其中的結構用Gaussian做計算怎么辦?雖然你可以直接用文本編輯器打開文件,把里面坐標信息提出來,但顯然更簡單的方法是直接用Multiwfn產生Gaussian輸入文件。
·轉化成pdb格式:當手頭有wfn、molden、fch等文件,想用可視化程序看結構(一般可視化程序都不支持這些格式),那么你可以直接用Multiwfn轉化成非常常用的pdb格式,然后再用gview、VMD、Avogadro等程序去看。
·轉化成xyz格式:Grimme的xtb、dftd3、dftd4等程序都支持xyz文件作為輸入,顯然只要你當前要算的體系所處的格式是Multiwfn所支持的,就可以直接用Multiwfn轉成xyz然后給這些程序來算。這里筆者還提供了gjf->xyz的批量轉換腳本:《一鍵把所有gjf文件轉成xyz文件、把所有Gaussian輸出文件轉成gjf文件的腳本》(http://www.shanxitv.org/530)。
·轉化成帶初猜的GAMESS-US輸入文件:GAMESS-US的SCF收斂做得遠不如Gaussian等程序,有時候很簡單的體系居然不收斂或者收斂到不穩定波函數上,而用Gaussian等程序去做則能得到能量更低的解,但有時候我們又非得用GAMESS-US的一些功能,非得收斂且收斂到穩定波函數不可。此時,可以用Gaussian等程序在相同的計算級別下產生穩定的收斂的波函數,將mwfn/fch/molden文件載入到Multiwfn里,然后產生帶$VEC字段的GAMESS-US輸入文件,這個字段里記錄的就是其它程序已經收斂的波函數。這時用GAMESS-US再計算立刻就能收斂穩定波函數上。
注意,Multiwfn產生的Gaussian、GAMESS-US輸入文件的計算級別是隨便寫的,應當根據實際情況修改。
·轉化成mkl格式:筆者專門寫了篇文章說這點,見《將Gaussian等程序收斂的波函數作為ORCA的初猜波函數的方法》(http://www.shanxitv.org/517)。
·VASP、VMD的volmap插件、Dmol3的格點數據文件轉換成cub格式:VMD的volmap插件能產生的dx格式、Dmol3的grd格式、VASP的CHGCAR/CHG&ELFCAR&LOCPOT文件極少有可視化程序支持,如果你想用支持cub格式的程序去觀看它們文件,那Multiwfn就派上用場了。需注意的是grd、vti文件不含原子坐標,但是cub文件又要求包含原子坐標,所以載入grd、vti后產生cub文件時Multiwfn會自動隨意在cub里加入一個原子以滿足cub的格式要求。
·格點數據導出為vti格式:如《考察分子磁感生電流的程序GIMIC 2.0的使用》(http://www.shanxitv.org/491)里所介紹的,ParaView是十分強大的可視化體數據的程序,具有許多化學領域可視化程序不具備的展現體數據的方式,如繪制流線場圖等。將格點數據用Multiwfn轉化成ParaView的vti格式后就可以享受ParaView的強大了。
·Gaussian輸出文件轉化成gjf格式:這個很有實際意義,比如幾何優化任務之后要對最后一幀算單點能,就可以這樣將最后一幀的結構保存成新的單點任務的gjf文件。筆者還提供了批量轉化腳本,詳見《一鍵把所有gjf文件轉成xyz文件、把所有Gaussian輸出文件轉成gjf文件的腳本》(http://www.shanxitv.org/530)。
還有Multiwfn用戶利用Multiwfn的格式轉換的功能專門寫了批處理腳本,見《批量轉換量子化學軟件I/O文件以及提取輸出信息的Shell腳本》(http://bbs.keinsci.com/thread-16231-1-1.html)。
另外值得一提的是,Multiwfn主功能6是修改波函數的功能,你可以利用其中的子功能對當前波函數盡情地根據需要進行修改(比如去掉某些原子或軌道的貢獻、對波函數平移復制等),改過之后可以用Multiwfn的主功能100的子功能2來導出mwfn/molden/fch/wfn/wfx/47這些記錄了波函數信息的格式。下次再做同樣的分析時就可以直接載入了,而不需要再改一遍(順帶提醒一下,修改了基函數信息后,GTF信息不會直接更新。得導出比如mwfn、fch、molden文件后,再載入之,才會在文件載入的時候產生對應的GTF信息)。