mirror of
https://github.com/pfloos/quack
synced 2024-12-22 12:23:42 +01:00
MCQC under serious work
This commit is contained in:
parent
355e5026d9
commit
3059085d57
29
input/basis
29
input/basis
@ -1,20 +1,9 @@
|
|||||||
1 5
|
1 3
|
||||||
S 6 1.00
|
S 3 1.00
|
||||||
1264.5857000 0.0019448
|
38.3600000 0.0238090
|
||||||
189.9368100 0.0148351
|
5.7700000 0.1548910
|
||||||
43.1590890 0.0720906
|
1.2400000 0.4699870
|
||||||
12.0986630 0.2371542
|
S 1 1.00
|
||||||
3.8063232 0.4691987
|
0.2976000 1.0000000
|
||||||
1.2728903 0.3565202
|
P 1 1.00
|
||||||
S 3 1.00
|
1.2750000 1.0000000
|
||||||
3.1964631 -0.1126487
|
|
||||||
0.7478133 -0.2295064
|
|
||||||
0.2199663 1.1869167
|
|
||||||
S 1 1.00
|
|
||||||
0.0823099 1.0000000
|
|
||||||
P 3 1.00
|
|
||||||
3.1964631 0.0559802
|
|
||||||
0.7478133 0.2615506
|
|
||||||
0.2199663 0.7939723
|
|
||||||
P 1 1.00
|
|
||||||
0.0823099 1.0000000
|
|
||||||
|
1
input/geminal
Normal file
1
input/geminal
Normal file
@ -0,0 +1 @@
|
|||||||
|
1.0
|
@ -1,13 +1,13 @@
|
|||||||
# Debuggin mode?
|
# Debuggin mode?
|
||||||
F
|
F
|
||||||
# Chemist notation for two-electron integral?
|
# Chemist notation for two-electron integral?
|
||||||
T
|
F
|
||||||
# Exposant of the Slater geminal
|
# Exposant of the Slater geminal
|
||||||
1.0
|
1.0
|
||||||
# One-electron integrals: Ov Kin Nuc
|
# One-electron integrals: Ov Kin Nuc
|
||||||
F F F
|
T T T
|
||||||
# Two-electron integrals: ERI F12 Yuk Erf
|
# Two-electron integrals: ERI F12 Yuk Erf
|
||||||
T F F F
|
T T T T
|
||||||
# Three-electron integrals: Type1 Type2 Type3
|
# Three-electron integrals: Type1 Type2 Type3
|
||||||
T F F
|
T F F
|
||||||
# Four-electron integrals: Type1 Type2 Type3
|
# Four-electron integrals: Type1 Type2 Type3
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
# HF MOM
|
# HF MOM
|
||||||
T F
|
T F
|
||||||
# MP2 MP3 MP2-F12
|
# MP2 MP3 MP2-F12
|
||||||
F F T
|
T F T
|
||||||
# CIS TDHF ADC
|
# CIS TDHF ADC
|
||||||
F F F
|
F F F
|
||||||
# GF2 GF3
|
# GF2 GF3
|
||||||
F F
|
F F
|
||||||
# G0W0 evGW qsGW
|
# G0W0 evGW qsGW
|
||||||
T F F
|
F F F
|
||||||
# MCMP2
|
# MCMP2
|
||||||
F
|
F
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# nAt nEl nCore nRyd
|
# nAt nEl nCore nRyd
|
||||||
1 4 0 0
|
1 2 0 0
|
||||||
# Znuc x y z
|
# Znuc x y z
|
||||||
Be 0.0 0.0 0.0
|
He 0.0 0.0 0.0
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# RHF: maxSCF thresh DIIS n_diis guess_type ortho_type
|
# RHF: maxSCF thresh DIIS n_diis guess_type ortho_type
|
||||||
32 0.0000001 T 5 1 1
|
32 0.0000001 T 5 1 1
|
||||||
# MP: MP2-F12
|
# MP:
|
||||||
T
|
|
||||||
# CIS/TDHF: singlet triplet
|
# CIS/TDHF: singlet triplet
|
||||||
T F
|
T F
|
||||||
# GF: maxSCF thresh DIIS n_diis renormalization
|
# GF: maxSCF thresh DIIS n_diis renormalization
|
||||||
|
29
input/weight
29
input/weight
@ -1,20 +1,9 @@
|
|||||||
1 5
|
1 3
|
||||||
S 6 1.00
|
S 3 1.00
|
||||||
1264.5857000 0.0019448
|
38.3600000 0.0238090
|
||||||
189.9368100 0.0148351
|
5.7700000 0.1548910
|
||||||
43.1590890 0.0720906
|
1.2400000 0.4699870
|
||||||
12.0986630 0.2371542
|
S 1 1.00
|
||||||
3.8063232 0.4691987
|
0.2976000 1.0000000
|
||||||
1.2728903 0.3565202
|
P 1 1.00
|
||||||
S 3 1.00
|
1.2750000 1.0000000
|
||||||
3.1964631 -0.1126487
|
|
||||||
0.7478133 -0.2295064
|
|
||||||
0.2199663 1.1869167
|
|
||||||
S 1 1.00
|
|
||||||
0.0823099 1.0000000
|
|
||||||
P 3 1.00
|
|
||||||
3.1964631 0.0559802
|
|
||||||
0.7478133 0.2615506
|
|
||||||
0.2199663 0.7939723
|
|
||||||
P 1 1.00
|
|
||||||
0.0823099 1.0000000
|
|
||||||
|
@ -266,11 +266,11 @@ subroutine Compute3eInt(debug,iType,nShell, &
|
|||||||
if(abs(c3eInt) > 1d-15) then
|
if(abs(c3eInt) > 1d-15) then
|
||||||
nSigc3eInt = nSigc3eInt + 1
|
nSigc3eInt = nSigc3eInt + 1
|
||||||
t_c3eInt = end_c3eInt - start_c3eInt
|
t_c3eInt = end_c3eInt - start_c3eInt
|
||||||
write(iFile,'(F20.15,I6,I6,I6,I6,I6,I6)') &
|
write(iFile,'(I9,I9,I9,I9,I9,I9,F25.15)') &
|
||||||
c3eInt,iBasA1,iBasA2,iBasA3,iBasB1,iBasB2,iBasB3
|
iBasA1,iBasA2,iBasA3,iBasB1,iBasB2,iBasB3,c3eInt
|
||||||
if(.true.) then
|
if(.true.) then
|
||||||
write(*,'(A15,1X,F16.10,1X,I6,1X,I6,1X,I6,1X,I6,1X,I6,1X,I6)') &
|
write(*,'(A15,1X,I6,1X,I6,1X,I6,1X,I6,1X,I6,1X,I6,1X,F16.10)') &
|
||||||
'(a1a2a3|b1b2b3) = ',c3eInt,iBasA1,iBasA2,iBasA3,iBasB1,iBasB2,iBasB3
|
'(a1a2a3|b1b2b3) = ',iBasA1,iBasA2,iBasA3,iBasB1,iBasB2,iBasB3,c3eInt
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ program IntPak
|
|||||||
logical :: do4eInt(n4eInt)
|
logical :: do4eInt(n4eInt)
|
||||||
|
|
||||||
integer :: nNuc,nBas,iType
|
integer :: nNuc,nBas,iType
|
||||||
integer :: nEl,nO,nV,nCore,nRyd
|
integer :: nEl,nO,nV,nC,nR
|
||||||
double precision :: ExpS
|
double precision :: ExpS
|
||||||
double precision :: ENuc
|
double precision :: ENuc
|
||||||
integer :: KG
|
integer :: KG
|
||||||
@ -56,9 +56,6 @@ program IntPak
|
|||||||
|
|
||||||
call read_options(debug,chemist_notation,ExpS,doOv,doKin,doNuc,doERI,doF12,doYuk,doErf,do3eInt,do4eInt)
|
call read_options(debug,chemist_notation,ExpS,doOv,doKin,doNuc,doERI,doF12,doYuk,doErf,do3eInt,do4eInt)
|
||||||
|
|
||||||
! Which integrals do you want?
|
|
||||||
|
|
||||||
|
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
! Read input information
|
! Read input information
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
@ -69,7 +66,7 @@ program IntPak
|
|||||||
! nBas = number of basis functions (see below)
|
! nBas = number of basis functions (see below)
|
||||||
! = nO + nV
|
! = nO + nV
|
||||||
|
|
||||||
call read_molecule(nNuc,nEl,nO,nCore,nRyd)
|
call read_molecule(nNuc,nEl,nO,nC,nR)
|
||||||
|
|
||||||
allocate(ZNuc(1:nNuc),rNuc(1:nNuc,1:3))
|
allocate(ZNuc(1:nNuc),rNuc(1:nNuc,1:3))
|
||||||
|
|
||||||
@ -246,7 +243,7 @@ program IntPak
|
|||||||
|
|
||||||
|
|
||||||
call cpu_time(start_2eInt(iType))
|
call cpu_time(start_2eInt(iType))
|
||||||
call Compute2eInt(debug,iType,nShell, &
|
call Compute2eInt(debug,chemist_notation,iType,nShell, &
|
||||||
ExpS,KG,DG,ExpG, &
|
ExpS,KG,DG,ExpG, &
|
||||||
CenterShell,TotAngMomShell,KShell,DShell,ExpShell, &
|
CenterShell,TotAngMomShell,KShell,DShell,ExpShell, &
|
||||||
np2eInt(iType),nSigp2eInt(iType),nc2eInt(iType),nSigc2eInt(iType))
|
np2eInt(iType),nSigp2eInt(iType),nc2eInt(iType),nSigc2eInt(iType))
|
||||||
@ -281,7 +278,7 @@ program IntPak
|
|||||||
ExpG = (/ 0.2209d0, 1.004d0, 3.622d0, 12.16d0, 45.87d0, 254.4d0 /)
|
ExpG = (/ 0.2209d0, 1.004d0, 3.622d0, 12.16d0, 45.87d0, 254.4d0 /)
|
||||||
|
|
||||||
call cpu_time(start_2eInt(iType))
|
call cpu_time(start_2eInt(iType))
|
||||||
call Compute2eInt(debug,iType,nShell, &
|
call Compute2eInt(debug,chemist_notation,iType,nShell, &
|
||||||
ExpS,KG,DG,ExpG, &
|
ExpS,KG,DG,ExpG, &
|
||||||
CenterShell,TotAngMomShell,KShell,DShell,ExpShell, &
|
CenterShell,TotAngMomShell,KShell,DShell,ExpShell, &
|
||||||
np2eInt(iType),nSigp2eInt(iType),nc2eInt(iType),nSigc2eInt(iType))
|
np2eInt(iType),nSigp2eInt(iType),nc2eInt(iType),nSigc2eInt(iType))
|
||||||
@ -317,7 +314,7 @@ program IntPak
|
|||||||
ExpS = ExpS*ExpS
|
ExpS = ExpS*ExpS
|
||||||
|
|
||||||
call cpu_time(start_2eInt(iType))
|
call cpu_time(start_2eInt(iType))
|
||||||
call Compute2eInt(debug,iType,nShell, &
|
call Compute2eInt(debug,chemist_notation,iType,nShell, &
|
||||||
ExpS,KG,DG,ExpG, &
|
ExpS,KG,DG,ExpG, &
|
||||||
CenterShell,TotAngMomShell,KShell,DShell,ExpShell, &
|
CenterShell,TotAngMomShell,KShell,DShell,ExpShell, &
|
||||||
np2eInt(iType),nSigp2eInt(iType),nc2eInt(iType),nSigc2eInt(iType))
|
np2eInt(iType),nSigp2eInt(iType),nc2eInt(iType),nSigc2eInt(iType))
|
||||||
|
170
src/IntPak/elements.f90
Normal file
170
src/IntPak/elements.f90
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
function element_number(element_name)
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
integer,parameter :: nelement_max = 103
|
||||||
|
character(len=2),intent(in) :: element_name
|
||||||
|
integer :: element_number
|
||||||
|
character(len=2),parameter :: element_list(nelement_max) = &
|
||||||
|
(/' H', 'He', & ! 2
|
||||||
|
'Li','Be', ' B',' C',' N',' O',' F','Ne', & ! 10
|
||||||
|
'Na','Mg', 'Al','Si',' P',' S','Cl','Ar', & ! 18
|
||||||
|
' K','Ca','Sc','Ti',' V','Cr','Mn','Fe','Co','Ni','Cu','Zn','Ga','Ge','As','Se','Br','Kr', & ! 36
|
||||||
|
'Rb','Sr',' Y','Zr','Nb','Mo','Tc','Ru','Rh','Pd','Ag','Cd','In','Sn','Sb','Te',' I','Xe', & ! 54
|
||||||
|
'Cs','Ba', & ! 56
|
||||||
|
'La','Ce','Pr','Nd','Pm','Sm','Eu','Gd','Tb','Dy','Ho','Er','Tm','Yb', & ! 70
|
||||||
|
'Lu','Hf','Ta',' W','Re','Os','Ir','Pt','Au','Hg','Tl','Pb','Bi','Po','At','Rn', & ! 86
|
||||||
|
'Fr','Ra', & ! 88
|
||||||
|
'Ac','Th','Pa',' U','Np','Pu','Am','Cm','Bk','Cf','Es','Fm','Md','No', & ! 102
|
||||||
|
'Lr' & ! 103
|
||||||
|
/)
|
||||||
|
|
||||||
|
!=====
|
||||||
|
integer :: ielement
|
||||||
|
!=====
|
||||||
|
|
||||||
|
ielement=1
|
||||||
|
do while( ADJUSTL(element_name) /= ADJUSTL(element_list(ielement)) )
|
||||||
|
if( ielement == nelement_max ) then
|
||||||
|
write(*,'(a,a)') ' Input symbol ',element_name
|
||||||
|
write(*,'(a,i3,a)') ' Element symbol is not one of first ',nelement_max,' elements'
|
||||||
|
write(*,*) '!!! element symbol not understood !!!'
|
||||||
|
stop
|
||||||
|
endif
|
||||||
|
ielement = ielement + 1
|
||||||
|
enddo
|
||||||
|
|
||||||
|
element_number = ielement
|
||||||
|
|
||||||
|
end function element_number
|
||||||
|
|
||||||
|
function element_core(zval,zatom)
|
||||||
|
implicit none
|
||||||
|
double precision,intent(in) :: zval
|
||||||
|
double precision,intent(in) :: zatom
|
||||||
|
integer :: element_core
|
||||||
|
!=====
|
||||||
|
|
||||||
|
!
|
||||||
|
! If zval /= zatom, this is certainly an effective core potential
|
||||||
|
! and no core states should be frozen.
|
||||||
|
if( ABS(zval - zatom) > 1d0-3 ) then
|
||||||
|
element_core = 0
|
||||||
|
else
|
||||||
|
|
||||||
|
if( zval <= 4.00001d0 ) then ! up to Be
|
||||||
|
element_core = 0
|
||||||
|
else if( zval <= 12.00001d0 ) then ! up to Mg
|
||||||
|
element_core = 1
|
||||||
|
else if( zval <= 30.00001d0 ) then ! up to Ca
|
||||||
|
element_core = 5
|
||||||
|
else if( zval <= 48.00001d0 ) then ! up to Sr
|
||||||
|
element_core = 9
|
||||||
|
else
|
||||||
|
write(*,*) '!!! not imlemented in element_core !!!'
|
||||||
|
stop
|
||||||
|
endif
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
end function element_core
|
||||||
|
|
||||||
|
function element_covalent_radius(zatom)
|
||||||
|
|
||||||
|
! Return covalent radius of an atom
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
include 'parameters.h'
|
||||||
|
|
||||||
|
integer,intent(in) :: zatom
|
||||||
|
double precision :: element_covalent_radius
|
||||||
|
|
||||||
|
!
|
||||||
|
! Data from Cambridge Structural Database
|
||||||
|
! http://en.wikipedia.org/wiki/Covalent_radius
|
||||||
|
!
|
||||||
|
! Values are first given in picometer
|
||||||
|
! They will be converted in bohr later on
|
||||||
|
select case(zatom)
|
||||||
|
case( 1)
|
||||||
|
element_covalent_radius = 31.
|
||||||
|
case( 2)
|
||||||
|
element_covalent_radius = 28.
|
||||||
|
case( 3)
|
||||||
|
element_covalent_radius = 128.
|
||||||
|
case( 4)
|
||||||
|
element_covalent_radius = 96.
|
||||||
|
case( 5)
|
||||||
|
element_covalent_radius = 84.
|
||||||
|
case( 6)
|
||||||
|
element_covalent_radius = 73.
|
||||||
|
case( 7)
|
||||||
|
element_covalent_radius = 71.
|
||||||
|
case( 8)
|
||||||
|
element_covalent_radius = 66.
|
||||||
|
case( 9)
|
||||||
|
element_covalent_radius = 57.
|
||||||
|
case(10) ! Ne.
|
||||||
|
element_covalent_radius = 58.
|
||||||
|
case(11)
|
||||||
|
element_covalent_radius = 166.
|
||||||
|
case(12)
|
||||||
|
element_covalent_radius = 141.
|
||||||
|
case(13)
|
||||||
|
element_covalent_radius = 121.
|
||||||
|
case(14)
|
||||||
|
element_covalent_radius = 111.
|
||||||
|
case(15)
|
||||||
|
element_covalent_radius = 107.
|
||||||
|
case(16)
|
||||||
|
element_covalent_radius = 105.
|
||||||
|
case(17)
|
||||||
|
element_covalent_radius = 102.
|
||||||
|
case(18) ! Ar.
|
||||||
|
element_covalent_radius = 106.
|
||||||
|
case(19)
|
||||||
|
element_covalent_radius = 203.
|
||||||
|
case(20)
|
||||||
|
element_covalent_radius = 176.
|
||||||
|
case(21)
|
||||||
|
element_covalent_radius = 170.
|
||||||
|
case(22)
|
||||||
|
element_covalent_radius = 160.
|
||||||
|
case(23)
|
||||||
|
element_covalent_radius = 153.
|
||||||
|
case(24)
|
||||||
|
element_covalent_radius = 139.
|
||||||
|
case(25)
|
||||||
|
element_covalent_radius = 145.
|
||||||
|
case(26)
|
||||||
|
element_covalent_radius = 145.
|
||||||
|
case(27)
|
||||||
|
element_covalent_radius = 140.
|
||||||
|
case(28)
|
||||||
|
element_covalent_radius = 124.
|
||||||
|
case(29)
|
||||||
|
element_covalent_radius = 132.
|
||||||
|
case(30)
|
||||||
|
element_covalent_radius = 122.
|
||||||
|
case(31)
|
||||||
|
element_covalent_radius = 120.
|
||||||
|
case(32)
|
||||||
|
element_covalent_radius = 119.
|
||||||
|
case(34)
|
||||||
|
element_covalent_radius = 120.
|
||||||
|
case(35)
|
||||||
|
element_covalent_radius = 120.
|
||||||
|
case(36) ! Kr.
|
||||||
|
element_covalent_radius = 116.
|
||||||
|
case default
|
||||||
|
write(*,*) '!!! covalent radius not available !!!'
|
||||||
|
stop
|
||||||
|
end select
|
||||||
|
|
||||||
|
! pm to bohr conversion
|
||||||
|
element_covalent_radius = element_covalent_radius*pmtoau
|
||||||
|
|
||||||
|
|
||||||
|
end function element_covalent_radius
|
||||||
|
|
176
src/IntPak/read_auxiliary_basis.f90
Normal file
176
src/IntPak/read_auxiliary_basis.f90
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
subroutine read_auxiliary_basis(NAtoms,XYZAtoms,nShell,CenterShell, &
|
||||||
|
TotAngMomShell,KShell,DShell,ExpShell)
|
||||||
|
|
||||||
|
! Read auxiliary basis set information
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
include 'parameters.h'
|
||||||
|
|
||||||
|
! Input variables
|
||||||
|
|
||||||
|
integer,intent(in) :: NAtoms
|
||||||
|
double precision,intent(in) :: XYZAtoms(NAtoms,3)
|
||||||
|
|
||||||
|
! Local variables
|
||||||
|
|
||||||
|
integer :: nShAt,iAt
|
||||||
|
integer :: i,j,k
|
||||||
|
character :: shelltype
|
||||||
|
|
||||||
|
! Output variables
|
||||||
|
|
||||||
|
integer,intent(out) :: nShell
|
||||||
|
double precision,intent(out) :: CenterShell(maxShell,3)
|
||||||
|
integer,intent(out) :: TotAngMomShell(maxShell),KShell(maxShell)
|
||||||
|
double precision,intent(out) :: DShell(maxShell,maxK),ExpShell(maxShell,maxK)
|
||||||
|
|
||||||
|
!------------------------------------------------------------------------
|
||||||
|
! Primary basis set information
|
||||||
|
!------------------------------------------------------------------------
|
||||||
|
|
||||||
|
! Open file with basis set specification
|
||||||
|
|
||||||
|
open(unit=2,file='input/basis')
|
||||||
|
|
||||||
|
! Read basis information
|
||||||
|
|
||||||
|
write(*,'(A28)') 'Gaussian basis set'
|
||||||
|
write(*,'(A28)') '------------------'
|
||||||
|
|
||||||
|
nShell = 0
|
||||||
|
do i=1,NAtoms
|
||||||
|
read(2,*) iAt,nShAt
|
||||||
|
write(*,'(A28,1X,I16)') 'Atom n. ',iAt
|
||||||
|
write(*,'(A28,1X,I16)') 'number of shells ',nShAt
|
||||||
|
write(*,'(A28)') '------------------'
|
||||||
|
|
||||||
|
! Basis function centers
|
||||||
|
|
||||||
|
do j=1,nShAt
|
||||||
|
nShell = nShell + 1
|
||||||
|
do k=1,3
|
||||||
|
CenterShell(nShell,k) = XYZAtoms(iAt,k)
|
||||||
|
enddo
|
||||||
|
|
||||||
|
! Shell type and contraction degree
|
||||||
|
|
||||||
|
read(2,*) shelltype,KShell(nShell)
|
||||||
|
if(shelltype == "S") then
|
||||||
|
TotAngMomShell(nShell) = 0
|
||||||
|
write(*,'(A28,1X,I16)') 's-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "P") then
|
||||||
|
TotAngMomShell(nShell) = 1
|
||||||
|
write(*,'(A28,1X,I16)') 'p-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "D") then
|
||||||
|
TotAngMomShell(nShell) = 2
|
||||||
|
write(*,'(A28,1X,I16)') 'd-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "F") then
|
||||||
|
TotAngMomShell(nShell) = 3
|
||||||
|
write(*,'(A28,1X,I16)') 'f-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "G") then
|
||||||
|
TotAngMomShell(nShell) = 4
|
||||||
|
write(*,'(A28,1X,I16)') 'g-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "H") then
|
||||||
|
TotAngMomShell(nShell) = 5
|
||||||
|
write(*,'(A28,1X,I16)') 'h-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "I") then
|
||||||
|
TotAngMomShell(nShell) = 6
|
||||||
|
write(*,'(A28,1X,I16)') 'i-type shell with K = ',KShell(nShell)
|
||||||
|
endif
|
||||||
|
|
||||||
|
! Read exponents and contraction coefficients
|
||||||
|
|
||||||
|
write(*,'(A28,1X,A16,A16)') '','Exponents','Contraction'
|
||||||
|
do k=1,Kshell(nShell)
|
||||||
|
read(2,*) ExpShell(nShell,k),DShell(nShell,k)
|
||||||
|
write(*,'(A28,1X,F16.10,F16.10)') '',ExpShell(nShell,k),DShell(nShell,k)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
write(*,'(A28)') '------------------'
|
||||||
|
enddo
|
||||||
|
|
||||||
|
! Total number of shells
|
||||||
|
|
||||||
|
write(*,'(A28,1X,I16)') 'Number of shells in OBS',nShell
|
||||||
|
write(*,'(A28)') '------------------'
|
||||||
|
write(*,*)
|
||||||
|
|
||||||
|
! Close file with basis set specification
|
||||||
|
|
||||||
|
close(unit=2)
|
||||||
|
|
||||||
|
!------------------------------------------------------------------------
|
||||||
|
! Auxiliary basis set information
|
||||||
|
!------------------------------------------------------------------------
|
||||||
|
|
||||||
|
! Open file with auxilairy basis specification
|
||||||
|
|
||||||
|
open(unit=3,file='input/auxbasis')
|
||||||
|
|
||||||
|
! Read basis information
|
||||||
|
|
||||||
|
write(*,'(A28)') 'Auxiliary basis set'
|
||||||
|
write(*,'(A28)') '-------------------'
|
||||||
|
|
||||||
|
do i=1,NAtoms
|
||||||
|
read(3,*) iAt,nShAt
|
||||||
|
write(*,'(A28,1X,I16)') 'Atom n. ',iAt
|
||||||
|
write(*,'(A28,1X,I16)') 'number of shells ',nShAt
|
||||||
|
write(*,'(A28)') '------------------'
|
||||||
|
|
||||||
|
! Basis function centers
|
||||||
|
|
||||||
|
do j=1,nShAt
|
||||||
|
nShell = nShell + 1
|
||||||
|
do k=1,3
|
||||||
|
CenterShell(nShell,k) = XYZAtoms(iAt,k)
|
||||||
|
enddo
|
||||||
|
|
||||||
|
! Shell type and contraction degree
|
||||||
|
|
||||||
|
read(3,*) shelltype,KShell(nShell)
|
||||||
|
if(shelltype == "S") then
|
||||||
|
TotAngMomShell(nShell) = 0
|
||||||
|
write(*,'(A28,1X,I16)') 's-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "P") then
|
||||||
|
TotAngMomShell(nShell) = 1
|
||||||
|
write(*,'(A28,1X,I16)') 'p-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "D") then
|
||||||
|
TotAngMomShell(nShell) = 2
|
||||||
|
write(*,'(A28,1X,I16)') 'd-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "F") then
|
||||||
|
TotAngMomShell(nShell) = 3
|
||||||
|
write(*,'(A28,1X,I16)') 'f-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "G") then
|
||||||
|
TotAngMomShell(nShell) = 4
|
||||||
|
write(*,'(A28,1X,I16)') 'g-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "H") then
|
||||||
|
TotAngMomShell(nShell) = 5
|
||||||
|
write(*,'(A28,1X,I16)') 'h-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "I") then
|
||||||
|
TotAngMomShell(nShell) = 6
|
||||||
|
write(*,'(A28,1X,I16)') 'i-type shell with K = ',KShell(nShell)
|
||||||
|
endif
|
||||||
|
|
||||||
|
! Read exponents and contraction coefficients
|
||||||
|
|
||||||
|
write(*,'(A28,1X,A16,A16)') '','Exponents','Contraction'
|
||||||
|
do k=1,Kshell(nShell)
|
||||||
|
read(3,*) ExpShell(nShell,k),DShell(nShell,k)
|
||||||
|
write(*,'(A28,1X,F16.10,F16.10)') '',ExpShell(nShell,k),DShell(nShell,k)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
write(*,'(A28)') '------------------'
|
||||||
|
enddo
|
||||||
|
|
||||||
|
! Total number of shells
|
||||||
|
|
||||||
|
write(*,'(A28,1X,I16)') 'Number of shells in ABS',nShell
|
||||||
|
write(*,'(A28)') '------------------'
|
||||||
|
write(*,*)
|
||||||
|
|
||||||
|
! Close file with basis set specification
|
||||||
|
|
||||||
|
close(unit=3)
|
||||||
|
|
||||||
|
end subroutine read_auxiliary_basis
|
118
src/IntPak/read_basis.f90
Normal file
118
src/IntPak/read_basis.f90
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
subroutine read_basis(nNuc,rNuc,nBas,nO,nV,nShell,TotAngMomShell,CenterShell,KShell,DShell,ExpShell)
|
||||||
|
|
||||||
|
! Read basis set information
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
include 'parameters.h'
|
||||||
|
|
||||||
|
! Input variables
|
||||||
|
|
||||||
|
integer,intent(in) :: nNuc,nO
|
||||||
|
double precision,intent(in) :: rNuc(nNuc,ncart)
|
||||||
|
|
||||||
|
! Local variables
|
||||||
|
|
||||||
|
integer :: nShAt,iNuc,iShell
|
||||||
|
integer :: i,j,k
|
||||||
|
character :: shelltype
|
||||||
|
|
||||||
|
! Output variables
|
||||||
|
|
||||||
|
integer,intent(out) :: nShell,nBas
|
||||||
|
double precision,intent(out) :: CenterShell(maxShell,ncart)
|
||||||
|
integer,intent(out) :: TotAngMomShell(maxShell),KShell(maxShell)
|
||||||
|
double precision,intent(out) :: DShell(maxShell,maxK),ExpShell(maxShell,maxK)
|
||||||
|
integer,intent(out) :: nV
|
||||||
|
|
||||||
|
!------------------------------------------------------------------------
|
||||||
|
! Primary basis set information
|
||||||
|
!------------------------------------------------------------------------
|
||||||
|
|
||||||
|
! Open file with basis set specification
|
||||||
|
|
||||||
|
open(unit=2,file='input/basis')
|
||||||
|
|
||||||
|
! Read basis information
|
||||||
|
|
||||||
|
write(*,'(A28)') 'Gaussian basis set'
|
||||||
|
write(*,'(A28)') '------------------'
|
||||||
|
|
||||||
|
nShell = 0
|
||||||
|
do i=1,nNuc
|
||||||
|
read(2,*) iNuc,nShAt
|
||||||
|
write(*,'(A28,1X,I16)') 'Atom n. ',iNuc
|
||||||
|
write(*,'(A28,1X,I16)') 'number of shells ',nShAt
|
||||||
|
write(*,'(A28)') '------------------'
|
||||||
|
|
||||||
|
! Basis function centers
|
||||||
|
|
||||||
|
do j=1,nShAt
|
||||||
|
nShell = nShell + 1
|
||||||
|
do k=1,ncart
|
||||||
|
CenterShell(nShell,k) = rNuc(iNuc,k)
|
||||||
|
enddo
|
||||||
|
|
||||||
|
! Shell type and contraction degree
|
||||||
|
|
||||||
|
read(2,*) shelltype,KShell(nShell)
|
||||||
|
if(shelltype == "S") then
|
||||||
|
TotAngMomShell(nShell) = 0
|
||||||
|
write(*,'(A28,1X,I16)') 's-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "P") then
|
||||||
|
TotAngMomShell(nShell) = 1
|
||||||
|
write(*,'(A28,1X,I16)') 'p-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "D") then
|
||||||
|
TotAngMomShell(nShell) = 2
|
||||||
|
write(*,'(A28,1X,I16)') 'd-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "F") then
|
||||||
|
TotAngMomShell(nShell) = 3
|
||||||
|
write(*,'(A28,1X,I16)') 'f-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "G") then
|
||||||
|
TotAngMomShell(nShell) = 4
|
||||||
|
write(*,'(A28,1X,I16)') 'g-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "H") then
|
||||||
|
TotAngMomShell(nShell) = 5
|
||||||
|
write(*,'(A28,1X,I16)') 'h-type shell with K = ',KShell(nShell)
|
||||||
|
elseif(shelltype == "I") then
|
||||||
|
TotAngMomShell(nShell) = 6
|
||||||
|
write(*,'(A28,1X,I16)') 'i-type shell with K = ',KShell(nShell)
|
||||||
|
endif
|
||||||
|
|
||||||
|
! Read exponents and contraction coefficients
|
||||||
|
|
||||||
|
write(*,'(A28,1X,A16,A16)') '','Exponents','Contraction'
|
||||||
|
do k=1,Kshell(nShell)
|
||||||
|
read(2,*) ExpShell(nShell,k),DShell(nShell,k)
|
||||||
|
write(*,'(A28,1X,F16.10,F16.10)') '',ExpShell(nShell,k),DShell(nShell,k)
|
||||||
|
enddo
|
||||||
|
enddo
|
||||||
|
write(*,'(A28)') '------------------'
|
||||||
|
enddo
|
||||||
|
|
||||||
|
! Total number of shells
|
||||||
|
|
||||||
|
write(*,'(A28,1X,I16)') 'Number of shells',nShell
|
||||||
|
write(*,'(A28)') '------------------'
|
||||||
|
write(*,*)
|
||||||
|
|
||||||
|
! Close file with basis set specification
|
||||||
|
|
||||||
|
close(unit=2)
|
||||||
|
|
||||||
|
! Calculate number of basis functions
|
||||||
|
|
||||||
|
nBas = 0
|
||||||
|
do iShell=1,nShell
|
||||||
|
nBas = nBas + (TotAngMomShell(iShell)*TotAngMomShell(iShell) + 3*TotAngMomShell(iShell) + 2)/2
|
||||||
|
enddo
|
||||||
|
|
||||||
|
write(*,'(A28)') '------------------'
|
||||||
|
write(*,'(A28,1X,I16)') 'Number of basis functions',NBas
|
||||||
|
write(*,'(A28)') '------------------'
|
||||||
|
write(*,*)
|
||||||
|
|
||||||
|
! Number of virtual orbitals
|
||||||
|
|
||||||
|
nV = nBas - nO
|
||||||
|
|
||||||
|
end subroutine read_basis
|
39
src/IntPak/read_molecule.f90
Normal file
39
src/IntPak/read_molecule.f90
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
subroutine read_molecule(nAt,nEl,nO,nC,nR)
|
||||||
|
|
||||||
|
! Read number of atoms nAt and number of electrons nEl
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
|
||||||
|
include 'parameters.h'
|
||||||
|
|
||||||
|
! Input variables
|
||||||
|
|
||||||
|
integer,intent(out) :: nAt,nEl,nO,nC,nR
|
||||||
|
|
||||||
|
! Open file with geometry specification
|
||||||
|
|
||||||
|
open(unit=1,file='input/molecule')
|
||||||
|
|
||||||
|
! Read number of atoms and number of electrons
|
||||||
|
|
||||||
|
read(1,*)
|
||||||
|
read(1,*) nAt,nEl,nC,nR
|
||||||
|
|
||||||
|
nO = nEl/2
|
||||||
|
|
||||||
|
! Print results
|
||||||
|
|
||||||
|
write(*,'(A28)') '----------------------'
|
||||||
|
write(*,'(A28,1X,I16)') 'Number of atoms',nAt
|
||||||
|
write(*,'(A28)') '----------------------'
|
||||||
|
write(*,*)
|
||||||
|
write(*,'(A28)') '----------------------'
|
||||||
|
write(*,'(A28,1X,I16)') 'Number of electrons',nEl
|
||||||
|
write(*,'(A28)') '----------------------'
|
||||||
|
write(*,*)
|
||||||
|
|
||||||
|
! Close file with geometry specification
|
||||||
|
|
||||||
|
close(unit=1)
|
||||||
|
|
||||||
|
end subroutine read_molecule
|
122
src/IntPak/read_options.f90
Normal file
122
src/IntPak/read_options.f90
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
subroutine read_options(debug,chemist_notation,ExpS,doOv,doKin,doNuc,doERI,doF12,doYuk,doErf,do3eInt,do4eInt)
|
||||||
|
|
||||||
|
! Read desired methods
|
||||||
|
|
||||||
|
implicit none
|
||||||
|
include 'parameters.h'
|
||||||
|
|
||||||
|
! Input variables
|
||||||
|
|
||||||
|
logical,intent(out) :: debug
|
||||||
|
logical,intent(out) :: chemist_notation
|
||||||
|
|
||||||
|
double precision,intent(out) :: ExpS
|
||||||
|
|
||||||
|
logical,intent(out) :: doOv
|
||||||
|
logical,intent(out) :: doKin
|
||||||
|
logical,intent(out) :: doNuc
|
||||||
|
|
||||||
|
logical,intent(out) :: doERI
|
||||||
|
logical,intent(out) :: doF12
|
||||||
|
logical,intent(out) :: doYuk
|
||||||
|
logical,intent(out) :: doErf
|
||||||
|
|
||||||
|
logical,intent(out) :: do3eInt(n3eInt)
|
||||||
|
logical,intent(out) :: do4eInt(n4eInt)
|
||||||
|
|
||||||
|
! Local variables
|
||||||
|
|
||||||
|
character(len=1) :: answer1,answer2,answer3,answer4
|
||||||
|
|
||||||
|
! Open file with method specification
|
||||||
|
|
||||||
|
open(unit=1,file='input/int')
|
||||||
|
|
||||||
|
! Read HF options
|
||||||
|
|
||||||
|
debug = .false.
|
||||||
|
chemist_notation = .false.
|
||||||
|
ExpS = 1d0
|
||||||
|
|
||||||
|
doOv = .false.
|
||||||
|
doKin = .false.
|
||||||
|
doNuc = .false.
|
||||||
|
|
||||||
|
doERI = .false.
|
||||||
|
doF12 = .false.
|
||||||
|
doYuk = .false.
|
||||||
|
doErf = .false.
|
||||||
|
|
||||||
|
do3eInt(1) = .false.
|
||||||
|
do3eInt(2) = .false.
|
||||||
|
do3eInt(3) = .false.
|
||||||
|
|
||||||
|
do4eInt(1) = .false.
|
||||||
|
do4eInt(2) = .false.
|
||||||
|
do4eInt(3) = .false.
|
||||||
|
|
||||||
|
! Debugging mode
|
||||||
|
|
||||||
|
read(1,*)
|
||||||
|
read(1,*) answer1
|
||||||
|
|
||||||
|
if(answer1 == 'T') debug = .true.
|
||||||
|
|
||||||
|
! Chem or Phys notations?
|
||||||
|
|
||||||
|
read(1,*)
|
||||||
|
read(1,*) answer1
|
||||||
|
|
||||||
|
if(answer1 == 'T') chemist_notation = .true.
|
||||||
|
|
||||||
|
! Read exponent of Slater geminal
|
||||||
|
read(1,*)
|
||||||
|
read(1,*) ExpS
|
||||||
|
|
||||||
|
write(*,'(A28)') '------------------'
|
||||||
|
write(*,'(A28,1X,F16.10)') 'Slater geminal exponent',ExpS
|
||||||
|
write(*,'(A28)') '------------------'
|
||||||
|
write(*,*)
|
||||||
|
|
||||||
|
! One-electron integrals
|
||||||
|
|
||||||
|
read(1,*)
|
||||||
|
read(1,*) answer1,answer2,answer3
|
||||||
|
|
||||||
|
if(answer1 == 'T') doOv = .true.
|
||||||
|
if(answer2 == 'T') doKin = .true.
|
||||||
|
if(answer3 == 'T') doNuc = .true.
|
||||||
|
|
||||||
|
! Two-electron integrals
|
||||||
|
|
||||||
|
read(1,*)
|
||||||
|
read(1,*) answer1,answer2,answer3,answer4
|
||||||
|
|
||||||
|
if(answer1 == 'T') doERI = .true.
|
||||||
|
if(answer2 == 'T') doF12 = .true.
|
||||||
|
if(answer3 == 'T') doYuk = .true.
|
||||||
|
if(answer4 == 'T') doErf = .true.
|
||||||
|
|
||||||
|
! Three-electron integrals
|
||||||
|
|
||||||
|
read(1,*)
|
||||||
|
read(1,*) answer1,answer2,answer3
|
||||||
|
|
||||||
|
if(answer1 == 'T') do3eInt(1) = .true.
|
||||||
|
if(answer2 == 'T') do3eInt(2) = .true.
|
||||||
|
if(answer3 == 'T') do3eInt(3) = .true.
|
||||||
|
|
||||||
|
! Four-electron integrals
|
||||||
|
|
||||||
|
read(1,*)
|
||||||
|
read(1,*) answer1,answer2,answer3
|
||||||
|
|
||||||
|
if(answer1 == 'T') do4eInt(1) = .true.
|
||||||
|
if(answer2 == 'T') do4eInt(2) = .true.
|
||||||
|
if(answer3 == 'T') do4eInt(3) = .true.
|
||||||
|
|
||||||
|
! Close file with options
|
||||||
|
|
||||||
|
close(unit=1)
|
||||||
|
|
||||||
|
end subroutine read_options
|
@ -108,7 +108,7 @@ program MCQC
|
|||||||
! nBas = number of basis functions (see below)
|
! nBas = number of basis functions (see below)
|
||||||
! = nO + nV
|
! = nO + nV
|
||||||
|
|
||||||
call read_molecule(nNuc,nEl,nC,nO,nR)
|
call read_molecule(nNuc,nEl,nO,nC,nR)
|
||||||
allocate(ZNuc(nNuc),rNuc(nNuc,3))
|
allocate(ZNuc(nNuc),rNuc(nNuc,3))
|
||||||
|
|
||||||
! Read geometry
|
! Read geometry
|
||||||
@ -122,8 +122,7 @@ program MCQC
|
|||||||
! Read basis set information
|
! Read basis set information
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
|
|
||||||
call read_basis(nNuc,rNuc,nBas,nC,nO,nV,nR,nS, &
|
call read_basis(nNuc,rNuc,nBas,nO,nV,nShell,TotAngMomShell,CenterShell,KShell,DShell,ExpShell)
|
||||||
nShell,TotAngMomShell,CenterShell,TotAngMomShell,KShell,DShell,ExpShell)
|
|
||||||
|
|
||||||
!------------------------------------------------------------------------
|
!------------------------------------------------------------------------
|
||||||
! Read auxiliary basis set information
|
! Read auxiliary basis set information
|
||||||
@ -243,7 +242,7 @@ program MCQC
|
|||||||
allocate(F12(nBas,nBas,nBas,nBas),Yuk(nBas,nBas,nBas,nBas),FC(nBas,nBas,nBas,nBas,nBas,nBas))
|
allocate(F12(nBas,nBas,nBas,nBas),Yuk(nBas,nBas,nBas,nBas),FC(nBas,nBas,nBas,nBas,nBas,nBas))
|
||||||
! Read integrals
|
! Read integrals
|
||||||
call read_F12_integrals(nBas,S,ERI_AO_basis,F12,Yuk,FC)
|
call read_F12_integrals(nBas,S,ERI_AO_basis,F12,Yuk,FC)
|
||||||
call MP2F12(nBas,nC,nO,nV,ERI_AO_basis,F12,Yuk,FC,ERHF,EcMP2(1),cHF,cHF,EcMP2F12)
|
call MP2F12(nBas,nC,nO,nV,ERI_AO_basis,F12,Yuk,FC,ERHF,EcMP2(1),cHF,EcMP2F12)
|
||||||
call cpu_time(end_MP2F12)
|
call cpu_time(end_MP2F12)
|
||||||
|
|
||||||
t_MP2F12 = end_MP2F12 - start_MP2F12
|
t_MP2F12 = end_MP2F12 - start_MP2F12
|
||||||
|
@ -13,7 +13,7 @@ subroutine read_F12_integrals(nBas,S,C,F,Y,FC)
|
|||||||
|
|
||||||
logical :: debug
|
logical :: debug
|
||||||
integer :: mu,nu,la,si,ka,ta
|
integer :: mu,nu,la,si,ka,ta
|
||||||
double precision :: ERI,F12,Yuk,ExpS
|
double precision :: ERI,F12,Yuk,F13C12,ExpS
|
||||||
|
|
||||||
! Output variables
|
! Output variables
|
||||||
|
|
||||||
@ -107,13 +107,15 @@ subroutine read_F12_integrals(nBas,S,C,F,Y,FC)
|
|||||||
|
|
||||||
FC = 0d0
|
FC = 0d0
|
||||||
do
|
do
|
||||||
read(31,*,end=31) mu,nu,la,si,ka,ta,FC
|
read(31,*,end=31) mu,nu,la,si,ka,ta,F13C12
|
||||||
|
FC(mu,nu,la,si,ka,ta) = F13C12
|
||||||
enddo
|
enddo
|
||||||
31 close(unit=31)
|
31 close(unit=31)
|
||||||
|
|
||||||
|
|
||||||
! Print results
|
! Print results
|
||||||
|
|
||||||
if(debug) then
|
if(debug) then
|
||||||
|
|
||||||
write(*,'(A28)') '----------------------'
|
write(*,'(A28)') '----------------------'
|
||||||
write(*,'(A28)') 'Electron repulsion integrals'
|
write(*,'(A28)') 'Electron repulsion integrals'
|
||||||
write(*,'(A28)') '----------------------'
|
write(*,'(A28)') '----------------------'
|
||||||
@ -123,6 +125,7 @@ subroutine read_F12_integrals(nBas,S,C,F,Y,FC)
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
write(*,*)
|
write(*,*)
|
||||||
|
|
||||||
write(*,'(A28)') '----------------------'
|
write(*,'(A28)') '----------------------'
|
||||||
write(*,'(A28)') 'F12 integrals'
|
write(*,'(A28)') 'F12 integrals'
|
||||||
write(*,'(A28)') '----------------------'
|
write(*,'(A28)') '----------------------'
|
||||||
@ -132,6 +135,7 @@ subroutine read_F12_integrals(nBas,S,C,F,Y,FC)
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
write(*,*)
|
write(*,*)
|
||||||
|
|
||||||
write(*,'(A28)') '----------------------'
|
write(*,'(A28)') '----------------------'
|
||||||
write(*,'(A28)') 'Yukawa integrals'
|
write(*,'(A28)') 'Yukawa integrals'
|
||||||
write(*,'(A28)') '----------------------'
|
write(*,'(A28)') '----------------------'
|
||||||
@ -141,6 +145,7 @@ subroutine read_F12_integrals(nBas,S,C,F,Y,FC)
|
|||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
write(*,*)
|
write(*,*)
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
! Read exponent of Slater geminal
|
! Read exponent of Slater geminal
|
||||||
|
Loading…
Reference in New Issue
Block a user