mirror of
https://github.com/pfloos/quack
synced 2024-12-22 20:34:46 +01:00
Fixing up xcDFT
This commit is contained in:
parent
247bc25db5
commit
1d5ea165b1
@ -1,119 +0,0 @@
|
|||||||
subroutine read_basis(nAt,rAt,nBas,nO,nV,nShell,TotAngMomShell,CenterShell,KShell,DShell,ExpShell)
|
|
||||||
|
|
||||||
! Read basis set information
|
|
||||||
|
|
||||||
implicit none
|
|
||||||
include 'parameters.h'
|
|
||||||
|
|
||||||
! Input variables
|
|
||||||
|
|
||||||
integer,intent(in) :: nAt,nO(nspin)
|
|
||||||
double precision,intent(in) :: rAt(nAt,ncart)
|
|
||||||
|
|
||||||
! Local variables
|
|
||||||
|
|
||||||
integer :: nShAt,iAt,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(nspin)
|
|
||||||
|
|
||||||
!------------------------------------------------------------------------
|
|
||||||
! 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,nAt
|
|
||||||
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,ncart
|
|
||||||
CenterShell(nShell,k) = rAt(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',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(1) = nBas - nO(1)
|
|
||||||
nV(2) = nBas - nO(2)
|
|
||||||
|
|
||||||
end subroutine read_basis
|
|
@ -1,68 +0,0 @@
|
|||||||
subroutine read_geometry(nAt,ZNuc,rA,ENuc)
|
|
||||||
|
|
||||||
! Read molecular geometry
|
|
||||||
|
|
||||||
implicit none
|
|
||||||
|
|
||||||
include 'parameters.h'
|
|
||||||
|
|
||||||
! Ouput variables
|
|
||||||
|
|
||||||
integer,intent(in) :: nAt
|
|
||||||
|
|
||||||
! Local variables
|
|
||||||
|
|
||||||
integer :: i,j
|
|
||||||
double precision :: RAB
|
|
||||||
character(len=2) :: El
|
|
||||||
integer,external :: element_number
|
|
||||||
|
|
||||||
! Ouput variables
|
|
||||||
|
|
||||||
double precision,intent(out) :: ZNuc(NAt),rA(nAt,ncart),ENuc
|
|
||||||
|
|
||||||
! Open file with geometry specification
|
|
||||||
|
|
||||||
open(unit=1,file='input/molecule')
|
|
||||||
|
|
||||||
! Read geometry
|
|
||||||
|
|
||||||
read(1,*)
|
|
||||||
read(1,*)
|
|
||||||
read(1,*)
|
|
||||||
|
|
||||||
do i=1,nAt
|
|
||||||
read(1,*) El,rA(i,1),rA(i,2),rA(i,3)
|
|
||||||
ZNuc(i) = element_number(El)
|
|
||||||
enddo
|
|
||||||
|
|
||||||
! Compute nuclear repulsion energy
|
|
||||||
|
|
||||||
ENuc = 0
|
|
||||||
|
|
||||||
do i=1,nAt-1
|
|
||||||
do j=i+1,nAt
|
|
||||||
RAB = (rA(i,1)-rA(j,1))**2 + (rA(i,2)-rA(j,2))**2 + (rA(i,3)-rA(j,3))**2
|
|
||||||
ENuc = ENuc + ZNuc(i)*ZNuc(j)/sqrt(RAB)
|
|
||||||
enddo
|
|
||||||
enddo
|
|
||||||
|
|
||||||
! Close file with geometry specification
|
|
||||||
close(unit=1)
|
|
||||||
|
|
||||||
! Print geometry
|
|
||||||
write(*,'(A28)') '------------------'
|
|
||||||
write(*,'(A28)') 'Molecular geometry'
|
|
||||||
write(*,'(A28)') '------------------'
|
|
||||||
do i=1,NAt
|
|
||||||
write(*,'(A28,1X,I16)') 'Atom n. ',i
|
|
||||||
write(*,'(A28,1X,F16.10)') 'Z = ',ZNuc(i)
|
|
||||||
write(*,'(A28,1X,F16.10,F16.10,F16.10)') 'Atom coordinates:',(rA(i,j),j=1,ncart)
|
|
||||||
enddo
|
|
||||||
write(*,*)
|
|
||||||
write(*,'(A28)') '------------------'
|
|
||||||
write(*,'(A28,1X,F16.10)') 'Nuclear repulsion energy = ',ENuc
|
|
||||||
write(*,'(A28)') '------------------'
|
|
||||||
write(*,*)
|
|
||||||
|
|
||||||
end subroutine read_geometry
|
|
@ -1,52 +0,0 @@
|
|||||||
subroutine read_molecule(nAt,nEl,nO)
|
|
||||||
|
|
||||||
! Read number of atoms nAt and number of electrons nEl
|
|
||||||
|
|
||||||
implicit none
|
|
||||||
|
|
||||||
include 'parameters.h'
|
|
||||||
|
|
||||||
! Input variables
|
|
||||||
|
|
||||||
integer,intent(out) :: nAt,nEl(nspin),nO(nspin)
|
|
||||||
|
|
||||||
! Local variables
|
|
||||||
|
|
||||||
integer :: n
|
|
||||||
|
|
||||||
! Open file with geometry specification
|
|
||||||
|
|
||||||
open(unit=1,file='input/molecule')
|
|
||||||
|
|
||||||
! Read number of atoms and number of electrons
|
|
||||||
|
|
||||||
read(1,*)
|
|
||||||
read(1,*) nAt,n,nEl(1),nEl(2)
|
|
||||||
|
|
||||||
! Check imput consistency
|
|
||||||
|
|
||||||
if(n /= sum(nEl(:))) then
|
|
||||||
write(*,*) 'number of electrons inconsistent'
|
|
||||||
stop
|
|
||||||
endif
|
|
||||||
|
|
||||||
nO(:) = nEl(:)
|
|
||||||
|
|
||||||
! Print results
|
|
||||||
|
|
||||||
write(*,'(A28)') '----------------------'
|
|
||||||
write(*,'(A28,1X,I16)') 'Number of atoms',nAt
|
|
||||||
write(*,'(A28)') '----------------------'
|
|
||||||
write(*,*)
|
|
||||||
write(*,'(A28)') '----------------------'
|
|
||||||
write(*,'(A28,1X,I16)') 'Number of spin-up electrons',nEl(1)
|
|
||||||
write(*,'(A28,1X,I16)') 'Number of spin-down electrons',nEl(2)
|
|
||||||
write(*,'(A28,1X,I16)') 'Total number of electrons',sum(nEl(:))
|
|
||||||
write(*,'(A28)') '----------------------'
|
|
||||||
write(*,*)
|
|
||||||
|
|
||||||
! Close file with geometry specification
|
|
||||||
|
|
||||||
close(unit=1)
|
|
||||||
|
|
||||||
end subroutine read_molecule
|
|
Loading…
Reference in New Issue
Block a user