验算双中心重叠积分程序
用前面得到的計(jì)算勒讓德多項(xiàng)式系數(shù)的新方法改寫了計(jì)算重疊積分的程序,這次驗(yàn)證這個程序的性能,主要參考了
1.Approximate Molecular Orbital Theory by Pople John A., Beveridge David L. ?
2.Calculation of the One-Electron Two-Center Integrals Over Slater-Type Orbitals by Means of the Ellipsoidal Coordinates Method by SIDI MOHAMED MEKELLECHE, ABDELLATIF BABA-AHMED(1996)
3.Evaluation of Two-center One- and Two-electron Integrals over Slater Type Orbitals by YAKAR, Yusuf , ?ZMEN, Ayhan,ATAV, ülfet (2006)
計(jì)算得到的表格
| n | l | n' | l' | λ | ζ | ζ' | R | YAKAR, Yusuf | 計(jì)算值 | 計(jì)算值/參照值 | ||
| 2 | 1 | 3 | 2 | 1 | 4.2 | 4.4 | 2.5 | -0.012921364533705600 | -0.012921364533721100 | 1.000000000001200000 | double d= Sab ( 2.5, 4.2, 4.4 ,??? 2, 1 , 1 ,3 ,2 ); | |
| 3 | 2 | 2 | 1 | 0 | 2.3 | 2.3 | 2.5 | -0.225219666538108000 | -0.225219666538093000 | 0.999999999999933000 | double d= Sab ( 2.5, 2.3, 2.3,??? 3, 2, 0, 2, 1? ); | |
| 3 | 2 | 3 | 2 | 2 | 5.8 | 4.5 | 0.2 | 0.878358705056473000 | 0.878358707428179000 | 1.000000002700160000 | double d= Sab ( 0.2, 5.8, 4.5,??? 3, 2, 2, 3, 2? ); | |
| 3 | 2 | 3 | 2 | 1 | 2 | 4.4 | 8.7 | -0.000006314661261245 | -0.000006315678534335 | 1.000161097016560000 | double d= Sab ( 8.7, 2.0, 4.4,??? 3, 2, 1, 3, 2? ); | |
| 4 | 3 | 5 | 2 | 1 | 1.5 | 0.5 | 15 | -0.012890231001724500 | -0.012890230947022000 | 0.999999995756282000 | double d= Sab ( 15, 1.5, 0.5,??? 4, 3, 1, 5, 2? ); | |
| 5 | 3 | 6 | 4 | 3 | 1.5 | 1 | 0.1 | -0.025946449868473100 | 0.000000000000000000 | 0.000000000000000000 | double d= Sab ( 0.1, 1.5, 1,??? 5, 3, 3, 6, 4? ); | |
| 4 | 3 | 8 | 5 | 2 | 3.6 | 3.7 | 0.1 | 0.008313612868317390 | 1551313174102550000.0 | 186599159556070000000 | double d= Sab ( 0.1, 3.6, 3.7,??? 4, 3, 2, 8, 5? ); | |
| 6 | 4 | 12 | 4 | 4 | 3.5 | 0.5 | 20 | 0.000011906964150515 | 0.000000000000000000 | |||
| 5 | 3 | 8 | 5 | 3 | 2.5 | 2 | 2.2 | 0.414308041044988000 | 0.000000000000000000 | |||
| 10 | 5 | 5 | 4 | 2 | 0.3 | 0.1 | 10 | 0.244313116241577000 | 0.000000000000000000 | |||
| 15 | 12 | 10 | 8 | 3 | 4 | 2.5 | 1.5 | 0.145246101309526000 | 0.000000000000000000 | |||
| 22 | 20 | 24 | 18 | 15 | 1.5 | 3.5 | 0.8 | 0.009891139692046750 | 0.000000000000000000 | |||
| John A. Pople | ||||||||||||
| 1-6 | 1 | 0 | 1 | 0 | 0 | 8.7 | 1 | 1.733 | 0.054800000000000000 | 0.054840104000444100 | 1.000731824825620000 | double d= Sab (1.733, 8.7,1,?? 1, 0 , 0 ,1 ,0 ); |
| 2-6 | 2 | 0 | 1 | 0 | 0 | 2.6 | 1 | 1.733 | 0.471700000000000000 | 0.471700639846316000 | 1.000001356468760000 | double d= Sab ( 1.733,2.6,1,?? 2, 0 , 0 ,1 ,0 ); |
| 3-6 | 2 | 1 | 1 | 0 | 0 | 2.6 | 1 | 1.733 | 0.298900000000000000 | 0.298911819595470000 | 1.000039543644930000 | double d= Sab (1.733, 2.6,1,?? 2, 1 , 0 ,1 ,0 ); |
| SIDI MOHAMED MEKELLECHE | ||||||||||||
| <1s|1s> | 1 | 0 | 1 | 0 | 0 | 2.2 | 1.5 | 2 | 0.231371105832753000 | 0.231371105832752000 | 0.999999999999996000 | double d= Sab (2, 2.2 , 1.5 ,??? 1, 0 , 0 ,1 ,0 ); |
| <1s|1s> | 1 | 0 | 1 | 0 | 0 | 5.5 | 1.5 | 2 | 0.059125938608933700 | 0.059125938608931800 | 0.999999999999968000 | double d= Sab (2, 5.5 , 1.5 ,??? 1, 0 , 0 ,1 ,0 ); |
| <1s|1s> | 1 | 0 | 1 | 0 | 0 | 7.7 | 1.5 | 2 | 0.035054800488251800 | 0.035054800488252500 | 1.000000000000020000 | double d= Sab (2, 7.7 , 1.5 ,??? 1, 0 , 0 ,1 ,0 ); |
| <1s|1s> | 1 | 0 | 1 | 0 | 0 | 9.9 | 1.5 | 2 | 0.023836349699891400 | 0.023836349699889800 | 0.999999999999933000 | double d= Sab (2, 9.9 , 1.5 ,??? 1, 0 , 0 ,1 ,0 ); |
| <1s|1s> | 1 | 0 | 1 | 0 | 0 | 10 | 10 | 1.4 | 0.000066799473767987 | 0.000066799473773200 | 1.000000000078040000 | double d= Sab (1.4, 10 , 10 ,??? 1, 0 , 0 ,1 ,0 ); |
| <5s|5s> | 5 | 0 | 5 | 0 | 0 | 0.1 | 0.1 | 1.4 | 0.999637189410387000 | 0.999637189410387000 | 1.000000000000000000 | double d= Sab (1.4, 0.1 , 0.1 ,??? 5, 0 , 0 ,5 ,0 ); |
| <1s|2p0> | 1 | 0 | 2 | 1 | 0 | 10 | 2 | 1.4 | -0.117413789686628000 | -0.117413789686631000 | 1.000000000000030000 | double d= Sab (1.4, 10 , 2 ,??? 1, 0 , 0 ,2 ,1 ); |
| <4s|4p0> | 4 | 0 | 4 | 1 | 0 | 0.5 | 0.4 | 1.4 | -0.123035213531177000 | -0.123035185362651000 | 0.999999771053138000 | double d= Sab (1.4, 0.5 , 0.4 ,??? 4, 0 , 0 ,4 ,1 ); |
| <2p0|2p0> | 2 | 1 | 2 | 1 | 0 | 2 | 2 | 1.4 | -0.100740382147441000 | -0.100740382147440000 | 0.999999999999990000 | double d= Sab (1.4, 2, 2 ,??? 2, 1 , 0 ,2 ,1 ); |
| <1s|1s> | 1 | 0 | 1 | 0 | 0 | 7.7 | 1.5 | 1.4 | 0.084173621969720800 | 0.084173621969731700 | 1.000000000000130000 | double d= Sab (1.4, 7.7, 1.5 ,??? 1, 0 , 0 ,1 ,0 ); |
| <3d1|3d1> | 3 | 2 | 3 | 2 | 1 | 6.5 | 2 | 1.4 | -0.095957753440884500 | -0.095957753440886700 | 1.000000000000020000 | double d= Sab (1.4, 6.5, 2 ,??? 3, 2 , 1 ,3 ,2 ); |
| <4s|4p1> | 4 | 0 | 4 | 1 | 0 | 1.5 | 0.3 | 1.4 | -0.047652956826569900 | -0.047652956826569600 | 0.999999999999994000 | double d= Sab (1.4, 1.5, 0.3 ,??? 4, 0 , 0 ,4 ,1 ); |
實(shí)測結(jié)果表明,這個程序n和n’取值范圍只能小于等于5,
Java程序
package udp;import java.io.DataInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.text.ParseException;public class HFoverlapC {public static double calc2( String stra ) throws IOException, ParseException, InterruptedException {FileWriter fileWriter5 = new FileWriter("d:/工業(yè)/hk/python/表達(dá)式.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( d2+" ** " );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 574public 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 );// ss1 = 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-24public 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);double[] cL1= chcL1( L1 ,m ); double[] cL2= chcL1( L2 ,m ); 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( cL1[c]+" "+ cL2[d]+" "+ d2+" "+d1+" ** d2"+" "+c+" "+d );}}System.out.println( d2+" ** **d2" );return d2*d1; }public static double[] chcL1( int L ,int m ) throws IOException, ParseException, InterruptedException {double[] a1= new double[L-m+1];double f1=0; for(int u=0 ;u<L-m+1 ;u++){double d1=Math.pow( -1 ,(L-m-u)/2);double d2=1+Math.pow( -1 ,(L-m-u));double d3=FACT(L+m+u);double d4=Math.pow( 2 , L+1);double d5=FACT ( (L-m-u)/2 );double d6=FACT ( (L+m+u)/2 );f1=(8/FACT(m + 1) ) * d1*d2*d3/(d4*FACT(u)*d5*d6);//System.out.println( f1+" ** **f1 "+d1+" "+(L-m-u)/2+" "+(L-m-u) );//System.out.println( L+" "+m+" "+u +" "+(L-m-u)/2);a1[u]=f1;}return a1; }public static double Sab(double R,double za,double zb, int n1,int L1 ,int m ,int n2 ,int L2 ) throws IOException, ParseException, InterruptedException {double α1 =za*R;double β1 = zb*R;double f1=0;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);f1=Math.pow(-1 , L2+m )*d1*d2;System.out.println( f1+" "+d1+" "+d2+" Sab "+Math.pow(-1 , L2+m ) );// System.out.println( f1+" f1 Sab " );return f1;}public static void so( ) throws IOException, ParseException, InterruptedException {//double d= Sab (1.733, 8.7,1, 1, 0 , 0 ,1 ,0 ); //1-6 0.05484010400044412//double d= Sab ( 1.733,2.6,1, 2, 0 , 0 ,1 ,0 ); //2-6 0.471700639846316//double d= Sab (1.733, 2.6,1, 2, 1 , 0 ,1 ,0 ); //3-6 0.29891181959547//double d= Sab ( 1.733,8.7,2.6, 1, 0 , 0 ,2 ,0 ); //1-2 0.237710896136317//double d= Sab (2, 2.2 , 1.5 , 1, 0 , 0 ,1 ,0 ); // 0.23137110583275272//double d= Sab (2, 5.5 , 1.5 , 1, 0 , 0 ,1 ,0 ); //0.05912593860893186//double d= Sab (2, 7.7 , 1.5 , 1, 0 , 0 ,1 ,0 ); //0.035054800488252554//double d= Sab (2, 9.9 , 1.5 , 1, 0 , 0 ,1 ,0 ); //0.023836349699889875//double d= Sab (1.4, 10 , 10 , 1, 0 , 0 ,1 ,0 ); //6.679947377319999E-5//double d= Sab (1.4, 0.1 , 0.1 , 5, 0 , 0 ,5 ,0 ); //0.9996371894103874//double d= Sab (1.4, 10 , 2 , 1, 0 , 0 ,2 ,1 ); //-0.11741378968663181//double d= Sab (1.4, 0.5 , 0.4 , 4, 0 , 0 ,4 ,1 ); // 4s0 4p0 -0.12303518536265186double d= Sab (1.4, 2, 2 , 2, 1 , 0 ,2 ,1 ); //-0.10074038214744//double d= Sab (1.4, 7.7, 1.5 , 1, 0 , 0 ,1 ,0 ); // 0.0841736219697317//double d= Sab (1.4, 6.5, 2 , 3, 2 , 1 ,3 ,2 ); // 3d1 -0.09595775344088678//double d= Sab (1.4, 1.5, 0.3 , 4, 0 , 0 ,4 ,1 ); //-0.04765295682656969//R=2.5;//double d= Sab ( 2.5, 4.2, 4.4 , 2, 1 , 1 ,3 ,2 ); //-0.012921364533721143//double d= Sab ( 2.5, 2.3, 2.3, 3, 2, 0, 2, 1 ); //-0.2252196665380932//double d= Sab ( 0.2, 5.8, 4.5, 3, 2, 2, 3, 2 ); //0.8783587074281796//double d= Sab ( 8.7, 2.0, 4.4, 3, 2, 1, 3, 2 ); //-6.315678534334961E-6//double d= Sab ( 15, 1.5, 0.5, 4, 3, 1, 5, 2 ); //-0.012890230947022028//double d= Sab ( 0.1, 1.5, 1, 5, 3, 3, 6, 4 ); //0//double d= Sab ( 0.1, 3.6, 3.7, 4, 3, 2, 8, 5 ); //1.55131317410255283E18System.out.println( d+" Sab " );}public static void main(String[] args) throws IOException, ParseException, InterruptedException {so( );}}總結(jié)
以上是生活随笔為你收集整理的验算双中心重叠积分程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 形态数轴上的反密码子和氨基酸
- 下一篇: STO双中心势能积分