1.2 产生里德堡基函数
我们首先介绍对分子产生里德堡基函数的方法。这些里德堡轨道是弥散的,因此需要使基函数弥散。由于弥散,它们不再局限在原子上,也就是价轨道上,而应被看作是扩展到整个分子中。
计算方法以这样的事实为基础:如果在一个虚轨道上添加一个电子,按照Koopmans理论,轨道能量的增加使体系的能量增加。轨道重新组织的影响对弥散虚轨道的影响非常小,因此在阳离子的虚轨道上添加一个电子是对里德堡态的合理近似。对这种方法更详细的讨论见文献[3]。
方法可以分为几步(见文献[3]):
1. 使用RASSCF程序,在一个电子去除之后对系统进行RHF或价电子的CASSCf计算。这将决定电荷的中心,对于选择里德堡基函数展开的中心非常适合。结果对选择的反应不灵敏。
2. 在中心电荷上,为初始基组添加合适的弥散。我们使用Kaufmann等人对里德堡波函优化的通用的指数(见文献[4])。
3. 用新的基函数重复RHF或CASSCF计算。
4. 使用最低的虚函数定义基组。
最好不要使用相当大的价基组进行这个计算,最好选择双-ζ或双-ζ加极化函数基组。在这个例子中,我们将使用苯,在环中心有一个自然形成的原点,因此就排除了决定电荷中心的步骤,而且也作了简化,只需考虑s函数。
方案如下:
2. 创建用于运行SEWARD,SCF,RASSCF和RASREAD的shell脚本,并运行任务。
3. 编辑得到的格式化轨道文件C6H6.RasOrb。设置占据空间的占据数为0,而不可约表示中的最初三个虚轨道的占据数分别为10-1,10-2,和10-3。这些占据数是任意的,只要能构成一个衰减的序列即可。
4. 建立运行GENANO的shell脚本,并运行任务。
5. 结果文件C6H6.Ano包含了收缩因子。把这个文件与SEWARD输入文件中的指数合并,就得到最终的收缩基组。我们通常对每一类型使用一个函数。
基函数半径范围的结果如图2所示。
下面是输入的例子。首先,SEWARD输入使用非收缩的里德堡函数:
图2. 里德堡轨道半径的范围。
&SEWARD &END Title Benzene molecule. Symmetry X Y Z *OneOnly Basis set C.ano-s...3s2p1d. C1 2.636169 .000000 .000000 C2 1.318084 2.282990 .000000 End of basis Basis set H.ano-s...2s1p. H1 4.684633 .000000 .000000 H2 2.342316 4.057011 .000000 End of basis Basis set X....8s8p8d. / Inline 0.0 0 8 8 .02462393 .01125334 .00585838 .00334597 .00204842 .00132364 .00089310 .00062431 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 X 0.000000 0.000000 .000000 End of basis End of input
一旦完成计算,收缩函数就会代替非收缩函数。在通常的计算中,我们对每一类型使用同一个函数1s1p1d,但是作为特殊的用途,例如为了增加里德堡基组,我们可以使用三个。
基组:
X....1s1p1d. / Inline 0.0 0 8 1 .02462393 .01125334 .00585838 .00334597 .00204842 .00132364 .00089310 .00062431 .15531366 -.26126804 .38654527 -1.53362747 -1.27182240 .94560891 1.10186802 .95250581 -1.24269525 -1.70918216 .49632170 -2.22724281 2.03031830 .68292933 1.94719179 -1.73187442 -.56245782 .68883478 .92694465 .30675927 .15138171 -.22934028 -.07852136 -.02092438 X 0.000000 0.000000 .000000 End of basis
SCF输入:
&SCF &END Title Benzene molecule. Occupied 6 5 4 3 1 1 1 0 End of input
RASSCF输入:
&RASSCF &END Title Benzene molecule Symmetry 7 Spin 2 nActEl 1 0 0 Inactive 6 5 4 3 1 1 0 0 Ras2 0 0 0 0 0 0 1 0 LumOrb Thrshld 0.5d-8 0.5d-4 1.0d-4 Iterations 50 25 End of input
RASREAD输入:
&RASREAD &END Average Orbitals End of input
GENANO输入:
&GENANO &END Title Rydberg basis set for benzene. sets 1 Center X Weights 1.0 end of input
这里是例子中的两个shell脚本,用Korn shell编写,但没有使用Korn shell的外部功能,所以需要重新用C shell或其它你喜欢的shell编写。这是很简单的。
产生波函的shell脚本:
#!/bin/ksh Project='C6H6' Home=$PWD WorkDir=/temp1/$LOGNAME/$Project export Project WorkDir print 'Start of job:' $Project print 'Current directory:' $Home print 'Scratch directory:' $WorkDir # trap 'exit' ERR rm -fr $WorkDir mkdir $WorkDir cd $WorkDir # molcas run seward $Home/$Project.seward.input molcas run scf $Home/$Project.scf.input molcas run rasscf $Home/$Project.rasscf.input molcas run rasread $Home/$Project.rasread.input cp C6H6.RasOrb $Home # cd - rm -r $WorkDir
产生收缩的shell脚本:
#!/bin/ksh Project='C6H6' Home=$PWD WorkDir=/temp1/$LOGNAME/$Project export Project WorkDir print 'Start of job:' $Project print 'Current directory:' $Home print 'Scratch directory:' $WorkDir # trap 'exit' ERR rm -fr $WorkDir mkdir $WorkDir cd $WorkDir # molcas run seward $Home/$Project.seward.input ln -s $Home/C6H6.Ano ANO ln -s $Home/C6H6.RasOrb NAT001 ln -s C6H6.OneInt ONE001 molcas run genano $Home/$Project.genano.input # cd - rm -r $WorkDir exit
对于噻吩,可以使用同样的方法。除了产生s,p,d函数以外唯一不同的是,要计算阳离子的两个态。因此使用GENANO程序的最后步骤将包括两个文件:
ln -s $Home/Thiophene.Ano ANO ln -s $Home/Thiophene.RasOrb1 NAT001 ln -s $Home/Thiophene.RasOrb2 NAT002 ln -s Thiophene.OneInt ONE001 ln -s Thiophene.OneInt ONE002 molcas run genano $Home/$Project.genano.input
和GENANO输入:
Title Rydberg basis set for thiophene. sets 2 Center X Weights 0.5 0.5 End of input
电荷的重心选择为两个阳离子电荷中心的平均。