提取Gaussian的rwf文件信息的工具rwfdump简介
提取Gaussian的rwf文件信息的工具rwfdump简介
Introduction to rwfdump, a tool for extracting information from Gaussian rwf file
Introduction to rwfdump, a tool for extracting information from Gaussian rwf file
文/Sobereva @北京科音 2011-Dec-15
rwf文件包含很多“子文件”,分别存放不同类别的信息,我更愿意将之称为一个个槽位,毕竟rwf文件在硬盘上是作为一个而不是多个文件来保存的。每个槽位有一个对应编号,保存的内容可以参考http://sobereva.com/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://sobereva.com/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是完全对应的。