计算F原子的(2,1,0)电子和H原子(1,0,0)电子的重叠积分
F原子核外电子的角量子数不为0,这个重叠积分的计算方法为
其中ζa和ζb是斯莱特规则下的核电荷数,R是两个原子核距离为1.733,α和β是斯莱特规则的核电荷数与原子核距离的乘积。式中
即为约化重叠积分,表达是为
其中
是勒让德多项式的系数,对于F的(2,1,0)电子系数有两个,分别是0和8.
H电子的系数只有1个是8
式中的计算方法为
代入
Sab ( 2.6,1, 2, 1 , 0 ,1 ,0 , 2.6*R ,1*R) =0.29891181959547
Java代码
import java.io.DataInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
public class HFoverlap {
static double R=1.733;
//https://blog.csdn.net/georgesale/article/details/118762949?spm=1001.2014.3001.5501
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 overLap( int n1,int n2 ,int c, int d, int m ,
double α1 ,double β1
) throws IOException, ParseException, InterruptedException {
String f1= "sympy.exp(-0.5*("+α1+"+"+β1+")*μ-0.5*("+α1+"-"+β1+")*v )";
String f2="(μ*μ-1)**"+m+"*(1-v*v)**"+m+"*(1+μ*v)**"+c+"*(1-μ*v)**"+d+"*(μ+v)**("+n1+"-"+m+"-"+c+")*(μ-v)**("+n2+"-"+m+"-"+d+")";
String d2 ="(integrate(integrate("+f1+" *"+ f2+" , (μ, 1, float('inf'))),(v, -1, 1)))";
//System.out.println( str+" ** " );
double ds=calc2( d2 );
return ds;
}
public static double FACT( double n ) throws IOException, ParseException {
double prodt=1.0;
for(int a=1 ;a<n+1 ;a++)
{
prodt=prodt*a;
}
return prodt;
}
//9.6-21 574
public static double D( int L1,int L2,int m ) throws IOException, ParseException {
double ss1=0;
ss1 = (FACT(m + 1) / 8) * (FACT(m + 1) / 8) *
Math.pow( ( (2 * L1 + 1) * FACT(L1 - m) * (2 * L2 + 1) * FACT(L2 - m) / (4.0 * FACT(L1 + m) * FACT(L2 + m))) ,0.5 );
System.out.println( ss1+" ** ss1" );
return ss1;
}
//9.6-24
public static double SS( int n1,int L1 ,int m ,int n2 ,int L2 ,double α1 ,double β1 ) throws IOException, ParseException, InterruptedException {
double d1=D(L1,L2,m);
int[] cL1= {0,8};
int[] cL2= {8};
double d2=0;
for(int c=0 ;c<L1-m+1;c++){
for(int d=0;d<L2-m+1;d++){
d2 =d2+ cL1[c]*cL2[d]* overLap( n1, n2 , c, d, m , α1 , β1);
System.out.println( d2+" "+d1+" ** d2" );
}
}
System.out.println( d2+" ** d2" );
return d2*d1;
}
//9.6-31 B.40
public static double Sab(double za,double zb, int n1,int L1 ,int m ,int n2 ,int L2 ,double α1 ,double β1 ) throws IOException, ParseException, InterruptedException {
double d1= Math.pow((2*za),(n1+0.5))* Math.pow((2*zb) ,(n2+0.5) )/ Math.pow( ( FACT(2*n1)*FACT(2*n2) ),0.5) * Math.pow( (R/2),(n1+n2+1)) ;
double d2=SS(n1,L1,m,n2,L2,α1 ,β1);
double d=d1*d2;
System.out.println( d1+" "+d2+" "+ d+" Sab " );
return d;
}
public static void so( ) throws IOException, ParseException, InterruptedException {
double d= Sab ( 2.6,1, 2, 1 , 0 ,1 ,0 , 2.6*R ,1*R); //3-6
System.out.println( d+" Sab " )
}
public static void main(String[] args) throws IOException, ParseException, InterruptedException {
so( );
}
}
《量子化学》徐光宪
Approximate Molecular Orbital Theory by Pople John A., Beveridge David L. (z-lib.org)