| !* |
| !* Copyright (C) 2016 XiangYunBin <1084066694@qq.com> |
| !* |
| |
| program main |
| use m_definitions |
| use m_atoms |
| use m_shells |
| use m_basis |
| use m_eri |
| use m_hamilton |
| use m_dft_grid |
| use m_dft_xc |
| implicit none |
| |
| character(len=100) :: basis_path,basis_name |
| character(len=100) :: geom_path,filename |
| type(geom) :: mol |
| type(shell_set) :: shells |
| type(basis_set) :: basis |
| type(basis_quartet_set) :: basisqs |
| |
| !== |
| integer,parameter :: iter_max = 25 |
| real(dp),parameter :: threshold = 1.0d-8 |
| integer :: nbas,ne,ndocc |
| integer :: iter |
| real(dp) :: time0,time1,time2,time3,time4 |
| real(dp),allocatable :: S(:,:),K(:,:),V(:,:) |
| real(dp),allocatable :: H(:,:),F(:,:) |
| real(dp),allocatable :: D(:,:),S_minus_sqrt(:,:) |
| real(dp) :: ehf,enuc,ehf_old,err |
| |
| logical :: print_ |
| |
| call cpu_time(time0) |
| |
| filename = "out.txt" |
| open(stdout,file = filename,status = "old") |
| |
| geom_path = "ch4.txt" |
| call readatoms(geom_path,mol,print_) |
| |
| basis_path = "/home/xiang/gfort/scf/basis" |
| basis_name = "STO-3G" |
| call read_shell_set(basis_path,basis_name,mol,shells,print_) |
| |
| call init_basis_set(mol,shells,basis,print_) |
| |
| nbas = basis%nbf |
| allocate( S( nbas, nbas),& |
| & K( nbas, nbas),& |
| & V( nbas, nbas),& |
| & H(nbas,nbas),& |
| & F(nbas,nbas),& |
| & D(nbas,nbas), & |
| & S_minus_sqrt(nbas,nbas)& |
| ) |
| !计算重叠矩阵和动能矩阵,并输出 |
| call do_overlap_kinetic_matrix(mol,shells,basis,S,K,print_)
!计算核吸引能矩阵,并输出 |
| call do_nucleus_matrix(mol,shells,basis,V,print_) |
| call cpu_time(time1) |
| !计算双电子积分,并按对称性输出,可观察0值很多,轨道正交导致 |
| call precalc_eri(shells,basis,basisqs,print_) |
| call cpu_time(time2) |
| |
| call nucleus_nucleus_energy(mol,enuc) |
| call seutp_S_minus_sqrt(S,S_minus_sqrt,print_) |
| ne = sum(mol%zatom(:)) |
| ndocc = ne/2 |
| H = K + V |
| call generalized_eigen_solver(H,S_minus_sqrt,D,ndocc) |
| ehf = sum( D * (H + H) ) |
| write(stdout,'(10x,a,17x,a)'),"Energy", "Error" |
| !简单SCF自洽迭代 |
| do iter=1,iter_max |
| ehf_old = ehf |
| call setup_fock_matirx(D,basis,basisqs,F) |
| F = F + H |
| call generalized_eigen_solver(F,S_minus_sqrt,D,ndocc) |
| ehf = sum( D * (H + F) ) |
| err = (ehf - ehf_old)/ehf |
| write(stdout,'(2f12.6)'),ehf + enuc,err |
| if( abs(err) < threshold ) exit |
| if( iter == iter_max-1 ) stop 'SCF : Not Convergence! ' |
| end do |
| call cpu_time(time3) |
| |
| write(stdout,'(/)') |
| write(stdout,'(a,2x,f12.6)'),"1e Hamiltonian",(time1-time0) |
| write(stdout,'(a,2x,f12.6)'),"Pre ERI :",(time2-time1) |
| write(stdout,'(a,2x,f12.6)'),"SCF :",(time3-time2) |
| write(stdout,'(a,2x,f12.6)'),"Total Time :",(time3-time0) |
| |
| |
| call destroy_geom(mol) |
| call destroy_shell_set(shells) |
| call destroy_basis_set(basis) |
| call destroy_basis_quartet_set(basisqs) |
|
|
| deallocate(S,K,V,H,F,D,S_minus_sqrt) |
| end program |
| NAtoms : 5 |
| NAtomic Type : 2 |
| |
| Element Number |
| H 4 |
| C 1 |
| |
| Input orientation: |
| Element TypeIndex Coordination |
| ------------------------------------------- |
| C 2 0.000000 0.000000 0.000000 |
| H 1 0.000000 0.000000 2.057912 |
| H 1 1.940218 0.000000 -0.685971 |
| H 1 -0.970110 -1.680278 -0.685971 |
| H 1 -0.970110 1.680278 -0.685971 |
| |
| |
| |
| =========== Shell List ============ |
| |
| Number of shells : 3 |
| |
| Basis set : STO-3G |
| |
| The information of shells below : |
| ishell= 1 mom= 0 ishell_type= 1 bool_sp=F |
| alpha= coeff= |
| 0.168855 0.083474 |
| 0.623914 0.267839 |
| 3.425251 0.276934 |
| |
| |
| ishell= 2 mom= 0 ishell_type= 2 bool_sp=F |
| alpha= coeff= |
| 3.530512 0.816191 |
| 13.045096 2.618880 |
| 71.616837 2.707814 |
| |
| |
| ishell= 3 mom= 1 ishell_type= 2 bool_sp=T |
| alpha= coeff= |
| 0.222290 0.161536 0.085276 |
| 0.683483 0.214036 0.538304 |
| 2.941249 -0.160017 0.856044 |
| |
| |
| |
| |
| |
| =========== Basis List ============ |
| |
| Total number of basis functions : 9 |
| |
| The information of basis functions below : |
| |
| 1 iatom= 1 ishell= 2 ibas= 1 am= 0 |
| bool_sp=F ibf_left= 1 ibf_right= 1 |
| |
| 2 iatom= 1 ishell= 3 ibas= 2 am= 1 |
| bool_sp=T ibf_left= 2 ibf_right= 5 |
| |
| 3 iatom= 2 ishell= 1 ibas= 3 am= 0 |
| bool_sp=F ibf_left= 6 ibf_right= 6 |
| |
| 4 iatom= 3 ishell= 1 ibas= 4 am= 0 |
| bool_sp=F ibf_left= 7 ibf_right= 7 |
| |
| 5 iatom= 4 ishell= 1 ibas= 5 am= 0 |
| bool_sp=F ibf_left= 8 ibf_right= 8 |
| |
| 6 iatom= 5 ishell= 1 ibas= 6 am= 0 |
| bool_sp=F ibf_left= 9 ibf_right= 9 |
| |
| =========== Overlap Matrix ============ |
| |
| |
| 1 1.000000 0.248362 0.000000 0.000000 0.000000 0.062421 0.062421 0.062421 0.062421 |
| 2 0.248362 1.000000 0.000000 0.000000 0.000000 0.491330 0.491330 0.491330 0.491330 |
| 3 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.440874 -0.220437 -0.220437 |
| 4 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 -0.381808 0.381808 |
| 5 0.000000 0.000000 0.000000 0.000000 1.000000 0.467618 -0.155873 -0.155873 -0.155873 |
| 6 0.062421 0.491330 0.000000 0.000000 0.467618 1.000000 0.169697 0.169697 0.169697 |
| 7 0.062421 0.491330 0.440874 0.000000 -0.155873 0.169697 1.000000 0.169697 0.169697 |
| 8 0.062421 0.491330 -0.220437 -0.381808 -0.155873 0.169697 0.169697 1.000000 0.169697 |
| 9 0.062421 0.491330 -0.220437 0.381808 -0.155873 0.169697 0.169697 0.169697 1.000000 |
| |
| |
| |
| =========== Kinitic Matrix ============ |
| |
| |
| 1 15.891122 -0.085890 0.000000 0.000000 0.000000 -0.010490 -0.010490 -0.010490 -0.010490 |
| 2 -0.085890 0.472250 0.000000 0.000000 0.000000 0.107188 0.107188 0.107188 0.107188 |
| 3 0.000000 0.000000 1.477728 0.000000 0.000000 0.000000 0.246818 -0.123409 -0.123409 |
| 4 0.000000 0.000000 0.000000 1.477728 0.000000 0.000000 0.000000 -0.213750 0.213750 |
| 5 0.000000 0.000000 0.000000 0.000000 1.477728 0.261790 -0.087263 -0.087263 -0.087263 |
| 6 -0.010490 0.107188 0.000000 0.000000 0.261790 0.760032 -0.005517 -0.005517 -0.005517 |
| 7 -0.010490 0.107188 0.246818 0.000000 -0.087263 -0.005517 0.760032 -0.005517 -0.005517 |
| 8 -0.010490 0.107188 -0.123409 -0.213750 -0.087263 -0.005517 -0.005517 0.760032 -0.005517 |
| 9 -0.010490 0.107188 -0.123409 0.213750 -0.087263 -0.005517 -0.005517 -0.005517 0.760032 |
| |
| =========== Nucleus Matrix ============ |
| |
| |
| 1 -35.596459 -4.674975 -0.000000 0.000000 -0.000000 -1.195826 -1.195826 -1.195825 -1.195825 |
| 2 -4.674975 -7.078563 -0.000000 0.000000 -0.000000 -2.961970 -2.961970 -2.961968 -2.961968 |
| 3 -0.000000 -0.000000 -7.036713 0.000000 0.000000 0.000000 -2.456383 1.228192 1.228192 |
| 4 0.000000 0.000000 0.000000 -7.036712 0.000000 0.000000 0.000000 2.127289 -2.127289 |
| 5 -0.000000 -0.000000 0.000000 0.000000 -7.036713 -2.605388 0.868463 0.868462 0.868462 |
| 6 -1.195826 -2.961970 0.000000 0.000000 -2.605388 -4.970755 -0.922493 -0.922492 -0.922492 |
| 7 -1.195826 -2.961970 -2.456383 0.000000 0.868463 -0.922493 -4.970755 -0.922492 -0.922492 |
| 8 -1.195825 -2.961968 1.228192 2.127289 0.868462 -0.922492 -0.922492 -4.970754 -0.922492 |
| 9 -1.195825 -2.961968 1.228192 -2.127289 0.868462 -0.922492 -0.922492 -0.922492 -4.970754 |
| |
| |
| |
| =========== ERI DATA ============ |
| 1 1 1 1 3.541948 |
| 2 1 1 1 0.576921 0.000000 0.000000 0.000000 |
| 2 1 2 1 0.111888 0.000000 0.000000 0.000000 0.000000 0.020296 0.000000 0.000000 |
| 0.000000 0.000000 0.020296 0.000000 0.000000 0.000000 0.000000 0.020296 |
| |
| 2 2 1 1 0.854682 0.000000 0.000000 0.000000 0.000000 0.852436 0.000000 0.000000 |
| 0.000000 0.000000 0.852436 0.000000 0.000000 0.000000 0.000000 0.852436 |
| |
| ... ... |
| 6 6 6 5 0.084274 |
| 6 6 6 6 0.774606 |
| |
| =========== S^(-1/2) ============ |
| |
| |
| 1 1.029974 -0.180891 -0.000000 0.000000 -0.000000 0.026095 0.026095 0.026095 0.026095 |
| 2 -0.180891 1.582802 0.000000 0.000000 0.000000 -0.344500 -0.344500 -0.344500 -0.344500 |
| 3 -0.000000 0.000000 1.173497 0.000000 -0.000000 0.000000 -0.330733 0.165366 0.165366 |
| 4 0.000000 0.000000 0.000000 1.173497 0.000000 -0.000000 0.000000 0.286423 -0.286423 |
| 5 -0.000000 0.000000 -0.000000 0.000000 1.173497 -0.350795 0.116932 0.116932 0.116932 |
| 6 0.026095 -0.344500 0.000000 -0.000000 -0.350795 1.273019 -0.027781 -0.027781 -0.027781 |
| 7 0.026095 -0.344500 -0.330733 0.000000 0.116932 -0.027781 1.273019 -0.027781 -0.027781 |
| 8 0.026095 -0.344500 0.165366 0.286423 0.116932 -0.027781 -0.027781 1.273018 -0.027781 |
| 9 0.026095 -0.344500 0.165366 -0.286423 0.116932 -0.027781 -0.027781 -0.027781 1.273018 |
| |
| |
| Energy Error |
| -34.121400 -0.790624 |
| -40.791844 0.122981 |
| -39.528968 -0.023838 |
| -39.762067 0.004381 |
| -39.720417 -0.000783 |
| -39.727881 0.000140 |
| -39.726540 -0.000025 |
| -39.726780 0.000005 |
| -39.726737 -0.000001 |
| -39.726744 0.000000 |
| -39.726743 -0.000000 |
| -39.726743 0.000000 |
| |
| |
| 1e Hamiltonian 0.012000 |
| Pre ERI : 0.048003 |
| SCF : 0.004000 |
| Total Time : 0.064003 |