-
-
Save pjknowles/e25c5c12542da9a0fa25ad6cab4b459a to your computer and use it in GitHub Desktop.
Bragg-Slater radius definitions in Molpro
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
!> Get Bragg-Slater radii for a specific atom (1--104) | |
!> | |
!> \param[in] n the atom serial number | |
!> \return Bragg-Slater radii | |
!--------------------------------------------------------------------- | |
function bragg(n) | |
!--------------------------------------------------------------------- | |
use common_sbragg, only: ialmet | |
implicit double precision (a-h,o-z) | |
!... bragg radii (J. C. Slater, Quantum Theory of Molecules and Solids, | |
! volume 2, table 3-1) | |
! J Chem Phys 41, 3199 (1964) | |
! values for He, Ne, Ar, Kr, Xe, At, Rn, Fr, Cm++ taken from | |
! webelements.com or reasonable guess | |
integer, parameter :: mxbragg=104 | |
integer :: n | |
double precision, parameter :: braggr(mxbragg)= & | |
& [0.25d0, 0.25d0, & | |
& 1.45d0,1.05d0,0.85d0,0.7d0,0.65d0,0.6d0,0.5d0, 0.45d0, & | |
& 1.8d0,1.5d0,1.25d0,1.1d0,1.d0,1.d0,1.d0, 1.d0, & | |
& 2.2d0,1.8d0, & | |
& 1.6d0,1.4d0,1.35d0,1.4d0,1.4d0,1.4d0,1.35d0,1.35d0,1.35d0,1.35d0, & | |
& 1.3d0,1.25d0,1.15d0,1.15d0,1.15d0, 1.15d0, & | |
& 2.35d0,2.0d0, & | |
& 1.8d0,1.55d0,1.45d0,1.45d0,1.35d0,1.3d0,1.35d0,1.4d0,1.6d0,1.55d0, & | |
& 1.55d0,1.45d0,1.45d0,1.40d0,1.40d0, 1.40d0, & | |
& 2.6d0,2.15d0, & | |
& 1.95d0,(1.85d0,i=1,6),1.8d0,(1.75d0,i=1,7), & | |
& 1.55d0,1.45d0,1.35d0,1.35d0,1.3d0,(1.35d0,i=1,3),1.5d0, & | |
& 1.9d0, 1.8d0,1.6d0,(1.9d0,i=1,3), & | |
& 2.85d0,2.15d0,1.95d0,1.8d0,1.8d0,(1.75d0,i=1,13) ] | |
double precision, parameter :: ahl(mxbragg)= & | |
& [0.8d0, 0.9d0, & | |
& 1.8d0,1.4d0, 1.3d0,1.1d0,0.9d0,0.9d0,0.9d0,0.9d0, & | |
& 1.4d0,1.3d0, 1.3d0,1.2d0,1.1d0,1.0d0,1.0d0,1.0d0, & | |
& 1.5d0, 1.4d0, & | |
& 1.3d0,1.2d0,1.2d0,1.2d0,1.2d0,1.2d0,1.2d0,1.1d0,1.1d0,1.1d0, & | |
& 1.1d0,1.0d0,0.9d0,0.9d0,0.9d0,0.9d0, & | |
& (1.0d0,i=1,68)] | |
double precision, parameter :: alog(mxbragg)= & | |
& [5.0d0, 5.0d0, & | |
& 7.0d0,7.0d0, 5.0d0,5.0d0,5.0d0,5.0d0,5.0d0,5.0d0, & | |
& 7.0d0,7.0d0, 5.0d0,5.0d0,5.0d0,5.0d0,5.0d0,5.0d0, & | |
& 7.0d0, 7.0d0, & | |
& 5.0d0,5.0d0,5.0d0,5.0d0,5.0d0,5.0d0,5.0d0,5.0d0,5.0d0,5.0d0, & | |
& 5.0d0,5.0d0,5.0d0,5.0d0,5.0d0,5.0d0, & | |
& (5.0d0,i=1,68)] | |
if(n.gt.mxbragg) then | |
call error('Nuclear charge too large in Bragg!','bragg') | |
end if | |
fromang=get_scalar('ANGSTROM') | |
if(ialmet.eq.1)then | |
!.. produce bragg radius | |
bragg = braggr(n)*fromang | |
elseif(ialmet.eq.2)then | |
!.. Use the values for the Log grid of mura and knowles | |
!.. bragg = 1D0 | |
bragg = alog(n) | |
elseif(ialmet.eq.3)then | |
!.. use the special Becke values to scale atomic size | |
bragg = braggr(n)*fromang*5d-1 | |
if(n.eq.1) bragg = braggr(n)*fromang | |
elseif(ialmet.eq.4)then | |
!.. use the Treutler and Ahlrichs value to scale atomic size | |
bragg = ahl(n) | |
else | |
call error('wrong case','function bragg') | |
endif | |
return | |
end function bragg |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment