Analytical evaluation of two-centre Coulomb, hybrid and one-electron integrals for Slater-type orbitals
I. I. GUSEINOV
Mathematical Institute, University of Oxford
MS. received 9th February 1970
在这篇文中给出了计算混合积分的方法,其中有一个中间函数gαβ,这个函数的表达式为


其中函数F的表达式为

其中第三项累加项,

不计算负数的阶乘,因此

这4项为负时,不计入累加。
因为i为奇数时,会出现开负数的平方根,因此当i奇数时不计入累加。
用如上表达式地编写了
gαβq( int La, int Lb, int λ, int α,int β ,int q );
方法,用这个方法验算当La,Lb小于等于2的所有情况与文中数值一致
如计算
double d1=gαβq( 2, 2, 2, 2, 2, 4 ); //0.9375
java代码为
package greenwood;
import java.io.DataInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
public class gαβP {
public static double FACT( double n ) throws IOException, ParseException {
double prodt=1.0;
for(int a=1 ;a<n+1 ;a++)
{
prodt=prodt*a;
}
if(n<0){
System.out.println( prodt+ " 负数阶乘 " );
}
return prodt;
}
//38a
public static double FmNN( int m ,int N, int N1 ) throws IOException, ParseException, InterruptedException {
//System.out.println( m+" "+N+" "+N1+ " **** m N N1" );
double d=0.0;
double d1=0.0;
double d2=0.0;
double f1=0;
for(int k=0 ;k<N1+1;k++){
if(k<0||m-k<0||N1-k<0 || N-m+k<0 ){
d2=0;
}
if(k>=0&&m-k>=0&&N1-k>=0 && N-m+k>=0 ){
d=Math.pow( -1, k );
d1=FACT(k)*FACT(m-k)*FACT(N1-k)*FACT(N-m+k);
d2=d/d1;
}
f1=f1+d2;
//System.out.println(k+" "+ (m-k)+" "+(N1-k)+" "+(N-m+k)+" ** FmNN "+d1+" "+d2 +" "+f1 );
}
double d3=FACT(N)*FACT(N1)*f1;
//System.out.println( d3+" "+f1+" ** d3 FmNN " );
return d3;
}
//10a
public static double gαβ( int La, int Lb, int λ, int α ,int β ) throws IOException, ParseException, InterruptedException {
double f9=0;
double d1=1/Math.pow(2, La+Lb+1);
double f1=(2*La+1)*FACT(La-λ)*(2*Lb+1)*FACT(Lb-λ);
double f2=FACT(La+λ)*FACT(Lb+λ);
double d2=Math.pow(f1/f2, 0.5);
double f3=Math.pow(-1, 0.5*((La-α)+(Lb-β)-2*λ) )*FACT(Lb+β);
double f4=FACT(0.5*(Lb-β))*FACT(0.5*(Lb+β))*FACT( β-λ );
double d3=f3/f4;
//System.out.println( α+" "+λ+ " *** * " );
//System.out.println( f3+" "+f4+" f34 *** "+Math.pow(-1, 0.5*((La-α)+(La-β)-2*λ) ));
double f5=0;
double f6=0;
double d4=0;
for(int i=0 ; i<2*λ+1;i++){
double f7=0;
double p1=La+α+2*λ-i;
double p2=0.5*(La-α)-λ+i/2;
double p3=0.5*(La+α)+λ-i/2;
double p4=α+λ-i;
// System.out.println(i+" "+ f7+ " i *** *** "+p1+" "+p2+" "+p3+" "+p4);
if(p1>=0&&p2>=0&&p3>=0&&p4>=0&&i%2==0){
// System.out.println( f7+ " xx*** *** "+p1+" "+p2+" "+p3+" "+p4);
f5=Math.pow(-1, 0.5*i )*FACT(La+α+2*λ-i)*FmNN( i,λ, λ );
f6=FACT(0.5*(La-α)-λ+i/2)*FACT(0.5*(La+α)+λ-i/2)*FACT( α+λ-i);
f7=f5/f6;
}
d4=d4+f7;
//System.out.println(i+" "+ d4+" "+f7+ " d4 f7 *** *** " +(La+α+2*λ-i)+" "+(0.5*(La-α)-λ+i/2)+ " "+(0.5*(La+α)+λ-i/2)+" "+ ( α+λ-i));
//System.out.println( f5+" "+f6+" "+d4+" *** f5" );
}
f9=d1*d2*d3*d4;
//System.out.println( d1+" "+d2+" "+d3+" *** "+d4 );
// System.out.println( f9+" ** f9 gαβ0 " );
return f9;
}
//10
public static double gαβq( int La, int Lb, int λ, int α,int β ,int q ) throws IOException, ParseException, InterruptedException {
double f1=0;
double d1=gαβ( La, Lb , λ, α, β );
double d2=FmNN( q, α+λ, β-λ );
f1=d1*d2;
System.out.println( f1+" "+ d1+" "+d2+" ** gαβq " );
return f1;
}
public static void so( ) throws IOException, ParseException, InterruptedException {
//gαβq( int La, int Lb, int λ, int α,int β ,int q )
//double d1=gαβq( 0, 0 , 0 ,0, 0 , 0 ); //0.5
//double d1=gαβq( 0, 1, 0, 0, 1, 0 ); //0.8660254037844386
//double d1=gαβq( 0, 2, 0, 0, 0, 0 ); //-0.5590169943749475
//double d1=gαβq( 0, 2, 0, 0, 2, 0 ); //1.6770509831248424
//double d1=gαβq( 0, 2, 0, 0, 2, 1 ); //-3.3541019662496847
//double d1=gαβq( 0, 2, 0, 0, 2, 2 ); //1.6770509831248424
//double d1=gαβq( 0, 3, 0, 0, 1, 0 ); //-1.984313483298443
//double d1=gαβq( 0, 3, 0, 0, 1, 1 ); //1.984313483298443
//double d1=gαβq( 0, 3, 0, 0, 3, 0 ); //3.307189138830738
//double d1=gαβq( 0, 3, 0, 0, 3, 1 ); //-9.921567416492215
//double d1=gαβq( 0, 3, 0, 0, 3, 2 ); //9.921567416492215
//double d1=gαβq( 0, 3, 0, 0, 3, 3 ); //-3.307189138830738
//double d1=gαβq( 1, 1, 0, 1, 1, 0 ); //1.5
//double d1=gαβq( 1, 1, 0, 1, 1, 2 ); //-1.5
//double d1=gαβq( 1, 1, 1, -1, 1, 0 ); //0.75
//double d1=gαβq( 1, 1, 1, 1, 1, 0 ); //-0.75
//double d1=gαβq( 1, 1, 1, 1, 1, 1 ); //-1.5
//double d1=gαβq( 1, 1, 1, 1, 1, 2 ); //-0.75
//double d1=gαβq( 1, 2, 0, 1, 0, 0 ); //-0.9682458365518543
//double d1=gαβq( 1, 2, 0, 1, 0, 1 ); //-0.9682458365518543
//double d1=gαβq( 1, 2, 0, 1, 2, 0 ); //2.904737509655563
//double d1=gαβq( 1, 2, 0, 1, 2, 1 ); //-2.904737509655563
//double d1=gαβq( 1, 2, 0, 1, 2, 2 ); //-2.904737509655563
//double d1=gαβq( 1, 2, 0, 1, 2, 3 ); //2.904737509655563
//double d1=gαβq( 1, 2, 1, -1, 2, 0 ); //1.6770509831248424
//double d1=gαβq( 1, 2, 1, -1, 2, 1 ); //-1.6770509831248424
//double d1=gαβq( 1, 2, 1, 1, 2, 0 ); //-1.6770509831248424
//double d1=gαβq( 1, 2, 1, 1, 2, 1 ); //-1.6770509831248424
//double d1=gαβq( 1, 2, 1, 1, 2, 2 ); //1.6770509831248424
//double d1=gαβq( 1, 2, 1, 1, 2, 3 ); //1.6770509831248424
//double d1=gαβq( 1, 3, 0, 1, 1, 0 ); //-3.43693177121688
//double d1=gαβq( 1, 3, 0, 1, 1, 2 ); //3.43693177121688
//double d1=gαβq( 1, 3, 0, 1, 3, 0 ); //5.7282196186948
//double d1=gαβq( 1, 3, 0, 1, 3, 1 ); //-11.4564392373896
//double d1=gαβq( 1, 3, 0, 1, 3, 3 ); //11.4564392373896
//double d1=gαβq( 1, 3, 0, 1, 3, 4 ); //-5.7282196186948
//double d1=gαβq( 1, 3, 1, -1, 1, 0 ); //-0.701560760020114
//double d1=gαβq( 1, 3, 1, -1, 3, 0 ); //3.50780380010057
//double d1=gαβq( 1, 3, 1, -1, 3, 1 ); //-7.01560760020114
//double d1=gαβq( 1, 3, 1, -1, 3, 2 ); //3.50780380010057
//double d1=gαβq( 1, 3, 1, 1, 1, 0 ); //0.701560760020114
//double d1=gαβq( 1, 3, 1, 1, 1, 1 ); //1.403121520040228
//double d1=gαβq( 1, 3, 1, 1, 1, 2 ); //0.701560760020114
//double d1=gαβq( 1, 3, 1, 1, 3, 0 ); //-3.50780380010057
//double d1=gαβq( 1, 3, 1, 1, 3, 2 ); //7.01560760020114
//double d1=gαβq( 1, 3, 1, 1, 3, 4 ); //-3.50780380010057
//double d1=gαβq( 2, 2, 0, 0, 0, 0 ); //0.625
//double d1=gαβq( 2, 2, 0, 2, 0, 0 ); //-1.875
//double d1=gαβq( 2, 2, 0, 2, 0, 1 ); //-3.75
//double d1=gαβq( 2, 2, 0, 2, 0, 2 ); //-1.875
//double d1=gαβq( 2, 2, 0, 2, 2, 0 ); //5.625
//double d1=gαβq( 2, 2, 0, 2, 2, 2 ); //-11.25
//double d1=gαβq( 2, 2, 0, 2, 2, 4 ); //5.625
//double d1=gαβq( 2, 2, 1, 0, 2, 0 ); //3.75
//double d1=gαβq( 2, 2, 1, 0, 2, 2 ); //-3.75
//double d1=gαβq( 2, 2, 1, 2, 2, 0 ); //-3.75
//double d1=gαβq( 2, 2, 1, 2, 2, 1 ); //-7.5
//double d1=gαβq( 2, 2, 1, 2, 2, 3 ); //7.5
//double d1=gαβq( 2, 2, 1, 2, 2, 4 ); //3.75
//double d1=gαβq( 2, 2, 2, -2, 2, 0 ); //0.9375
//double d1=gαβq( 2, 2, 2, 0, 2, 0 ); //-1.875
//double d1=gαβq( 2, 2, 2, 0, 2, 1 ); //-3.75
//double d1=gαβq( 2, 2, 2, 0, 2, 2 ); //-1.875
//double d1=gαβq( 2, 2, 2, 2, 2, 0 ); //0.9375
//double d1=gαβq( 2, 2, 2, 2, 2, 1 ); //3.75
//double d1=gαβq( 2, 2, 2, 2, 2, 2 ); //5.625
//double d1=gαβq( 2, 2, 2, 2, 2, 3 ); //3.75
double d1=gαβq( 2, 2, 2, 2, 2, 4 ); //0.9375
System.out.println( d1+ " *** d " );
}
public static void main(String[] args) throws IOException, ParseException, InterruptedException {
so( );
}
}

本文介绍了使用Slater型轨道计算两中心Coulomb、混合和一电子积分的方法。作者提供了数学公式并实现了一个Java程序,通过gαβq方法验证了La和Lb小于等于2的所有情况,与文献数值相符。程序中包含了阶乘计算、F函数及gαβ函数的实现,并展示了一些特定参数组合的计算示例。
6万+

被折叠的 条评论
为什么被折叠?



