Skip to content

Instantly share code, notes, and snippets.

@pjknowles
Created October 6, 2023 17:57
Show Gist options
  • Save pjknowles/e25c5c12542da9a0fa25ad6cab4b459a to your computer and use it in GitHub Desktop.
Save pjknowles/e25c5c12542da9a0fa25ad6cab4b459a to your computer and use it in GitHub Desktop.
Bragg-Slater radius definitions in Molpro
!> 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