給基組以even-tempered方式增加彌散函數的工具adddiffuse
給基組以even-tempered方式增加彌散函數的工具adddiffuse
文/Sobereva @北京科音
First release: 2016-Sep-23 Last-update: 2023-Jul-3
有的基組本身沒彌散函數,或者雖然有彌散函數但只有一層,比如aug-cc-pVTZ,而對于精確計算超極化率、里德堡激發態的目的一層彌散函數不夠。
有一種構建基組的方式稱為even-tempered,即相鄰GTF的指數是成比例的。若當前基組中某個角動量函數中指數最小的是ζ(n),第二小的是ζ(n-1),則這個角動量的彌散函數的指數應當為ζ(n)*[ζ(n)/ζ(n-1)]。
例如aug-cc-pVTZ對碳的三層D極化函數的指數:
1.0970000
0.3180000
0.1000000
指數最小的兩個的比例是0.1/0.318=0.314,因此,再增加一層彌散函數(構成d-aug-cc-pVTZ),指數應當為0.1*0.314=0.0314,如果再增加一層(構成t-aug-cc-pVTZ),就是0.1*0.314^2=0.00986。
筆者寫的adddiffuse是用來按照上述方式增加彌散函數的。下載地址:http://www.shanxitv.org/soft/adddiffuse.zip。其中帶.exe后綴的是Windows版可執行文件,無后綴的是Linux版可執行文件。需要源程序可以直接聯系我。
啟動后需要輸入含有Gaussian格式的基組定義的文件。可以從EMSL上拷出來放到文本文件里。文件中可以包含多個元素,每個元素末尾都要有****。壓縮包里的aug-cc-pVTZ.txt就是個例子。啟動程序后,輸入這個文件名,然后選擇要增加幾層彌散函數,以及對什么角動量增加彌散函數(比如只增加S、P、D彌散就輸入SPD,如果輸入A就對所有角動量都增加彌散)。然后程序就會在當前目錄下產生new.txt,這是添加彌散函數后的Gaussian格式的基組定義。
new.txt里面每個元素前頭多了個負號,這樣做的好處是,用gen使用自定義基組的時候,若把一堆元素的基組定義放在坐標后頭,即使其中有的元素沒有在當前計算中出現Gaussian也不會報錯。adddiffuse不支持SP殼層。如果某個角動量只含一層基函數,則adddiffuse也不會對之增加彌散函數。
或許有人覺得這程序沒多大用,因為用計算器點幾下就得到彌散函數的指數了。但是,當你同時需要對多個基組、多個元素都增加一層乃至更多層彌散的時候,手工去弄就很痛苦了,還容易出錯。
此程序一個重要用處是基于EMSL上的aug-的Dunning相關一致性基組產生d-aug-和t-aug-版本。雖然EMSL上也有d-aug-的定義,但是撰文時只對前兩周期有定義,而t-aug-則在EMSL上根本沒有。另外,雖然Gaussian里面內置了d-aug-的定義,比如寫CCSD/daug-cc-pVTZ,但是其最外層彌散函數的指數和EMSL上的不符。EMSL上的d-aug-的最外層指數是通過上述even-tempered方式構建的,而Gaussian里的不知道怎么來的,大抵沒even-tempered方式構建的合理。