• 提取Gaussian的rwf文件信息的工具rwfdump簡介

    提取Gaussian的rwf文件信息的工具rwfdump簡介

    文/Sobereva @北京科音   2011-Dec-15

    Gaussian程序是由一個個獨立的Link子程序組成的,完成一個計算任務需要各種Link按照指定順序和特定選項依次被調用,如同一條作業流水線。在每個Link之間傳遞臨時數據最主要依靠的是rwf文件,即讀寫文件,這個文件在計算任務一開始被初始化,隨著計算的進行,不斷地被填進更多的信息,如果沒有通過%rwf=xxx來指定rwf文件保存的位置,在任務正常結束時會被自動刪除。rwf文件里面儲存的信息過于豐富,尤其是后HF計算中要需要儲存積分變換數據,會十分龐大,不便于在硬盤上長期保存和拷貝。為了解決這個問題,rwf文件中一部分最重要的信息會在checkpoint文件(chk文件)中留有一個副本。由于chk文件只保留了rwf中的精華數據,因此體積比較小,而且通過formchk工具可以轉換為文本格式,能夠方便地從中提取有用信息進行進一步分析。另外,重新啟動中斷的任務也需要chk文件中的一部分信息。

    rwf文件包含很多“子文件”,分別存放不同類別的信息,我更愿意將之稱為一個個槽位,畢竟rwf文件在硬盤上是作為一個而不是多個文件來保存的。每個槽位有一個對應編號,保存的內容可以參考http://www.shanxitv.org/g09/e_progdev.htm當中的RWF Numbers部分。以下是從其中截取的一部分
    P 501 Gen array.
    P 502 /LABEL/—Title and atomic orbital labels.
      503 Connectivity information (MxBond,0),NBond(NAtoms),IBond(MxBond,NAtoms),RBond(MxBond,NAtoms), where arrays are rounded to a multiple of IntPWP.
      504 Dipole derivative matrices (NTT,3,NAt3).
    P 505 Array of copies of /Gen/ from potential surface scan.
    P 506 Saved basis set information before massage, uncontraction, etc.
    P 507 ZMAT/ and /ZSUBST/.
    P 508 /IBF/ Integral Bugger Format.
      509 Incomplete integral buffer.
    T 510 /FPINFO/ Fletcher-Powell optimization program data.
    P 511 /GRDNT/ energy, First and second derivatives over variables, NVAR.
    P 512 Pseudo-potential information.
    P 513 /DIBF/ integral derivative buffer format.
      514 Overlap matrix, optionally followed by absolute overlap and absolute overlap over primitives.

    開頭有P的,代表這類信息也同時儲存在了chk文件里;有T的,說明這類信息在任務執行過程中被儲存在chk文件里,以備重新啟動任務之需,但是由于普遍價值不大,在任務正常結束后就會從chk文件中刪掉;而開頭是空的信息,說明只存在于rwf文件中而在chk文件中沒有副本。

    也就是說,那些沒寫P的信息沒辦法在任務結束后從chk文件里找到。然而這些信息有時候卻很有用,在后續分析時可能要用到,比如基函數間的重疊積分矩陣。好在基函數間重疊矩陣通過guess=only iop(3/33=1)可以直接迅速輸出出來,然而其它的一些信息,有的就沒有對應IOp可以輸出,或者有對應的命令能輸出之,但是還得把耗時的過程重新算一次才能輸出出來,很不方便。

    Gaussian中自帶了一個頗有用的小程序rwfdump,它就在Gaussian安裝目錄下,專門用來將rwf文件中指定槽位中的信息提取出來并轉化為可讀的文件。可惜這個小程序并未在Gaussian用戶手冊,乃至程序員手冊中提及,導致被很多人忽視。本質上,rwf文件指定槽位的信息是通過Gaussian代碼中FileIO子程序進行讀寫的,rwfdump這個工具就是給FileIO子程序加個殼,使之成為能夠獨立運行的程序罷了。

    rwfdump通過命令行調用,語法是:rwfdump a.rwf a.txt iiix
    其中a.rwf是被提取信息的rwf文件。a.txt是提取出的信息儲存的地方,如果輸出文件名只寫為一個橫杠-,那么就直接輸出到屏幕上。iii是rwf是信息的槽位編號。x控制輸出數據的數據類型,I代表十進制整數,H代表十六進制數,R代表浮點數,A代表ASCII文本。

    例如,從官方的表格中查到540號槽位儲存的是Molecular alpha-beta overlap (U), real,也就是非限制性計算中alpha軌道和beta軌道間的重疊積分,想提取它就可以輸入比如
    rwfdump c:\idol-master\a.rwf d:\sob\BLOOD-C.txt 540R
    這里用的例子是uhf/sto-3g下計算的三重態乙酸。打開d:\ltwd\BLOOD-C.txt,在一開始會看到一堆類似這樣的信息
     Number         534        536        538        540        551        552        559        562
     Base        121856     122368     129024     128000     104960     103936     107520      98304
     End         122156     122668     129324     128576     104985     103950     107521     103801
     End1        122368     122880     129536     129024     105472     104448     108032     103936
     Wr Pntr     121856     122368     129024     128000     104960     103936     107520      98304
     Rd Pntr     121856     122368     129024     128000     104960     103936     107520      98304
     Length         300        300        300        576         25         14          1       5497
    這些信息是rwf文件里各個槽位的匯總,包括起始偏移量(Base)、終止偏移量(End)、長度(length,即End與Base之差)、寫/讀的指針位置(Wr/Rd Pntr),單位都是word(8字節,即一個雙精度浮點數的大小)。可以看到,540號槽位的長度是576。由于提取的數據類型是浮點數,因此下面將出現576個數據,對應于這個體系中總共24個alpha軌道與24個beta軌道間的重疊積分。
    以下內容是那576個數據開頭的一部分
    Dump of file   540 length           576 (read left to right):
           0.99999749D+00      0.29425608D-03      0.26009204D-04      0.58930395D-06     -0.17093304D-02
           0.75910206D-03      0.36841903D-03      0.63739342D-03      0.15016508D-03     -0.60968183D-08
          -0.53159908D-03      0.21762391D-09     -0.82064171D-04      0.77445410D-04     -0.49774090D-09
          -0.19852883D-04     -0.58360576D-08      0.67017502D-04      0.40140158D-03     -0.10351407D-03
           0.13467769D-08     -0.14894984D-03      0.86191700D-04      0.61374239D-03     -0.29426013D-03
           0.99999992D+00      0.15971966D-04      0.65829259D-06     -0.47920802D-04     -0.20630445D-03
           0.50406617D-04      0.75184201D-04     -0.53428238D-04     -0.15868756D-08     -0.33577428D-04
    ...
    -0.53159908D-03這種表示代表-0.00053159908,D是Fortran雙精度浮點數中代表10的多少次方的意思。在自旋極化體系的非限制性計算中,alpha軌道與alpha軌道間正交歸一,beta與beta軌道間正交歸一,但alpha與beta軌道間沒有正交歸一的限制,因此這些數據中并不是1或0。接近0的表明相應alpha和beta軌道重疊積分很小,接近正交。而接近1的,可以認為是幾乎配對、相互重合的alpha和beta軌道。rwfdump只是把數據簡單提取出來,并沒有自動排成舒服、容易由人類讀取的格式,哪個數值對應哪兩個alpha和beta軌道間重疊積分很難看出。實際上,在筆者的Multiwfn程序(http://www.shanxitv.org/multiwfn)中有計算alpha和beta軌道間重疊積分矩陣的功能,載入wfn或fch文件后進入主功能100選5就行了,經過計算后會輸出諸如這樣的信息
                 1             2             3             4             5
         1  0.999997D+00 -0.294260D-03  0.204458D-05 -0.251504D-04  0.101833D-02
         2  0.294256D-03  0.100000D+01  0.987506D-06 -0.157908D-04  0.150142D-03
         3  0.260092D-04  0.159720D-04 -0.103676D+00  0.994608D+00  0.892031D-03
         4  0.589304D-06  0.658293D-06  0.994611D+00  0.103676D+00 -0.148590D-04
         5 -0.170933D-02 -0.479208D-04  0.995302D-04 -0.832881D-03  0.847507D+00
         6  0.759102D-03 -0.206304D-03  0.390161D-04 -0.322454D-03  0.529753D+00
    ...
    其中i行j列代表第i個alpha軌道與第j個beta軌道的重疊積分。Multiwfn給出的數據可以與rwfdump輸出的相互對應,rwfdump的橫著的一行一行的數據對應于Multiwfn輸出的一列一列的數據。


    另外,rwfdump也能用來從chk文件中直接提取指定槽位的數據。例如,從rwf槽位對照表中得知501儲存的是Gen數組(這個數組包含的是各種各樣的標量數據),由于前面寫著P,表明它不僅保存在rwf文件里也保存在chk文件里,因此就可以從chk文件里提取它,即運行比如rwfdump c:\ltwd\a.chk h:\K-ON\touhou.txt 501R
    提取出的Gen數組的前幾行是
           0.20068411D+01      0.00000000D+00      0.00000000D+00      0.00000000D+00      0.20297583D+03
           0.00000000D+00      0.00000000D+00      0.00000000D+00      0.00000000D+00      0.00000000D+00
           0.00000000D+00      0.00000000D+00      0.00000000D+00      0.00000000D+00      0.00000000D+00
           0.00000000D+00      0.00000000D+00      0.00000000D+00      0.00000000D+00      0.00000000D+00
           0.00000000D+00      0.00000000D+00      0.81962558D-08      0.20000118D+01      0.00000000D+00
           0.00000000D+00      0.00000000D+00      0.00000000D+00      0.40442442D+01      0.00000000D+00
           0.00000000D+00     -0.22469385D+03      0.00000000D+00      0.00000000D+00      0.00000000D+00
    通過查閱Gaussian程序員手冊得知Gen數組第32個數是SCF能量,這里即-0.22469385D+03,它與Gaussian輸出文件中顯示的E(UHF) =  -224.693847643是完全對應的。
    久久精品国产99久久香蕉