Analytical evaluation of two-centre Coulomb, hybrid and one-electron integrals for Slater-type orbitals
I. I. GUSEINOY
Mathematical Institute, University of Oxford
MS. received 9th February 1970
在这篇文中给出了计算混合积分的方法,其中有一个中间函数gαβ,这个函数的表达式为
上次的程序中漏掉了一个条件
漏掉这个条件会导致重叠积分计算中出现错误,这次补充了这个条件,并验算。这次验算了作者表格中所有的数据,数值一致。
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 {
// https://blog.csdn.net/georgesale/article/details/118762949
public static double calc2( String stra ) throws IOException, ParseException, InterruptedException {
FileWriter fileWriter5 = new FileWriter("d:/工业/hk/python/表达式.csv");
//stra="hin( fx1,fx1)";
//stra="jin( rj1,rj2)";
stra=stra.replaceAll(",","#");
fileWriter5.write( stra + "\r\n");
fileWriter5.flush();
String exe = "python";
String command = "D:/Download/cal.py";
String[] cmdArr = new String[] {exe ,command };
Process process = Runtime.getRuntime().exec(cmdArr);
InputStream is = process.getInputStream();
DataInputStream dis = new DataInputStream(is);
String str = dis.readLine();
process.waitFor();
System.out.println(str);
double df= Double.parseDouble(str.trim());
return df;
}
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;
}
//38a
public static int FmNNa( 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;
int flag=0;
for(int k=0 ;k<N1+1;k++){
if(k<0||m-k<0||N1-k<0 || N-m+k<0 ){
d2=0;
flag=1;
// System.out.println(k+" "+ (m-k)+" "+(N1-k)+" "+(N-m+k)+" ** FmNN ** "+flag );
break;
}
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( flag+" flag " );
return flag;
}
//10a
public static double gαβ( int La, int Lb, int λ, int α ,int β ) throws IOException, ParseException, InterruptedException {
double f9=0;
if( (La+α)%2!=1 && (La-α)%2!=1 && (Lb+β)%2!=1 && (Lb-β)%2!=1 ){
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;
if( (La+α)%2!=1 && (La-α)%2!=1 && (Lb+β)%2!=1 && (Lb-β)%2!=1 ){
double d1=gαβ( La, Lb , λ, α, β );
//System.out.println( " ** 1 " );
double d2=FmNN( q, α+λ, β-λ );
//System.out.println( " ** 2" );
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
/***/
//double d1=gαβq( 2, 3, 0, 0, 1, 0 ); //2.218529918662356
double d1=gαβq( 2, 3, 0, 0, 1, 1 ); //-2.218529918662356
//double d1=gαβq( 2, 3, 0, 0, 3, 0 ); //-3.69754986443726
//double d1=gαβq( 2, 3, 0, 0, 3, 1 ); //11.09264959331178
//double d1=gαβq( 2, 3, 0, 0, 3, 2 ); //-11.09264959331178
//double d1=gαβq( 2, 3, 0, 0, 3, 3 ); //3.69754986443726
//double d1=gαβq( 2, 3, 0, 2, 1, 0 ); //-6.6555897559870685
//double d1=gαβq( 2, 3, 0, 2, 1, 1 ); //-6.6555897559870685
//double d1=gαβq( 2, 3, 0, 2, 1, 2 ); //6.6555897559870685
//double d1=gαβq( 2, 3, 0, 2, 1, 3 ); //6.6555897559870685
//double d1=gαβq( 2, 3, 0, 2, 3, 0 ); //11.09264959331178
//double d1=gαβq( 2, 3, 0, 2, 3, 1 ); //-11.09264959331178
//double d1=gαβq( 2, 3, 0, 2, 3, 2 ); //-22.18529918662356
//double d1=gαβq( 2, 3, 0, 2, 3, 3 ); //22.18529918662356
//double d1=gαβq( 2, 3, 0, 2, 3, 4 ); //11.09264959331178
//double d1=gαβq( 2, 3, 0, 2, 3, 5 ); //-11.09264959331178
//double d1=gαβq( 2, 3, 1, 0, 1, 0 ); //-1.5687375497513916
//double d1=gαβq( 2, 3, 1, 0, 1, 1 ); //-1.5687375497513916
//double d1=gαβq( 2, 3, 1, 0, 3, 0 ); //7.843687748756958
//double d1=gαβq( 2, 3, 1, 0, 3, 1 ); //-7.843687748756958
//double d1=gαβq( 2, 3, 1, 0, 3, 2 ); //-7.843687748756958
//double d1=gαβq( 2, 3, 1, 0, 3, 3 ); //7.843687748756958
//double d1=gαβq( 2, 3, 1, 2, 1, 0 ); //1.5687375497513916
//double d1=gαβq( 2, 3, 1, 2, 1, 1 ); //4.706212649254175
//double d1=gαβq( 2, 3, 1, 2, 1, 2 ); //4.706212649254175
//double d1=gαβq( 2, 3, 1, 2, 1, 3); //1.5687375497513916
//double d1=gαβq( 2, 3, 1, 2, 3, 0); //-7.843687748756958
//double d1=gαβq( 2, 3, 1, 2, 3, 1); //-7.843687748756958
//double d1=gαβq( 2, 3, 1, 2, 3, 2); //15.687375497513916
//double d1=gαβq( 2, 3, 1, 2, 3, 3); //15.687375497513916
//double d1=gαβq( 2, 3, 1, 2, 3, 4); //-7.843687748756958
//double d1=gαβq( 2, 3, 1, 2, 3, 5); //-7.843687748756958
//double d1=gαβq( 2, 3, 2, -2, 3, 0); //2.4803918541230536
//double d1=gαβq( 2, 3, 2, -2, 3, 1); //-2.4803918541230536
//double d1=gαβq( 2, 3, 2, 0, 3, 0); //-4.960783708246107
//double d1=gαβq( 2, 3, 2, 0, 3, 1); //-4.960783708246107
//double d1=gαβq( 2, 3, 2, 0, 3, 2); //4.960783708246107
//double d1=gαβq( 2, 3, 2, 0, 3, 3); //4.960783708246107
//double d1=gαβq( 2, 3, 2, 2, 3, 0); //2.4803918541230536
//double d1=gαβq( 2, 3, 2, 2, 3, 1); //7.4411755623691604
//double d1=gαβq( 2, 3, 2, 2, 3, 2); //4.960783708246107
//double d1=gαβq( 2, 3, 2, 2, 3, 3); //-4.960783708246107
//double d1=gαβq( 2, 3, 2, 2, 3, 4); //-7.4411755623691604
//double d1=gαβq( 2, 3, 2, 2, 3, 5); //-2.4803918541230536
//double d1=gαβq( 3, 3, 0, 1, 1, 0); //7.875
//double d1=gαβq( 3, 3, 0, 1, 1, 2); //-7.875
//double d1=gαβq( 3, 3, 0, 1, 3, 0); //-13.125
//double d1=gαβq( 3, 3, 0, 1, 3, 1); //26.25
//double d1=gαβq( 3, 3, 0, 1, 3, 3); //-26.25
//double d1=gαβq( 3, 3, 0, 1, 3, 4); //13.125
//double d1=gαβq( 3, 3, 0, 3, 1, 0); //-13.125
//double d1=gαβq( 3, 3, 0, 3, 1, 1); //-26.25
//double d1=gαβq( 3, 3, 0, 3, 1, 3); //26.25
//double d1=gαβq( 3, 3, 0, 3, 1, 4); //13.125
//double d1=gαβq( 3, 3, 0, 3, 3, 0); //21.875
//double d1=gαβq( 3, 3, 0, 3, 3, 2); //-65.62500000000001
//double d1=gαβq( 3, 3, 0, 3, 3, 4); //65.62500000000001
//double d1=gαβq( 3, 3, 0, 3, 3, 6); //-21.875
//double d1=gαβq( 3, 3, 1, -1, 1, 0); //0.65625
//double d1=gαβq( 3, 3, 1, -1, 3, 0); //-3.28125
//double d1=gαβq( 3, 3, 1, -1, 3, 1); //6.5625
//double d1=gαβq( 3, 3, 1, -1, 3, 2); //-3.28125
//double d1=gαβq( 3, 3, 1, 1, 1, 0); //-3.9375
//double d1=gαβq( 3, 3, 1, 1, 1, 1); //-7.875
//double d1=gαβq( 3, 3, 1, 1, 1, 2); //-3.9375
//double d1=gαβq( 3, 3, 1, 1, 3, 0); //19.6875
//double d1=gαβq( 3, 3, 1, 1, 3, 2); //-39.375
//double d1=gαβq( 3, 3, 1, 1, 3, 4); //19.6875
//double d1=gαβq( 3, 3, 1, 3, 1, 0); //3.28125
//double d1=gαβq( 3, 3, 1, 3, 1, 1); //13.125
//double d1=gαβq( 3, 3, 1, 3, 1, 2); //19.6875
//double d1=gαβq( 3, 3, 1, 3, 1, 3); //13.125
//double d1=gαβq( 3, 3, 1, 3, 1, 4); //3.28125
//double d1=gαβq( 3, 3, 1, 3, 3, 0); //-16.40625
//double d1=gαβq( 3, 3, 1, 3, 3, 1); //-32.8125
//double d1=gαβq( 3, 3, 1, 3, 3, 2); //16.406249999999993
//double d1=gαβq( 3, 3, 1, 3, 3, 3); //65.62500000000001
//double d1=gαβq( 3, 3, 1, 3, 3, 4); //16.406249999999986
//double d1=gαβq( 3, 3, 1, 3, 3, 5); //-32.8125
//double d1=gαβq( 3, 3, 1, 3, 3, 6); //-16.40625
//double d1=gαβq( 3, 3, 2, -1, 3, 0); //6.5625
//double d1=gαβq( 3, 3, 2, -1, 3, 2); //-6.5625
//double d1=gαβq( 3, 3, 2, 1, 3, 0); //-13.125
//double d1=gαβq( 3, 3, 2, 1, 3, 1); //-26.25
//double d1=gαβq( 3, 3, 2, 1, 3, 3); //26.25
//double d1=gαβq( 3, 3, 2, 1, 3, 4); //13.125
//double d1=gαβq( 3, 3, 2, 3, 3, 0); //6.5625
//double d1=gαβq( 3, 3, 2, 3, 3, 1); //26.25
//double d1=gαβq( 3, 3, 2, 3, 3, 2); //32.8125
//double d1=gαβq( 3, 3, 2, 3, 3, 4); //-32.8125
//double d1=gαβq( 3, 3, 2, 3, 3, 5); //-26.25
//double d1=gαβq( 3, 3, 2, 3, 3, 6); //-6.5625
//double d1=gαβq( 3, 3, 3, -3, 3, 0); //1.09375
//double d1=gαβq( 3, 3, 3, -1, 3, 0); //-3.281250000000001
//double d1=gαβq( 3, 3, 3, -1, 3, 1); //-6.562500000000002
//double d1=gαβq( 3, 3, 3, -1, 3, 2); //-3.281250000000001
//double d1=gαβq( 3, 3, 3, 1, 3, 0); //3.281250000000001
//double d1=gαβq( 3, 3, 3, 1, 3, 1); //13.125000000000004
//double d1=gαβq( 3, 3, 3, 1, 3, 2); //19.687500000000007
//double d1=gαβq( 3, 3, 3, 1, 3, 3); //13.125000000000004
//double d1=gαβq( 3, 3, 3, 1, 3, 4); //3.281250000000001
//double d1=gαβq( 3, 3, 3, 3, 3, 0); //-1.09375
//double d1=gαβq( 3, 3, 3, 3, 3, 1); //-6.5625
//double d1=gαβq( 3, 3, 3, 3, 3, 2); //-16.40625
//double d1=gαβq( 3, 3, 3, 3, 3, 3); //-21.875
//double d1=gαβq( 3, 3, 3, 3, 3, 4); //-16.40625
//double d1=gαβq( 3, 3, 3, 3, 3, 5); //-6.5625
//double d1=gαβq( 3, 3, 3, 3, 3, 6); //-1.09375
//double d2=-35.0/32;
//System.out.println( d1+" * "+d2+ " "+Math.abs(d1-d2) );
System.out.println( d1+ " *** d1 " );
}
public static void main(String[] args) throws IOException, ParseException, InterruptedException {
so( );
}
}